Kouhei Sutou
null+****@clear*****
Tue Apr 25 14:59:11 JST 2017
Kouhei Sutou 2017-04-25 14:59:11 +0900 (Tue, 25 Apr 2017) New Revision: 85ea3bd93c190f19f05c3e8475b951f5c2ef519e https://github.com/groonga/groonga/commit/85ea3bd93c190f19f05c3e8475b951f5c2ef519e Message: Revert OP_CALL nargs incompatibility change It's too effected I guessed. :< Modified files: lib/expr.c lib/grn_ecmascript.c lib/grn_ecmascript.lemon lib/mrb/scripts/expression_tree/function_call.rb plugins/sharding/range_expression_builder.rb plugins/suggest/suggest.c Modified: lib/expr.c (+16 -1) =================================================================== --- lib/expr.c 2017-04-25 15:25:10 +0900 (fdfd985) +++ lib/expr.c 2017-04-25 14:59:11 +0900 (9dc1fff) @@ -903,6 +903,21 @@ grn_expr_append_obj(grn_ctx *ctx, grn_obj *expr, grn_obj *obj, grn_operator op, case GRN_OP_CALL : { grn_obj *proc = NULL; + /* + * This is for keeping backward compatibility. We want to + * handle all "nargs" means that "N items on stack are used (N + * items are popped)" but "nargs" for OP_CALL is used as "N + * arguments" not "N items on stack are used" historically. It + * means that called function isn't included in "nargs". + * + * We adjust "nargs" here to handle "code->nargs" more easily. + * If we don't adjust "nargs" here, we need to care + * "code->nargs" at all locations that use "code->nargs". We + * need to use "code->nargs + 1" for OP_CALL and "code->nargs" + * for not OP_CALL to compute N items should be popped. It's + * wired. So we adjust "nargs" here. + */ + nargs++; if (e->codes_curr - (nargs - 1) > 0) { int i; grn_expr_code *code; @@ -7075,7 +7090,7 @@ parse_query(grn_ctx *ctx, efs_info *q) /* dummy token */ PARSE(GRN_EXPR_TOKEN_QSTRING); grn_expr_append_obj(ctx, q->e, all_records, GRN_OP_PUSH, 1); - grn_expr_append_op(ctx, q->e, GRN_OP_CALL, 1); + grn_expr_append_op(ctx, q->e, GRN_OP_CALL, 0); } } op->op = GRN_OP_AND_NOT; Modified: lib/grn_ecmascript.c (+1 -1) =================================================================== --- lib/grn_ecmascript.c 2017-04-25 15:25:10 +0900 (77618c6) +++ lib/grn_ecmascript.c 2017-04-25 14:59:11 +0900 (30cea9e) @@ -1946,7 +1946,7 @@ static void yy_reduce( case 65: /* call_expression ::= member_expression arguments */ #line 371 "grn_ecmascript.lemon" { - grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, 1 + yymsp[0].minor.yy0); + grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, yymsp[0].minor.yy0); } #line 1952 "grn_ecmascript.c" break; Modified: lib/grn_ecmascript.lemon (+1 -1) =================================================================== --- lib/grn_ecmascript.lemon 2017-04-25 15:25:10 +0900 (fac6ac1) +++ lib/grn_ecmascript.lemon 2017-04-25 14:59:11 +0900 (24305ae) @@ -369,7 +369,7 @@ lefthand_side_expression ::= call_expression. lefthand_side_expression ::= member_expression. call_expression ::= member_expression arguments(A). { - grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, 1 + A); + grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, A); } member_expression ::= primary_expression. Modified: lib/mrb/scripts/expression_tree/function_call.rb (+1 -1) =================================================================== --- lib/mrb/scripts/expression_tree/function_call.rb 2017-04-25 15:25:10 +0900 (55dca34) +++ lib/mrb/scripts/expression_tree/function_call.rb 2017-04-25 14:59:11 +0900 (dd61480) @@ -13,7 +13,7 @@ module Groonga @arguments.each do |argument| argument.build(expression) end - expression.append_operator(Operator::CALL, 1 +****@argum*****) + expression.append_operator(Operator::CALL, @arguments.size) end def estimate_size(table) Modified: plugins/sharding/range_expression_builder.rb (+1 -1) =================================================================== --- plugins/sharding/range_expression_builder.rb 2017-04-25 15:25:10 +0900 (26e2c82) +++ plugins/sharding/range_expression_builder.rb 2017-04-25 14:59:11 +0900 (cc80735) @@ -55,7 +55,7 @@ module Groonga expression.append_constant(@target_range.max, Operator::PUSH, 1) expression.append_constant(@target_range.max_border, Operator::PUSH, 1) - expression.append_operator(Operator::CALL, 6) + expression.append_operator(Operator::CALL, 5) build_condition(expression) end Modified: plugins/suggest/suggest.c (+1 -1) =================================================================== --- plugins/suggest/suggest.c 2017-04-25 15:25:10 +0900 (96a38d1) +++ plugins/suggest/suggest.c 2017-04-25 14:59:11 +0900 (07a8689) @@ -462,7 +462,7 @@ correct(grn_ctx *ctx, grn_obj *items, grn_obj *items_boost, key, GRN_OP_GET_VALUE, 1); grn_expr_append_const(ctx, expr, query, GRN_OP_PUSH, 1); - grn_expr_append_op(ctx, expr, GRN_OP_CALL, 3); + grn_expr_append_op(ctx, expr, GRN_OP_CALL, 2); grn_expr_append_op(ctx, expr, GRN_OP_MINUS_ASSIGN, 2); if ((tc = grn_table_cursor_open(ctx, res, NULL, 0, NULL, 0, 0, -1, 0))) { -------------- next part -------------- HTML����������������������������...Download