[Groonga-commit] groonga/groonga at 87be924 [master] expression_tree_builder: support expression having function

Back to archive index

Naoya Murakami null+****@clear*****
Fri Jun 24 15:21:57 JST 2016


Naoya Murakami	2016-06-24 15:21:57 +0900 (Fri, 24 Jun 2016)

  New Revision: 87be92420e9fffde556e9de009bf0b54e8e11f0c
  https://github.com/groonga/groonga/commit/87be92420e9fffde556e9de009bf0b54e8e11f0c

  Merged c710b7d: Merge pull request #562 from naoa/support-expr-have-func

  Message:
    expression_tree_builder: support expression having function

  Modified files:
    lib/mrb/scripts/expression_tree_builder.rb

  Modified: lib/mrb/scripts/expression_tree_builder.rb (+20 -2)
===================================================================
--- lib/mrb/scripts/expression_tree_builder.rb    2016-06-24 14:42:04 +0900 (91ed2f1)
+++ lib/mrb/scripts/expression_tree_builder.rb    2016-06-24 15:21:57 +0900 (3e236b0)
@@ -51,6 +51,9 @@ module Groonga
     def build
       stack = []
       codes =****@expre*****
+      in_function = false
+      procedure = nil
+      arguments = []
       codes.each do |code|
         case code.op
         when *LOGICAL_OPERATORS
@@ -69,9 +72,24 @@ module Groonga
         when Operator::GET_VALUE
           node = ExpressionTree::Variable.new(code.value)
           stack.push(node)
-        when Operator::PUSH
-          node = ExpressionTree::Constant.new(code.value.value)
+        when Operator::CALL
+          node = ExpressionTree::FunctionCall.new(procedure, arguments)
           stack.push(node)
+          in_function = false
+          procedure = nil
+          arguments = []
+        when Operator::PUSH
+          if in_function
+            arguments << ExpressionTree::Constant.new(code.value.value)
+          else
+            if code.value.is_a?(Procedure)
+              procedure = code.value
+              in_function = true
+            else
+              node = ExpressionTree::Constant.new(code.value.value)
+              stack.push(node)
+            end
+          end
         else
           raise "unknown operator: #{code.inspect}"
         end
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index