[Groonga-commit] groonga/groonga at 6085f05 [master] Reduce needless error for complex array literal

Back to archive index
Kouhei Sutou null+****@clear*****
Wed Apr 17 21:33:26 JST 2019


Kouhei Sutou	2019-04-17 21:33:26 +0900 (Wed, 17 Apr 2019)

  Revision: 6085f056ad2f7c1671935fdc078072e6bb1778b7
  https://github.com/groonga/groonga/commit/6085f056ad2f7c1671935fdc078072e6bb1778b7

  Message:
    Reduce needless error for complex array literal

  Modified files:
    lib/grn_ecmascript.c
    lib/grn_ecmascript.lemon

  Modified: lib/grn_ecmascript.c (+45 -40)
===================================================================
--- lib/grn_ecmascript.c    2019-04-17 21:19:13 +0900 (073a3009d)
+++ lib/grn_ecmascript.c    2019-04-17 21:33:26 +0900 (5c2b8f685)
@@ -2294,15 +2294,17 @@ static YYACTIONTYPE yy_reduce(
 #line 420 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
-  grn_expr_take_obj(ctx, efsi->e, efsi->array_literal);
-  grn_expr_append_obj(ctx, efsi->e, efsi->array_literal,
-                      GRN_OP_PUSH, 1);
-  efsi->array_literal = NULL;
+  if (efsi->array_literal) {
+    grn_expr_take_obj(ctx, efsi->e, efsi->array_literal);
+    grn_expr_append_obj(ctx, efsi->e, efsi->array_literal,
+                        GRN_OP_PUSH, 1);
+    efsi->array_literal = NULL;
+  }
 }
-#line 2303 "../../groonga/lib/grn_ecmascript.c"
+#line 2305 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 70: /* element_list ::= */
-#line 428 "../../groonga/lib/grn_ecmascript.lemon"
+#line 430 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
 
@@ -2313,15 +2315,18 @@ static YYACTIONTYPE yy_reduce(
         (int)(efsi->str_end - efsi->str), efsi->str);
   }
 }
-#line 2317 "../../groonga/lib/grn_ecmascript.c"
+#line 2319 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 71: /* element_list ::= assignment_expression */
-#line 438 "../../groonga/lib/grn_ecmascript.lemon"
+#line 440 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
   grn_expr_code *code = &(e->codes[e->codes_curr - 1]);
   if (code->op != GRN_OP_PUSH) {
+    if (!efsi->array_literal) {
+      efsi->array_literal = grn_obj_open(ctx, GRN_VECTOR, 0, GRN_ID_NIL);
+    }
     ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
         "complex expression in array literal isn't supported yet: <%.*s>",
         (int)(efsi->str_end - efsi->str), efsi->str);
@@ -2353,10 +2358,10 @@ static YYACTIONTYPE yy_reduce(
     }
   }
 }
-#line 2357 "../../groonga/lib/grn_ecmascript.c"
+#line 2362 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 72: /* object_literal ::= BRACEL property_name_and_value_list BRACER */
-#line 476 "../../groonga/lib/grn_ecmascript.lemon"
+#line 481 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr_take_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal));
@@ -2364,10 +2369,10 @@ static YYACTIONTYPE yy_reduce(
                       GRN_OP_PUSH, 1);
   efsi->object_literal = NULL;
 }
-#line 2368 "../../groonga/lib/grn_ecmascript.c"
+#line 2373 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 73: /* property_name_and_value_list ::= */
-#line 484 "../../groonga/lib/grn_ecmascript.lemon"
+#line 489 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
 
@@ -2380,10 +2385,10 @@ static YYACTIONTYPE yy_reduce(
         (int)(efsi->str_end - efsi->str), efsi->str);
   }
 }
-#line 2384 "../../groonga/lib/grn_ecmascript.c"
+#line 2389 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 74: /* property_name_and_value ::= property_name COLON assignment_expression */
-#line 499 "../../groonga/lib/grn_ecmascript.lemon"
+#line 504 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -2425,61 +2430,61 @@ static YYACTIONTYPE yy_reduce(
     }
   }
 }
-#line 2429 "../../groonga/lib/grn_ecmascript.c"
+#line 2434 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 75: /* member_expression_part ::= BRACKETL expression BRACKETR */
-#line 543 "../../groonga/lib/grn_ecmascript.lemon"
+#line 548 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
 }
-#line 2436 "../../groonga/lib/grn_ecmascript.c"
+#line 2441 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 76: /* arguments ::= PARENL argument_list PARENR */
-#line 548 "../../groonga/lib/grn_ecmascript.lemon"
+#line 553 "../../groonga/lib/grn_ecmascript.lemon"
 { yymsp[-2].minor.yy0 = yymsp[-1].minor.yy0; }
-#line 2441 "../../groonga/lib/grn_ecmascript.c"
+#line 2446 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 77: /* argument_list ::= */
-#line 549 "../../groonga/lib/grn_ecmascript.lemon"
+#line 554 "../../groonga/lib/grn_ecmascript.lemon"
 { yymsp[1].minor.yy0 = 0; }
-#line 2446 "../../groonga/lib/grn_ecmascript.c"
+#line 2451 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 78: /* argument_list ::= assignment_expression */
-#line 550 "../../groonga/lib/grn_ecmascript.lemon"
+#line 555 "../../groonga/lib/grn_ecmascript.lemon"
 { yymsp[0].minor.yy0 = 1; }
-#line 2451 "../../groonga/lib/grn_ecmascript.c"
+#line 2456 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 79: /* argument_list ::= argument_list COMMA assignment_expression */
-#line 551 "../../groonga/lib/grn_ecmascript.lemon"
+#line 556 "../../groonga/lib/grn_ecmascript.lemon"
 { yylhsminor.yy0 = yymsp[-2].minor.yy0 + 1; }
-#line 2456 "../../groonga/lib/grn_ecmascript.c"
+#line 2461 "../../groonga/lib/grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
       case 80: /* output_columns ::= */
-#line 553 "../../groonga/lib/grn_ecmascript.lemon"
+#line 558 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yymsp[1].minor.yy0 = 0;
 }
-#line 2464 "../../groonga/lib/grn_ecmascript.c"
+#line 2469 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 81: /* output_columns ::= output_column */
-#line 556 "../../groonga/lib/grn_ecmascript.lemon"
+#line 561 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[0].minor.yy0;
 }
-#line 2471 "../../groonga/lib/grn_ecmascript.c"
+#line 2476 "../../groonga/lib/grn_ecmascript.c"
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
       case 82: /* output_columns ::= output_columns COMMA */
-#line 561 "../../groonga/lib/grn_ecmascript.lemon"
+#line 566 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[-1].minor.yy0;
 }
-#line 2479 "../../groonga/lib/grn_ecmascript.c"
+#line 2484 "../../groonga/lib/grn_ecmascript.c"
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
       case 83: /* output_columns ::= output_columns COMMA output_column */
-#line 566 "../../groonga/lib/grn_ecmascript.lemon"
+#line 571 "../../groonga/lib/grn_ecmascript.lemon"
 {
   if (yymsp[-2].minor.yy0 == 0) {
     yylhsminor.yy0 = yymsp[0].minor.yy0;
@@ -2492,11 +2497,11 @@ static YYACTIONTYPE yy_reduce(
     yylhsminor.yy0 = 1;
   }
 }
-#line 2496 "../../groonga/lib/grn_ecmascript.c"
+#line 2501 "../../groonga/lib/grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
       case 84: /* output_column ::= STAR */
-#line 579 "../../groonga/lib/grn_ecmascript.lemon"
+#line 584 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_obj *expr = efsi->e;
@@ -2547,21 +2552,21 @@ static YYACTIONTYPE yy_reduce(
     yymsp[0].minor.yy0 = 0;
   }
 }
-#line 2551 "../../groonga/lib/grn_ecmascript.c"
+#line 2556 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 85: /* output_column ::= NONEXISTENT_COLUMN */
-#line 629 "../../groonga/lib/grn_ecmascript.lemon"
+#line 634 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 0;
 }
-#line 2558 "../../groonga/lib/grn_ecmascript.c"
+#line 2563 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 86: /* output_column ::= assignment_expression */
-#line 632 "../../groonga/lib/grn_ecmascript.lemon"
+#line 637 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 1;
 }
-#line 2565 "../../groonga/lib/grn_ecmascript.c"
+#line 2570 "../../groonga/lib/grn_ecmascript.c"
         break;
       default:
       /* (90) input ::= query */ yytestcase(yyruleno==90);
@@ -2694,7 +2699,7 @@ static void yy_syntax_error(
     }
     GRN_OBJ_FIN(ctx, &message);
   }
-#line 2698 "../../groonga/lib/grn_ecmascript.c"
+#line 2703 "../../groonga/lib/grn_ecmascript.c"
 /************ End %syntax_error code ******************************************/
   grn_expr_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
   grn_expr_parserCTX_STORE

  Modified: lib/grn_ecmascript.lemon (+9 -4)
===================================================================
--- lib/grn_ecmascript.lemon    2019-04-17 21:19:13 +0900 (78db12d56)
+++ lib/grn_ecmascript.lemon    2019-04-17 21:33:26 +0900 (285113135)
@@ -419,10 +419,12 @@ primary_expression ::= NULL.
 
 array_literal ::= BRACKETL element_list BRACKETR. {
   grn_ctx *ctx = efsi->ctx;
-  grn_expr_take_obj(ctx, efsi->e, efsi->array_literal);
-  grn_expr_append_obj(ctx, efsi->e, efsi->array_literal,
-                      GRN_OP_PUSH, 1);
-  efsi->array_literal = NULL;
+  if (efsi->array_literal) {
+    grn_expr_take_obj(ctx, efsi->e, efsi->array_literal);
+    grn_expr_append_obj(ctx, efsi->e, efsi->array_literal,
+                        GRN_OP_PUSH, 1);
+    efsi->array_literal = NULL;
+  }
 }
 
 element_list ::= . {
@@ -440,6 +442,9 @@ element_list ::= assignment_expression. {
   grn_expr *e = (grn_expr *)(efsi->e);
   grn_expr_code *code = &(e->codes[e->codes_curr - 1]);
   if (code->op != GRN_OP_PUSH) {
+    if (!efsi->array_literal) {
+      efsi->array_literal = grn_obj_open(ctx, GRN_VECTOR, 0, GRN_ID_NIL);
+    }
     ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
         "complex expression in array literal isn't supported yet: <%.*s>",
         (int)(efsi->str_end - efsi->str), efsi->str);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20190417/03f9e2f2/attachment-0001.html>


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