Navigation Menu

Skip to content

Commit

Permalink
mrb: make Expression#get_var_by_offset Rubyish
Browse files Browse the repository at this point in the history
  • Loading branch information
kou committed Oct 8, 2015
1 parent a04c9a0 commit e33bcac
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 9 deletions.
35 changes: 29 additions & 6 deletions lib/mrb/mrb_expr.c
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions lib/mrb/scripts/scan_info_builder.rb
Expand Up @@ -61,7 +61,7 @@ def build
return nil unless valid?

status = Status::START
variable = @expression.get_var_by_offset(0)
variable = @expression[0]
data = nil
codes = @expression.codes
n_codes = codes.size
Expand Down Expand Up @@ -141,7 +141,7 @@ def valid?
n_relation_expressions = 0
n_logical_expressions = 0
status = Status::START
variable = @expression.get_var_by_offset(0)
variable = @expression[0]
codes = @expression.codes
codes.each do |code|
case code.op
Expand Down
2 changes: 1 addition & 1 deletion plugins/expression_rewriters/optimize.rb
Expand Up @@ -22,7 +22,7 @@ def rewrite

return nil if codes[3].value != codes[0].value

variable = @expression.get_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)
Expand Down

0 comments on commit e33bcac

Please sign in to comment.