Kouhei Sutou
null+****@clear*****
Sat Jun 25 22:50:03 JST 2016
Kouhei Sutou 2016-06-25 22:50:03 +0900 (Sat, 25 Jun 2016) New Revision: 8a11500ea96de657efb6b183a49d7f9ca9dfec0d https://github.com/groonga/groonga/commit/8a11500ea96de657efb6b183a49d7f9ca9dfec0d Message: expression_tree: simplify Added files: lib/mrb/scripts/expression_tree/procedure.rb Modified files: lib/mrb/scripts/expression_tree.rb lib/mrb/scripts/expression_tree/function_call.rb lib/mrb/scripts/expression_tree/sources.am lib/mrb/scripts/expression_tree_builder.rb plugins/expression_rewriters/optimizer.rb Modified: lib/mrb/scripts/expression_tree.rb (+1 -0) =================================================================== --- lib/mrb/scripts/expression_tree.rb 2016-06-25 22:48:52 +0900 (ccc1ef5) +++ lib/mrb/scripts/expression_tree.rb 2016-06-25 22:50:03 +0900 (50c1c43) @@ -2,4 +2,5 @@ require "expression_tree/constant" require "expression_tree/binary_operation" require "expression_tree/function_call" require "expression_tree/logical_operation" +require "expression_tree/procedure" require "expression_tree/variable" Modified: lib/mrb/scripts/expression_tree/function_call.rb (+1 -1) =================================================================== --- lib/mrb/scripts/expression_tree/function_call.rb 2016-06-25 22:48:52 +0900 (d09da0a) +++ lib/mrb/scripts/expression_tree/function_call.rb 2016-06-25 22:50:03 +0900 (44c6213) @@ -9,7 +9,7 @@ module Groonga end def build(expression) - expression.append_object(@procedure, Operator::PUSH, 1) + @procedure.build(expression) @arguments.each do |argument| argument.build(expression) end Added: lib/mrb/scripts/expression_tree/procedure.rb (+18 -0) 100644 =================================================================== --- /dev/null +++ lib/mrb/scripts/expression_tree/procedure.rb 2016-06-25 22:50:03 +0900 (0288a55) @@ -0,0 +1,18 @@ +module Groonga + module ExpressionTree + class Procedure + attr_reader :value + def initialize(value) + @value = value + end + + def name + @value.name + end + + def build(expression) + expression.append_object(@value, Operator::PUSH, 1) + end + end + end +end Modified: lib/mrb/scripts/expression_tree/sources.am (+1 -0) =================================================================== --- lib/mrb/scripts/expression_tree/sources.am 2016-06-25 22:48:52 +0900 (6fd10bd) +++ lib/mrb/scripts/expression_tree/sources.am 2016-06-25 22:50:03 +0900 (9e0c3e1) @@ -3,4 +3,5 @@ RUBY_SCRIPT_FILES = \ constant.rb \ function_call.rb \ logical_operation.rb \ + procedure.rb \ variable.rb Modified: lib/mrb/scripts/expression_tree_builder.rb (+10 -25) =================================================================== --- lib/mrb/scripts/expression_tree_builder.rb 2016-06-25 22:48:52 +0900 (6f58328) +++ lib/mrb/scripts/expression_tree_builder.rb 2016-06-25 22:50:03 +0900 (c5f4e97) @@ -51,29 +51,7 @@ module Groonga def build stack = [] codes =****@expre***** - is_function = false - procedure = nil - arguments = [] codes.each do |code| - if is_function - case code.op - when Operator::GET_VALUE - arguments << ExpressionTree::Variable.new(code.value) - when Operator::PUSH - arguments << ExpressionTree::Constant.new(code.value.value) - #TODO: should support HashTable - when Operator::CALL - node = ExpressionTree::FunctionCall.new(procedure, arguments) - stack.push(node) - is_function = false - procedure = nil - arguments = [] - else - raise "unknown operator for arguments: #{code.inspect}" - end - next - end - case code.op when *LOGICAL_OPERATORS right = stack.pop @@ -93,12 +71,19 @@ module Groonga stack.push(node) when Operator::PUSH if code.value.is_a?(Procedure) - procedure = code.value - is_function = true + node = ExpressionTree::Procedure.new(code.value) else node = ExpressionTree::Constant.new(code.value.value) - stack.push(node) end + stack.push(node) + when Operator::CALL + arguments = [] + code.n_args.times do + arguments.unshift(stack.pop) + end + procedure = stack.pop + node = ExpressionTree::FunctionCall.new(procedure, arguments) + stack.push(node) else raise "unknown operator: #{code.inspect}" end Modified: plugins/expression_rewriters/optimizer.rb (+1 -1) =================================================================== --- plugins/expression_rewriters/optimizer.rb 2016-06-25 22:48:52 +0900 (a9ea003) +++ plugins/expression_rewriters/optimizer.rb 2016-06-25 22:50:03 +0900 (3dfee68) @@ -122,7 +122,7 @@ module Groonga end return nil if greater_node.nil? or less_node.nil? - between = context["between"] + between = ExpressionTree::Procedure.new(context["between"]) if greater_node.operator == Operator::GREATER greater_border = "exclude" else -------------- next part -------------- HTML����������������������������...Descargar