Navigation Menu

Skip to content

Commit

Permalink
mrb: move to mruby
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Jun 8, 2014
1 parent 273a5fc commit f8ee0a8
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 11 deletions.
29 changes: 19 additions & 10 deletions lib/mrb/mrb_expr.c
Expand Up @@ -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;
Expand Down Expand Up @@ -519,6 +510,22 @@ mrb_grn_scan_info_get_flags(mrb_state *mrb, mrb_value self)
return mrb_fixnum_value(flags);
}

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)
{
Expand Down Expand Up @@ -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);
Expand Down
20 changes: 19 additions & 1 deletion lib/mrb/scripts/scan_info.rb
Expand Up @@ -7,6 +7,25 @@ module Flags
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
Expand All @@ -18,7 +37,6 @@ def resolve_index(object)
end
end

private
def resolve_index_db_obj(db_obj)
index_info = db_obj.find_index(op)
return if index_info.nil?
Expand Down

0 comments on commit f8ee0a8

Please sign in to comment.