Kouhei Sutou
null+****@clear*****
Thu Oct 8 18:11:27 JST 2015
Kouhei Sutou 2015-10-08 18:11:27 +0900 (Thu, 08 Oct 2015) New Revision: e33bcac863df2ee1895fd66fc6f7315682b097fb https://github.com/groonga/groonga/commit/e33bcac863df2ee1895fd66fc6f7315682b097fb Message: mrb: make Expression#get_var_by_offset Rubyish Modified files: lib/mrb/mrb_expr.c lib/mrb/scripts/scan_info_builder.rb plugins/expression_rewriters/optimize.rb Modified: lib/mrb/mrb_expr.c (+29 -6) =================================================================== --- lib/mrb/mrb_expr.c 2015-10-08 17:55:18 +0900 (73a7bb8) +++ lib/mrb/mrb_expr.c 2015-10-08 18:11:27 +0900 (2050b6d) @@ -485,17 +485,40 @@ mrb_grn_expression_codes(mrb_state *mrb, mrb_value self) } static mrb_value -mrb_grn_expression_get_var_by_offset(mrb_state *mrb, mrb_value self) +mrb_grn_expression_array_reference(mrb_state *mrb, mrb_value self) { grn_ctx *ctx = (grn_ctx *)mrb->ud; grn_obj *expr; - mrb_int offset; + mrb_value mrb_key; grn_obj *var; - mrb_get_args(mrb, "i", &offset); + mrb_get_args(mrb, "o", &mrb_key); expr = DATA_PTR(self); - var = grn_expr_get_var_by_offset(ctx, expr, offset); + switch (mrb_type(mrb_key)) { + case MRB_TT_SYMBOL : + { + const char *name; + mrb_int name_length; + + name = mrb_sym2name_len(mrb, mrb_symbol(mrb_key), &name_length); + var = grn_expr_get_var(ctx, expr, name, name_length); + } + break; + case MRB_TT_STRING : + var = grn_expr_get_var(ctx, expr, + RSTRING_PTR(mrb_key), RSTRING_LEN(mrb_key)); + break; + case MRB_TT_FIXNUM : + var = grn_expr_get_var_by_offset(ctx, expr, mrb_fixnum(mrb_key)); + break; + default : + mrb_raisef(mrb, E_ARGUMENT_ERROR, + "key must be Symbol, String or Fixnum: %S", + mrb_key); + break; + } + return grn_mrb_value_from_grn_obj(mrb, var); } @@ -791,8 +814,8 @@ grn_mrb_expr_init(grn_ctx *ctx) mrb_grn_expression_initialize, MRB_ARGS_REQ(1)); mrb_define_method(mrb, klass, "codes", mrb_grn_expression_codes, MRB_ARGS_NONE()); - mrb_define_method(mrb, klass, "get_var_by_offset", - mrb_grn_expression_get_var_by_offset, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, klass, "[]", + mrb_grn_expression_array_reference, MRB_ARGS_REQ(1)); mrb_define_method(mrb, klass, "take_object", mrb_grn_expression_take_object, MRB_ARGS_REQ(1)); mrb_define_method(mrb, klass, "allocate_constant", Modified: lib/mrb/scripts/scan_info_builder.rb (+2 -2) =================================================================== --- lib/mrb/scripts/scan_info_builder.rb 2015-10-08 17:55:18 +0900 (9baed0d) +++ lib/mrb/scripts/scan_info_builder.rb 2015-10-08 18:11:27 +0900 (cbfaebd) @@ -61,7 +61,7 @@ module Groonga return nil unless valid? status = Status::START - variable =****@expre*****_var_by_offset(0) + variable = @expression[0] data = nil codes =****@expre***** n_codes = codes.size @@ -141,7 +141,7 @@ module Groonga n_relation_expressions = 0 n_logical_expressions = 0 status = Status::START - variable =****@expre*****_var_by_offset(0) + variable = @expression[0] codes =****@expre***** codes.each do |code| case code.op Modified: plugins/expression_rewriters/optimize.rb (+1 -1) =================================================================== --- plugins/expression_rewriters/optimize.rb 2015-10-08 17:55:18 +0900 (05e0fde) +++ plugins/expression_rewriters/optimize.rb 2015-10-08 18:11:27 +0900 (acb3eeb) @@ -22,7 +22,7 @@ module Groonga return nil if codes[3].value != codes[0].value - variable =****@expre*****_var_by_offset(0) + variable = @expression[0] rewritten = Expression.create(context[variable.domain]) rewritten.append_object(Context.instance["between"], Operator::PUSH, 1) rewritten.append_object(codes[0].value, Operator::GET_VALUE, 1) -------------- next part -------------- HTML����������������������������...Download