[Groonga-commit] groonga/groonga at e33bcac [master] mrb: make Expression#get_var_by_offset Rubyish

Back to archive index

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 



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