[Groonga-commit] groonga/groonga at 85ea3bd [master] Revert OP_CALL nargs incompatibility change

Back to archive index

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 



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