[Groonga-commit] groonga/groonga at 3b2c6b8 [master] mrb: bind grn_expr_get_var_by_offset()

Back to archive index

Kouhei Sutou null+****@clear*****
Mon Jun 16 23:33:24 JST 2014


Kouhei Sutou	2014-06-16 23:33:24 +0900 (Mon, 16 Jun 2014)

  New Revision: 3b2c6b86afa7536140057d9efc56ad1ed1febed2
  https://github.com/groonga/groonga/commit/3b2c6b86afa7536140057d9efc56ad1ed1febed2

  Message:
    mrb: bind grn_expr_get_var_by_offset()

  Modified files:
    lib/mrb/mrb_expr.c

  Modified: lib/mrb/mrb_expr.c (+27 -1)
===================================================================
--- lib/mrb/mrb_expr.c    2014-06-16 22:53:45 +0900 (0b79e19)
+++ lib/mrb/mrb_expr.c    2014-06-16 23:33:24 +0900 (c1afd37)
@@ -82,9 +82,18 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n,
   grn_expr_code *c, *ce;
   grn_expr *e = (grn_expr *)expr;
   mrb_state *mrb = ctx->impl->mrb.state;
+  mrb_value mrb_expr;
+  mrb_value mrb_var;
   mrb_value mrb_si;
 
-  if (!(var = grn_expr_get_var_by_offset(ctx, expr, 0))) { return NULL; }
+  mrb_expr = grn_mrb_value_from_grn_obj(mrb, expr);
+  mrb_var = mrb_funcall(mrb, mrb_expr,
+                        "get_var_by_offset", 1, mrb_fixnum_value(0));
+  if (mrb_nil_p(mrb_var)) {
+    return NULL;
+  }
+
+  var = mrb_cptr(mrb_var);
   for (stat = SCAN_START, c = e->codes, ce = &e->codes[e->codes_curr]; c < ce; c++) {
     switch (c->op) {
     case GRN_OP_MATCH :
@@ -507,6 +516,21 @@ mrb_grn_expression_codes(mrb_state *mrb, mrb_value self)
   return mrb_codes;
 }
 
+static mrb_value
+mrb_grn_expression_get_var_by_offset(mrb_state *mrb, mrb_value self)
+{
+  grn_ctx *ctx = (grn_ctx *)mrb->ud;
+  grn_obj *expr;
+  mrb_int offset;
+  grn_obj *var;
+
+  mrb_get_args(mrb, "i", &offset);
+
+  expr = DATA_PTR(self);
+  var = grn_expr_get_var_by_offset(ctx, expr, offset);
+  return grn_mrb_value_from_grn_obj(mrb, var);
+}
+
 void
 grn_mrb_expr_init(grn_ctx *ctx)
 {
@@ -559,6 +583,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));
 
   grn_mrb_load(ctx, "expression.rb");
   grn_mrb_load(ctx, "scan_info.rb");
-------------- next part --------------
HTML����������������������������...
다운로드 



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