[Groonga-commit] groonga/groonga at 881c983 [master] expr: add more message on syntax error

Back to archive index

Kouhei Sutou null+****@clear*****
Thu Mar 30 14:22:27 JST 2017


Kouhei Sutou	2017-03-30 14:22:27 +0900 (Thu, 30 Mar 2017)

  New Revision: 881c9830741b0e7aeed92a5f52ddaddd00a11103
  https://github.com/groonga/groonga/commit/881c9830741b0e7aeed92a5f52ddaddd00a11103

  Message:
    expr: add more message on syntax error

  Modified files:
    lib/expr.c
    lib/grn_ecmascript.c
    lib/grn_ecmascript.lemon
    test/command/suite/select/filter/alias/nested.expected
    test/command/suite/select/filter/alias/one_level.expected
    test/command/suite/select/match_columns/invalid/with_invalid_query_expander.expected

  Modified: lib/expr.c (+4 -0)
===================================================================
--- lib/expr.c    2017-03-30 14:31:51 +0900 (5365804)
+++ lib/expr.c    2017-03-30 14:22:27 +0900 (1b188ff)
@@ -7262,6 +7262,10 @@ done :
       PARSE(GRN_EXPR_TOKEN_NONEXISTENT_COLUMN);
     } else {
       rc = GRN_SYNTAX_ERROR;
+      ERR(rc,
+          "[expr][parse] unknown identifier: <%.*s>",
+          (int)name_size,
+          name);
     }
   }
 exit :

  Modified: lib/grn_ecmascript.c (+95 -91)
===================================================================
--- lib/grn_ecmascript.c    2017-03-30 14:31:51 +0900 (79edf77)
+++ lib/grn_ecmascript.c    2017-03-30 14:22:27 +0900 (30cea9e)
@@ -1425,7 +1425,7 @@ static void yy_reduce(
 /********** Begin reduce actions **********************************************/
         YYMINORTYPE yylhsminor;
       case 0: /* query ::= query query_element */
-#line 49 "grn_ecmascript.lemon"
+#line 53 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->op_stack, -1), 2);
 }
@@ -1433,7 +1433,7 @@ static void yy_reduce(
         break;
       case 1: /* query ::= query LOGICAL_AND query_element */
       case 23: /* logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */ yytestcase(yyruleno==23);
-#line 52 "grn_ecmascript.lemon"
+#line 56 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2);
 }
@@ -1441,7 +1441,7 @@ static void yy_reduce(
         break;
       case 2: /* query ::= query LOGICAL_AND_NOT query_element */
       case 24: /* logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */ yytestcase(yyruleno==24);
-#line 55 "grn_ecmascript.lemon"
+#line 59 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2);
 }
@@ -1449,14 +1449,14 @@ static void yy_reduce(
         break;
       case 3: /* query ::= query LOGICAL_OR query_element */
       case 22: /* logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */ yytestcase(yyruleno==22);
-#line 58 "grn_ecmascript.lemon"
+#line 62 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2);
 }
 #line 1457 "grn_ecmascript.c"
         break;
       case 4: /* query_element ::= RELATIVE_OP query_element */
-#line 65 "grn_ecmascript.lemon"
+#line 69 "grn_ecmascript.lemon"
 {
   int mode;
   GRN_INT32_POP(&efsi->mode_stack, mode);
@@ -1464,7 +1464,7 @@ static void yy_reduce(
 #line 1465 "grn_ecmascript.c"
         break;
       case 5: /* query_element ::= IDENTIFIER RELATIVE_OP query_element */
-#line 69 "grn_ecmascript.lemon"
+#line 73 "grn_ecmascript.lemon"
 {
   int mode;
   grn_obj *c;
@@ -1492,105 +1492,105 @@ static void yy_reduce(
         break;
       case 6: /* query_element ::= BRACEL expression BRACER */
       case 7: /* query_element ::= EVAL primary_expression */ yytestcase(yyruleno==7);
-#line 92 "grn_ecmascript.lemon"
+#line 96 "grn_ecmascript.lemon"
 {
   efsi->flags = efsi->default_flags;
 }
 #line 1500 "grn_ecmascript.c"
         break;
       case 8: /* expression ::= expression COMMA assignment_expression */
-#line 100 "grn_ecmascript.lemon"
+#line 104 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
 }
 #line 1507 "grn_ecmascript.c"
         break;
       case 9: /* assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
-#line 105 "grn_ecmascript.lemon"
+#line 109 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ASSIGN, 2);
 }
 #line 1514 "grn_ecmascript.c"
         break;
       case 10: /* assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
-#line 108 "grn_ecmascript.lemon"
+#line 112 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR_ASSIGN, 2);
 }
 #line 1521 "grn_ecmascript.c"
         break;
       case 11: /* assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
-#line 111 "grn_ecmascript.lemon"
+#line 115 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH_ASSIGN, 2);
 }
 #line 1528 "grn_ecmascript.c"
         break;
       case 12: /* assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
-#line 114 "grn_ecmascript.lemon"
+#line 118 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD_ASSIGN, 2);
 }
 #line 1535 "grn_ecmascript.c"
         break;
       case 13: /* assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
-#line 117 "grn_ecmascript.lemon"
+#line 121 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS_ASSIGN, 2);
 }
 #line 1542 "grn_ecmascript.c"
         break;
       case 14: /* assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
-#line 120 "grn_ecmascript.lemon"
+#line 124 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS_ASSIGN, 2);
 }
 #line 1549 "grn_ecmascript.c"
         break;
       case 15: /* assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
-#line 123 "grn_ecmascript.lemon"
+#line 127 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL_ASSIGN, 2);
 }
 #line 1556 "grn_ecmascript.c"
         break;
       case 16: /* assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
-#line 126 "grn_ecmascript.lemon"
+#line 130 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR_ASSIGN, 2);
 }
 #line 1563 "grn_ecmascript.c"
         break;
       case 17: /* assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
-#line 129 "grn_ecmascript.lemon"
+#line 133 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR_ASSIGN, 2);
 }
 #line 1570 "grn_ecmascript.c"
         break;
       case 18: /* assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
-#line 132 "grn_ecmascript.lemon"
+#line 136 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_ASSIGN, 2);
 }
 #line 1577 "grn_ecmascript.c"
         break;
       case 19: /* assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
-#line 135 "grn_ecmascript.lemon"
+#line 139 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_XOR_ASSIGN, 2);
 }
 #line 1584 "grn_ecmascript.c"
         break;
       case 20: /* assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
-#line 138 "grn_ecmascript.lemon"
+#line 142 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR_ASSIGN, 2);
 }
 #line 1591 "grn_ecmascript.c"
         break;
       case 21: /* conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
-#line 143 "grn_ecmascript.lemon"
+#line 147 "grn_ecmascript.lemon"
 {
   grn_expr *e = (grn_expr *)efsi->e;
   e->codes[yymsp[-3].minor.yy0].nargs = yymsp[-1].minor.yy0 - yymsp[-3].minor.yy0;
@@ -1599,70 +1599,70 @@ static void yy_reduce(
 #line 1600 "grn_ecmascript.c"
         break;
       case 25: /* bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
-#line 163 "grn_ecmascript.lemon"
+#line 167 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_OR, 2);
 }
 #line 1607 "grn_ecmascript.c"
         break;
       case 26: /* bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
-#line 168 "grn_ecmascript.lemon"
+#line 172 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_XOR, 2);
 }
 #line 1614 "grn_ecmascript.c"
         break;
       case 27: /* bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
-#line 173 "grn_ecmascript.lemon"
+#line 177 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_AND, 2);
 }
 #line 1621 "grn_ecmascript.c"
         break;
       case 28: /* equality_expression ::= equality_expression EQUAL relational_expression */
-#line 178 "grn_ecmascript.lemon"
+#line 182 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EQUAL, 2);
 }
 #line 1628 "grn_ecmascript.c"
         break;
       case 29: /* equality_expression ::= equality_expression NOT_EQUAL relational_expression */
-#line 181 "grn_ecmascript.lemon"
+#line 185 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT_EQUAL, 2);
 }
 #line 1635 "grn_ecmascript.c"
         break;
       case 30: /* relational_expression ::= relational_expression LESS shift_expression */
-#line 186 "grn_ecmascript.lemon"
+#line 190 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS, 2);
 }
 #line 1642 "grn_ecmascript.c"
         break;
       case 31: /* relational_expression ::= relational_expression GREATER shift_expression */
-#line 189 "grn_ecmascript.lemon"
+#line 193 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER, 2);
 }
 #line 1649 "grn_ecmascript.c"
         break;
       case 32: /* relational_expression ::= relational_expression LESS_EQUAL shift_expression */
-#line 192 "grn_ecmascript.lemon"
+#line 196 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS_EQUAL, 2);
 }
 #line 1656 "grn_ecmascript.c"
         break;
       case 33: /* relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
-#line 195 "grn_ecmascript.lemon"
+#line 199 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER_EQUAL, 2);
 }
 #line 1663 "grn_ecmascript.c"
         break;
       case 34: /* relational_expression ::= relational_expression IN shift_expression */
-#line 198 "grn_ecmascript.lemon"
+#line 202 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_IN, 2);
 }
@@ -1670,14 +1670,14 @@ static void yy_reduce(
         break;
       case 35: /* relational_expression ::= relational_expression MATCH shift_expression */
       case 83: /* adjust_match_expression ::= IDENTIFIER MATCH STRING */ yytestcase(yyruleno==83);
-#line 201 "grn_ecmascript.lemon"
+#line 205 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2);
 }
 #line 1678 "grn_ecmascript.c"
         break;
       case 36: /* relational_expression ::= relational_expression NEAR shift_expression */
-#line 204 "grn_ecmascript.lemon"
+#line 208 "grn_ecmascript.lemon"
 {
   {
     int max_interval;
@@ -1690,70 +1690,70 @@ static void yy_reduce(
 #line 1691 "grn_ecmascript.c"
         break;
       case 37: /* relational_expression ::= relational_expression NEAR2 shift_expression */
-#line 213 "grn_ecmascript.lemon"
+#line 217 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR2, 2);
 }
 #line 1698 "grn_ecmascript.c"
         break;
       case 38: /* relational_expression ::= relational_expression SIMILAR shift_expression */
-#line 216 "grn_ecmascript.lemon"
+#line 220 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SIMILAR, 2);
 }
 #line 1705 "grn_ecmascript.c"
         break;
       case 39: /* relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
-#line 219 "grn_ecmascript.lemon"
+#line 223 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_TERM_EXTRACT, 2);
 }
 #line 1712 "grn_ecmascript.c"
         break;
       case 40: /* relational_expression ::= relational_expression LCP shift_expression */
-#line 222 "grn_ecmascript.lemon"
+#line 226 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LCP, 2);
 }
 #line 1719 "grn_ecmascript.c"
         break;
       case 41: /* relational_expression ::= relational_expression PREFIX shift_expression */
-#line 225 "grn_ecmascript.lemon"
+#line 229 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PREFIX, 2);
 }
 #line 1726 "grn_ecmascript.c"
         break;
       case 42: /* relational_expression ::= relational_expression SUFFIX shift_expression */
-#line 228 "grn_ecmascript.lemon"
+#line 232 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SUFFIX, 2);
 }
 #line 1733 "grn_ecmascript.c"
         break;
       case 43: /* relational_expression ::= relational_expression REGEXP shift_expression */
-#line 231 "grn_ecmascript.lemon"
+#line 235 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_REGEXP, 2);
 }
 #line 1740 "grn_ecmascript.c"
         break;
       case 44: /* shift_expression ::= shift_expression SHIFTL additive_expression */
-#line 236 "grn_ecmascript.lemon"
+#line 240 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL, 2);
 }
 #line 1747 "grn_ecmascript.c"
         break;
       case 45: /* shift_expression ::= shift_expression SHIFTR additive_expression */
-#line 239 "grn_ecmascript.lemon"
+#line 243 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR, 2);
 }
 #line 1754 "grn_ecmascript.c"
         break;
       case 46: /* shift_expression ::= shift_expression SHIFTRR additive_expression */
-#line 242 "grn_ecmascript.lemon"
+#line 246 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR, 2);
 }
@@ -1761,14 +1761,14 @@ static void yy_reduce(
         break;
       case 47: /* additive_expression ::= additive_expression PLUS multiplicative_expression */
       case 81: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==81);
-#line 247 "grn_ecmascript.lemon"
+#line 251 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2);
 }
 #line 1769 "grn_ecmascript.c"
         break;
       case 48: /* additive_expression ::= additive_expression MINUS multiplicative_expression */
-#line 250 "grn_ecmascript.lemon"
+#line 254 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 2);
 }
@@ -1776,35 +1776,35 @@ static void yy_reduce(
         break;
       case 49: /* multiplicative_expression ::= multiplicative_expression STAR unary_expression */
       case 82: /* adjust_expression ::= adjust_match_expression STAR DECIMAL */ yytestcase(yyruleno==82);
-#line 255 "grn_ecmascript.lemon"
+#line 259 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2);
 }
 #line 1784 "grn_ecmascript.c"
         break;
       case 50: /* multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
-#line 258 "grn_ecmascript.lemon"
+#line 262 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH, 2);
 }
 #line 1791 "grn_ecmascript.c"
         break;
       case 51: /* multiplicative_expression ::= multiplicative_expression MOD unary_expression */
-#line 261 "grn_ecmascript.lemon"
+#line 265 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD, 2);
 }
 #line 1798 "grn_ecmascript.c"
         break;
       case 52: /* unary_expression ::= DELETE unary_expression */
-#line 266 "grn_ecmascript.lemon"
+#line 270 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DELETE, 1);
 }
 #line 1805 "grn_ecmascript.c"
         break;
       case 53: /* unary_expression ::= INCR unary_expression */
-#line 269 "grn_ecmascript.lemon"
+#line 273 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1825,7 +1825,7 @@ static void yy_reduce(
 #line 1826 "grn_ecmascript.c"
         break;
       case 54: /* unary_expression ::= DECR unary_expression */
-#line 286 "grn_ecmascript.lemon"
+#line 290 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1846,63 +1846,63 @@ static void yy_reduce(
 #line 1847 "grn_ecmascript.c"
         break;
       case 55: /* unary_expression ::= PLUS unary_expression */
-#line 303 "grn_ecmascript.lemon"
+#line 307 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 1);
 }
 #line 1854 "grn_ecmascript.c"
         break;
       case 56: /* unary_expression ::= MINUS unary_expression */
-#line 306 "grn_ecmascript.lemon"
+#line 310 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 1);
 }
 #line 1861 "grn_ecmascript.c"
         break;
       case 57: /* unary_expression ::= NOT unary_expression */
-#line 309 "grn_ecmascript.lemon"
+#line 313 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT, 1);
 }
 #line 1868 "grn_ecmascript.c"
         break;
       case 58: /* unary_expression ::= BITWISE_NOT unary_expression */
-#line 312 "grn_ecmascript.lemon"
+#line 316 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_NOT, 1);
 }
 #line 1875 "grn_ecmascript.c"
         break;
       case 59: /* unary_expression ::= ADJUST unary_expression */
-#line 315 "grn_ecmascript.lemon"
+#line 319 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 1);
 }
 #line 1882 "grn_ecmascript.c"
         break;
       case 60: /* unary_expression ::= EXACT unary_expression */
-#line 318 "grn_ecmascript.lemon"
+#line 322 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EXACT, 1);
 }
 #line 1889 "grn_ecmascript.c"
         break;
       case 61: /* unary_expression ::= PARTIAL unary_expression */
-#line 321 "grn_ecmascript.lemon"
+#line 325 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PARTIAL, 1);
 }
 #line 1896 "grn_ecmascript.c"
         break;
       case 62: /* unary_expression ::= UNSPLIT unary_expression */
-#line 324 "grn_ecmascript.lemon"
+#line 328 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_UNSPLIT, 1);
 }
 #line 1903 "grn_ecmascript.c"
         break;
       case 63: /* postfix_expression ::= lefthand_side_expression INCR */
-#line 329 "grn_ecmascript.lemon"
+#line 333 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1923,7 +1923,7 @@ static void yy_reduce(
 #line 1924 "grn_ecmascript.c"
         break;
       case 64: /* postfix_expression ::= lefthand_side_expression DECR */
-#line 346 "grn_ecmascript.lemon"
+#line 350 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -1944,14 +1944,14 @@ static void yy_reduce(
 #line 1945 "grn_ecmascript.c"
         break;
       case 65: /* call_expression ::= member_expression arguments */
-#line 367 "grn_ecmascript.lemon"
+#line 371 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, yymsp[0].minor.yy0);
 }
 #line 1952 "grn_ecmascript.c"
         break;
       case 66: /* object_literal ::= BRACEL property_name_and_value_list BRACER */
-#line 395 "grn_ecmascript.lemon"
+#line 399 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr_take_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal));
@@ -1962,7 +1962,7 @@ static void yy_reduce(
 #line 1963 "grn_ecmascript.c"
         break;
       case 67: /* property_name_and_value_list ::= */
-#line 403 "grn_ecmascript.lemon"
+#line 407 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
 
@@ -1978,7 +1978,7 @@ static void yy_reduce(
 #line 1979 "grn_ecmascript.c"
         break;
       case 68: /* property_name_and_value ::= property_name COLON assignment_expression */
-#line 418 "grn_ecmascript.lemon"
+#line 422 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -2023,42 +2023,42 @@ static void yy_reduce(
 #line 2024 "grn_ecmascript.c"
         break;
       case 69: /* member_expression_part ::= BRACKETL expression BRACKETR */
-#line 462 "grn_ecmascript.lemon"
+#line 466 "grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
 }
 #line 2031 "grn_ecmascript.c"
         break;
       case 70: /* arguments ::= PARENL argument_list PARENR */
-#line 467 "grn_ecmascript.lemon"
+#line 471 "grn_ecmascript.lemon"
 { yymsp[-2].minor.yy0 = yymsp[-1].minor.yy0; }
 #line 2036 "grn_ecmascript.c"
         break;
       case 71: /* argument_list ::= */
-#line 468 "grn_ecmascript.lemon"
+#line 472 "grn_ecmascript.lemon"
 { yymsp[1].minor.yy0 = 0; }
 #line 2041 "grn_ecmascript.c"
         break;
       case 72: /* argument_list ::= assignment_expression */
-#line 469 "grn_ecmascript.lemon"
+#line 473 "grn_ecmascript.lemon"
 { yymsp[0].minor.yy0 = 1; }
 #line 2046 "grn_ecmascript.c"
         break;
       case 73: /* argument_list ::= argument_list COMMA assignment_expression */
-#line 470 "grn_ecmascript.lemon"
+#line 474 "grn_ecmascript.lemon"
 { yylhsminor.yy0 = yymsp[-2].minor.yy0 + 1; }
 #line 2051 "grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
       case 74: /* output_columns ::= */
-#line 472 "grn_ecmascript.lemon"
+#line 476 "grn_ecmascript.lemon"
 {
   yymsp[1].minor.yy0 = 0;
 }
 #line 2059 "grn_ecmascript.c"
         break;
       case 75: /* output_columns ::= output_column */
-#line 475 "grn_ecmascript.lemon"
+#line 479 "grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[0].minor.yy0;
 }
@@ -2066,7 +2066,7 @@ static void yy_reduce(
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
       case 76: /* output_columns ::= output_columns COMMA */
-#line 480 "grn_ecmascript.lemon"
+#line 484 "grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[-1].minor.yy0;
 }
@@ -2074,7 +2074,7 @@ static void yy_reduce(
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
       case 77: /* output_columns ::= output_columns COMMA output_column */
-#line 485 "grn_ecmascript.lemon"
+#line 489 "grn_ecmascript.lemon"
 {
   if (yymsp[-2].minor.yy0 == 0) {
     yylhsminor.yy0 = yymsp[0].minor.yy0;
@@ -2091,7 +2091,7 @@ static void yy_reduce(
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
       case 78: /* output_column ::= STAR */
-#line 498 "grn_ecmascript.lemon"
+#line 502 "grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_obj *expr = efsi->e;
@@ -2145,14 +2145,14 @@ static void yy_reduce(
 #line 2146 "grn_ecmascript.c"
         break;
       case 79: /* output_column ::= NONEXISTENT_COLUMN */
-#line 548 "grn_ecmascript.lemon"
+#line 552 "grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 0;
 }
 #line 2153 "grn_ecmascript.c"
         break;
       case 80: /* output_column ::= assignment_expression */
-#line 551 "grn_ecmascript.lemon"
+#line 555 "grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 1;
 }
@@ -2269,25 +2269,29 @@ static void yy_syntax_error(
 
   {
     grn_ctx *ctx = efsi->ctx;
-    if (ctx->rc == GRN_SUCCESS) {
-      grn_obj message;
-      GRN_TEXT_INIT(&message, 0);
-      GRN_TEXT_PUT(ctx, &message, efsi->str, efsi->cur - efsi->str);
+    grn_obj message;
+    GRN_TEXT_INIT(&message, 0);
+    GRN_TEXT_PUT(ctx, &message, efsi->str, efsi->cur - efsi->str);
+    GRN_TEXT_PUTC(ctx, &message, '|');
+    if (efsi->cur < efsi->str_end) {
+      GRN_TEXT_PUTC(ctx, &message, efsi->cur[0]);
       GRN_TEXT_PUTC(ctx, &message, '|');
-      if (efsi->cur < efsi->str_end) {
-        GRN_TEXT_PUTC(ctx, &message, efsi->cur[0]);
-        GRN_TEXT_PUTC(ctx, &message, '|');
-        GRN_TEXT_PUT(ctx, &message,
-                     efsi->cur + 1, efsi->str_end - (efsi->cur + 1));
-      } else {
-        GRN_TEXT_PUTC(ctx, &message, '|');
-      }
+      GRN_TEXT_PUT(ctx, &message,
+                   efsi->cur + 1, efsi->str_end - (efsi->cur + 1));
+    } else {
+      GRN_TEXT_PUTC(ctx, &message, '|');
+    }
+    if (ctx->rc == GRN_SUCCESS) {
       ERR(GRN_SYNTAX_ERROR, "Syntax error: <%.*s>",
           (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message));
-      GRN_OBJ_FIN(ctx, &message);
+    } else {
+      ERR(ctx->rc, "Syntax error: <%.*s>: %s",
+          (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message),
+          ctx->errbuf);
     }
+    GRN_OBJ_FIN(ctx, &message);
   }
-#line 2291 "grn_ecmascript.c"
+#line 2295 "grn_ecmascript.c"
 /************ End %syntax_error code ******************************************/
   grn_expr_parserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }

  Modified: lib/grn_ecmascript.lemon (+17 -13)
===================================================================
--- lib/grn_ecmascript.lemon    2017-03-30 14:31:51 +0900 (97ec9cd)
+++ lib/grn_ecmascript.lemon    2017-03-30 14:22:27 +0900 (24305ae)
@@ -20,23 +20,27 @@
 %syntax_error {
   {
     grn_ctx *ctx = efsi->ctx;
-    if (ctx->rc == GRN_SUCCESS) {
-      grn_obj message;
-      GRN_TEXT_INIT(&message, 0);
-      GRN_TEXT_PUT(ctx, &message, efsi->str, efsi->cur - efsi->str);
+    grn_obj message;
+    GRN_TEXT_INIT(&message, 0);
+    GRN_TEXT_PUT(ctx, &message, efsi->str, efsi->cur - efsi->str);
+    GRN_TEXT_PUTC(ctx, &message, '|');
+    if (efsi->cur < efsi->str_end) {
+      GRN_TEXT_PUTC(ctx, &message, efsi->cur[0]);
       GRN_TEXT_PUTC(ctx, &message, '|');
-      if (efsi->cur < efsi->str_end) {
-        GRN_TEXT_PUTC(ctx, &message, efsi->cur[0]);
-        GRN_TEXT_PUTC(ctx, &message, '|');
-        GRN_TEXT_PUT(ctx, &message,
-                     efsi->cur + 1, efsi->str_end - (efsi->cur + 1));
-      } else {
-        GRN_TEXT_PUTC(ctx, &message, '|');
-      }
+      GRN_TEXT_PUT(ctx, &message,
+                   efsi->cur + 1, efsi->str_end - (efsi->cur + 1));
+    } else {
+      GRN_TEXT_PUTC(ctx, &message, '|');
+    }
+    if (ctx->rc == GRN_SUCCESS) {
       ERR(GRN_SYNTAX_ERROR, "Syntax error: <%.*s>",
           (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message));
-      GRN_OBJ_FIN(ctx, &message);
+    } else {
+      ERR(ctx->rc, "Syntax error: <%.*s>: %s",
+          (int)GRN_TEXT_LEN(&message), GRN_TEXT_VALUE(&message),
+          ctx->errbuf);
     }
+    GRN_OBJ_FIN(ctx, &message);
   }
 }
 

  Modified: test/command/suite/select/filter/alias/nested.expected (+12 -2)
===================================================================
--- test/command/suite/select/filter/alias/nested.expected    2017-03-30 14:31:51 +0900 (1c95de9)
+++ test/command/suite/select/filter/alias/nested.expected    2017-03-30 14:22:27 +0900 (cb7baf1)
@@ -14,8 +14,18 @@ load --table Memos
 ]
 [[0,0.0,0.0],1]
 select Memos --filter 'caption == "Groonga"'
-[[[-63,0.0,0.0],"Syntax error: <caption| |== \"Groonga\">"]]
-#|e| Syntax error: <caption| |== "Groonga">
+[
+  [
+    [
+      -63,
+      0.0,
+      0.0
+    ],
+    "Syntax error: <caption| |== \"Groonga\">: [expr][parse] unknown identifier: <caption>"
+  ]
+]
+#|e| [expr][parse] unknown identifier: <caption>
+#|e| Syntax error: <caption| |== "Groonga">: Syntax error: <caption| |== "Groonga">: [expr][parse] unknown identifier: <caption>
 load --table Aliases
 [
 {"_key": "Memos.caption", "real_name": "Memos.subject"},

  Modified: test/command/suite/select/filter/alias/one_level.expected (+12 -2)
===================================================================
--- test/command/suite/select/filter/alias/one_level.expected    2017-03-30 14:31:51 +0900 (71ef69c)
+++ test/command/suite/select/filter/alias/one_level.expected    2017-03-30 14:22:27 +0900 (c42a759)
@@ -14,8 +14,18 @@ load --table Memos
 ]
 [[0,0.0,0.0],1]
 select Memos --filter 'caption == "Groonga"'
-[[[-63,0.0,0.0],"Syntax error: <caption| |== \"Groonga\">"]]
-#|e| Syntax error: <caption| |== "Groonga">
+[
+  [
+    [
+      -63,
+      0.0,
+      0.0
+    ],
+    "Syntax error: <caption| |== \"Groonga\">: [expr][parse] unknown identifier: <caption>"
+  ]
+]
+#|e| [expr][parse] unknown identifier: <caption>
+#|e| Syntax error: <caption| |== "Groonga">: Syntax error: <caption| |== "Groonga">: [expr][parse] unknown identifier: <caption>
 load --table Aliases
 [
 {"_key": "Memos.caption", "real_name": "Memos.title"}

  Modified: test/command/suite/select/match_columns/invalid/with_invalid_query_expander.expected (+12 -2)
===================================================================
--- test/command/suite/select/match_columns/invalid/with_invalid_query_expander.expected    2017-03-30 14:31:51 +0900 (569a663)
+++ test/command/suite/select/match_columns/invalid/with_invalid_query_expander.expected    2017-03-30 14:22:27 +0900 (b7c37ee)
@@ -13,5 +13,15 @@ load --table Memos
 ]
 [[0,0.0,0.0],1]
 select Memos   --match_columns Memos.nonexistent_column   --query Groonga   --query_expander nonexistent_query_expander
-[[[-63,0.0,0.0],"Syntax error: <Memos.nonexistent_column||>"]]
-#|e| Syntax error: <Memos.nonexistent_column||>
+[
+  [
+    [
+      -63,
+      0.0,
+      0.0
+    ],
+    "Syntax error: <Memos.nonexistent_column||>: [expr][parse] unknown identifier: <Memos.nonexistent_column>"
+  ]
+]
+#|e| [expr][parse] unknown identifier: <Memos.nonexistent_column>
+#|e| Syntax error: <Memos.nonexistent_column||>: Syntax error: <Memos.nonexistent_column||>: [expr][parse] unknown identifier: <Memos.nonexistent_column>
-------------- next part --------------
HTML����������������������������...
Download 



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