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