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