[Groonga-commit] groonga/groonga at f8ee0a8 [master] mrb: move to mruby

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Jun 8 17:55:32 JST 2014


Kouhei Sutou	2014-06-08 17:55:32 +0900 (Sun, 08 Jun 2014)

  New Revision: f8ee0a8d77b3fe6a44c638b3988ecba8fdef7d1f
  https://github.com/groonga/groonga/commit/f8ee0a8d77b3fe6a44c638b3988ecba8fdef7d1f

  Message:
    mrb: move to mruby

  Modified files:
    lib/mrb/mrb_expr.c
    lib/mrb/scripts/scan_info.rb

  Modified: lib/mrb/mrb_expr.c (+19 -10)
===================================================================
--- lib/mrb/mrb_expr.c    2014-06-08 17:40:52 +0900 (bc59f83)
+++ lib/mrb/mrb_expr.c    2014-06-08 17:55:32 +0900 (eb86e54)
@@ -353,16 +353,7 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
         mrb_funcall(mrb, mrb_si, "op=", 1, mrb_fixnum_value(c->op));
         mrb_funcall(mrb, mrb_si, "end=", 1, mrb_fixnum_value(c - e->codes));
         sis[i++] = si;
-        /* better index resolving framework for functions should be implemented */
-        {
-          int k;
-          grn_obj *arg, **p = &arg;
-          for (k = 0; (arg = grn_scan_info_get_arg(ctx, si, k)) ; k++) {
-            mrb_value mrb_target;
-            mrb_target = grn_mrb_value_from_grn_obj(mrb, *p);
-            mrb_funcall(mrb, mrb_si, "resolve_index", 1, mrb_target);
-          }
-        }
+        mrb_funcall(mrb, mrb_si, "resolve_indexes", 0);
         si = NULL;
       } else {
         stat = SCAN_COL2;
@@ -520,6 +511,22 @@ mrb_grn_scan_info_get_flags(mrb_state *mrb, mrb_value self)
 }
 
 static mrb_value
+mrb_grn_scan_info_get_arg(mrb_state *mrb, mrb_value self)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+  scan_info *si;
+  int index;
+  grn_obj *arg;
+
+  mrb_get_args(mrb, "i", &index);
+
+  si = DATA_PTR(self);
+  arg = grn_scan_info_get_arg(ctx, si, index);
+
+  return grn_mrb_value_from_grn_obj(mrb, arg);
+}
+
+static mrb_value
 mrb_grn_expr_code_get_weight(mrb_state *mrb, mrb_value self)
 {
   grn_ctx *ctx = (grn_ctx *)mrb->ud;
@@ -555,6 +562,8 @@ grn_mrb_expr_init(grn_ctx *ctx)
                     mrb_grn_scan_info_get_flags, MRB_ARGS_NONE());
   mrb_define_method(mrb, klass, "flags=",
                     mrb_grn_scan_info_set_flags, MRB_ARGS_REQ(1));
+  mrb_define_method(mrb, klass, "get_arg",
+                    mrb_grn_scan_info_get_arg, MRB_ARGS_REQ(1));
 
   klass = mrb_define_class_under(mrb, module,
                                  "ExpressionCode", mrb->object_class);

  Modified: lib/mrb/scripts/scan_info.rb (+19 -1)
===================================================================
--- lib/mrb/scripts/scan_info.rb    2014-06-08 17:40:52 +0900 (2fd161f)
+++ lib/mrb/scripts/scan_info.rb    2014-06-08 17:55:32 +0900 (906b56c)
@@ -7,6 +7,25 @@ module Groonga
       PRE_CONST = 0x08
     end
 
+    def each_arg
+      i = 0
+      loop do
+        arg = get_arg(i)
+        break if arg.nil?
+        yield(arg)
+        i += 1
+      end
+      nil
+    end
+
+    def resolve_indexes
+      # better index resolving framework for functions should be implemented
+      each_arg do |arg|
+        resolve_index(arg)
+      end
+    end
+
+    private
     def resolve_index(object)
       case object
       when Accessor
@@ -18,7 +37,6 @@ module Groonga
       end
     end
 
-    private
     def resolve_index_db_obj(db_obj)
       index_info = db_obj.find_index(op)
       return if index_info.nil?
-------------- next part --------------
HTML����������������������������...
Download 



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