summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2015-08-12 00:59:30 -0700
committerDavid Tolnay <dtolnay@gmail.com>2015-08-13 21:42:35 -0700
commit58a053d7ded8aaebdb914b222105d428d4a900f3 (patch)
tree34f22334cd5a7b83c60996c52729fd201d013b52
parent7b5c6a9224413eb8d74728e66e25b0be62709cc9 (diff)
Fix memory leak in non-constant module declaration
-rw-r--r--parser.c643
-rw-r--r--parser.y1
-rw-r--r--tests/jq.test4
3 files changed, 327 insertions, 321 deletions
diff --git a/parser.c b/parser.c
index 1cc4adb4..cfd28802 100644
--- a/parser.c
+++ b/parser.c
@@ -726,22 +726,22 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 286, 286, 289, 294, 297, 307, 310, 315, 318,
- 323, 327, 331, 335, 339, 343, 346, 351, 355, 359,
- 364, 371, 375, 379, 383, 387, 391, 395, 399, 403,
- 407, 411, 415, 419, 423, 427, 431, 435, 441, 447,
- 451, 455, 459, 463, 467, 471, 475, 479, 484, 487,
- 504, 513, 520, 528, 539, 544, 550, 553, 558, 563,
- 570, 570, 574, 574, 581, 584, 587, 593, 596, 601,
- 604, 607, 613, 616, 619, 627, 631, 634, 637, 640,
- 643, 646, 649, 652, 655, 659, 665, 668, 671, 674,
- 677, 680, 683, 686, 689, 692, 695, 698, 701, 704,
- 707, 710, 713, 720, 724, 728, 740, 745, 746, 747,
- 748, 751, 754, 759, 764, 768, 771, 776, 779, 784,
- 787, 792, 795, 798, 801, 804, 809, 812, 815, 818,
- 821, 824, 827, 830, 833, 836, 839, 842, 845, 848,
- 851, 854, 857, 860, 863, 868, 871, 872, 873, 876,
- 879, 882, 885, 889, 893, 897, 900
+ 0, 286, 286, 289, 294, 297, 308, 311, 316, 319,
+ 324, 328, 332, 336, 340, 344, 347, 352, 356, 360,
+ 365, 372, 376, 380, 384, 388, 392, 396, 400, 404,
+ 408, 412, 416, 420, 424, 428, 432, 436, 442, 448,
+ 452, 456, 460, 464, 468, 472, 476, 480, 485, 488,
+ 505, 514, 521, 529, 540, 545, 551, 554, 559, 564,
+ 571, 571, 575, 575, 582, 585, 588, 594, 597, 602,
+ 605, 608, 614, 617, 620, 628, 632, 635, 638, 641,
+ 644, 647, 650, 653, 656, 660, 666, 669, 672, 675,
+ 678, 681, 684, 687, 690, 693, 696, 699, 702, 705,
+ 708, 711, 714, 721, 725, 729, 741, 746, 747, 748,
+ 749, 752, 755, 760, 765, 769, 772, 777, 780, 785,
+ 788, 793, 796, 799, 802, 805, 810, 813, 816, 819,
+ 822, 825, 828, 831, 834, 837, 840, 843, 846, 849,
+ 852, 855, 858, 861, 864, 869, 872, 873, 874, 877,
+ 880, 883, 886, 890, 894, 898, 901
};
#endif
@@ -2351,370 +2351,371 @@ yyreduce:
if (!block_is_const((yyvsp[-1].blk))) {
FAIL((yyloc), "Module metadata must be constant");
(yyval.blk) = gen_noop();
+ block_free((yyvsp[-1].blk));
} else {
(yyval.blk) = gen_module((yyvsp[-1].blk));
}
}
-#line 2359 "parser.c" /* yacc.c:1646 */
+#line 2360 "parser.c" /* yacc.c:1646 */
break;
case 6:
-#line 307 "parser.y" /* yacc.c:1646 */
+#line 308 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_noop();
}
-#line 2367 "parser.c" /* yacc.c:1646 */
+#line 2368 "parser.c" /* yacc.c:1646 */
break;
case 7:
-#line 310 "parser.y" /* yacc.c:1646 */
+#line 311 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = BLOCK((yyvsp[-1].blk), (yyvsp[0].blk));
}
-#line 2375 "parser.c" /* yacc.c:1646 */
+#line 2376 "parser.c" /* yacc.c:1646 */
break;
case 8:
-#line 315 "parser.y" /* yacc.c:1646 */
+#line 316 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_noop();
}
-#line 2383 "parser.c" /* yacc.c:1646 */
+#line 2384 "parser.c" /* yacc.c:1646 */
break;
case 9:
-#line 318 "parser.y" /* yacc.c:1646 */
+#line 319 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = block_bind((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
}
-#line 2391 "parser.c" /* yacc.c:1646 */
+#line 2392 "parser.c" /* yacc.c:1646 */
break;
case 10:
-#line 323 "parser.y" /* yacc.c:1646 */
+#line 324 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = block_bind_referenced((yyvsp[-1].blk), (yyvsp[0].blk), OP_IS_CALL_PSEUDO);
}
-#line 2399 "parser.c" /* yacc.c:1646 */
+#line 2400 "parser.c" /* yacc.c:1646 */
break;
case 11:
-#line 327 "parser.y" /* yacc.c:1646 */
+#line 328 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_destructure((yyvsp[-4].blk), (yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2407 "parser.c" /* yacc.c:1646 */
+#line 2408 "parser.c" /* yacc.c:1646 */
break;
case 12:
-#line 331 "parser.y" /* yacc.c:1646 */
+#line 332 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_reduce((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
}
-#line 2415 "parser.c" /* yacc.c:1646 */
+#line 2416 "parser.c" /* yacc.c:1646 */
break;
case 13:
-#line 335 "parser.y" /* yacc.c:1646 */
+#line 336 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_foreach((yyvsp[-9].blk), (yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk));
}
-#line 2423 "parser.c" /* yacc.c:1646 */
+#line 2424 "parser.c" /* yacc.c:1646 */
break;
case 14:
-#line 339 "parser.y" /* yacc.c:1646 */
+#line 340 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_foreach((yyvsp[-7].blk), (yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), gen_noop());
}
-#line 2431 "parser.c" /* yacc.c:1646 */
+#line 2432 "parser.c" /* yacc.c:1646 */
break;
case 15:
-#line 343 "parser.y" /* yacc.c:1646 */
+#line 344 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
}
-#line 2439 "parser.c" /* yacc.c:1646 */
+#line 2440 "parser.c" /* yacc.c:1646 */
break;
case 16:
-#line 346 "parser.y" /* yacc.c:1646 */
+#line 347 "parser.y" /* yacc.c:1646 */
{
FAIL((yyloc), "Possibly unterminated 'if' statement");
(yyval.blk) = (yyvsp[-2].blk);
}
-#line 2448 "parser.c" /* yacc.c:1646 */
+#line 2449 "parser.c" /* yacc.c:1646 */
break;
case 17:
-#line 351 "parser.y" /* yacc.c:1646 */
+#line 352 "parser.y" /* yacc.c:1646 */
{
//$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, $4);
(yyval.blk) = gen_try((yyvsp[-2].blk), gen_try_handler((yyvsp[0].blk)));
}
-#line 2457 "parser.c" /* yacc.c:1646 */
+#line 2458 "parser.c" /* yacc.c:1646 */
break;
case 18:
-#line 355 "parser.y" /* yacc.c:1646 */
+#line 356 "parser.y" /* yacc.c:1646 */
{
//$$ = BLOCK(gen_op_target(FORK_OPT, $2), $2, gen_op_simple(BACKTRACK));
(yyval.blk) = gen_try((yyvsp[0].blk), gen_op_simple(BACKTRACK));
}
-#line 2466 "parser.c" /* yacc.c:1646 */
+#line 2467 "parser.c" /* yacc.c:1646 */
break;
case 19:
-#line 359 "parser.y" /* yacc.c:1646 */
+#line 360 "parser.y" /* yacc.c:1646 */
{
FAIL((yyloc), "Possibly unterminated 'try' statement");
(yyval.blk) = (yyvsp[-2].blk);
}
-#line 2475 "parser.c" /* yacc.c:1646 */
+#line 2476 "parser.c" /* yacc.c:1646 */
break;
case 20:
-#line 364 "parser.y" /* yacc.c:1646 */
+#line 365 "parser.y" /* yacc.c:1646 */
{
jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[-2].literal)));
(yyval.blk) = gen_location((yyloc), locations, gen_label(jv_string_value(v), (yyvsp[0].blk)));
jv_free((yyvsp[-2].literal));
jv_free(v);
}
-#line 2486 "parser.c" /* yacc.c:1646 */
+#line 2487 "parser.c" /* yacc.c:1646 */
break;
case 21:
-#line 371 "parser.y" /* yacc.c:1646 */
+#line 372 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_try((yyvsp[-1].blk), gen_op_simple(BACKTRACK));
}
-#line 2494 "parser.c" /* yacc.c:1646 */
+#line 2495 "parser.c" /* yacc.c:1646 */
break;
case 22:
-#line 375 "parser.y" /* yacc.c:1646 */
+#line 376 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_call("_assign", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
}
-#line 2502 "parser.c" /* yacc.c:1646 */
+#line 2503 "parser.c" /* yacc.c:1646 */
break;
case 23:
-#line 379 "parser.y" /* yacc.c:1646 */
+#line 380 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_or((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2510 "parser.c" /* yacc.c:1646 */
+#line 2511 "parser.c" /* yacc.c:1646 */
break;
case 24:
-#line 383 "parser.y" /* yacc.c:1646 */
+#line 384 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_and((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2518 "parser.c" /* yacc.c:1646 */
+#line 2519 "parser.c" /* yacc.c:1646 */
break;
case 25:
-#line 387 "parser.y" /* yacc.c:1646 */
+#line 388 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_definedor((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2526 "parser.c" /* yacc.c:1646 */
+#line 2527 "parser.c" /* yacc.c:1646 */
break;
case 26:
-#line 391 "parser.y" /* yacc.c:1646 */
+#line 392 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_definedor_assign((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2534 "parser.c" /* yacc.c:1646 */
+#line 2535 "parser.c" /* yacc.c:1646 */
break;
case 27:
-#line 395 "parser.y" /* yacc.c:1646 */
+#line 396 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_call("_modify", BLOCK(gen_lambda((yyvsp[-2].blk)), gen_lambda((yyvsp[0].blk))));
}
-#line 2542 "parser.c" /* yacc.c:1646 */
+#line 2543 "parser.c" /* yacc.c:1646 */
break;
case 28:
-#line 399 "parser.y" /* yacc.c:1646 */
+#line 400 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2550 "parser.c" /* yacc.c:1646 */
+#line 2551 "parser.c" /* yacc.c:1646 */
break;
case 29:
-#line 403 "parser.y" /* yacc.c:1646 */
+#line 404 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_both((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2558 "parser.c" /* yacc.c:1646 */
+#line 2559 "parser.c" /* yacc.c:1646 */
break;
case 30:
-#line 407 "parser.y" /* yacc.c:1646 */
+#line 408 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '+');
}
-#line 2566 "parser.c" /* yacc.c:1646 */
+#line 2567 "parser.c" /* yacc.c:1646 */
break;
case 31:
-#line 411 "parser.y" /* yacc.c:1646 */
+#line 412 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '+');
}
-#line 2574 "parser.c" /* yacc.c:1646 */
+#line 2575 "parser.c" /* yacc.c:1646 */
break;
case 32:
-#line 415 "parser.y" /* yacc.c:1646 */
+#line 416 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
}
-#line 2582 "parser.c" /* yacc.c:1646 */
+#line 2583 "parser.c" /* yacc.c:1646 */
break;
case 33:
-#line 419 "parser.y" /* yacc.c:1646 */
+#line 420 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '-');
}
-#line 2590 "parser.c" /* yacc.c:1646 */
+#line 2591 "parser.c" /* yacc.c:1646 */
break;
case 34:
-#line 423 "parser.y" /* yacc.c:1646 */
+#line 424 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '-');
}
-#line 2598 "parser.c" /* yacc.c:1646 */
+#line 2599 "parser.c" /* yacc.c:1646 */
break;
case 35:
-#line 427 "parser.y" /* yacc.c:1646 */
+#line 428 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '*');
}
-#line 2606 "parser.c" /* yacc.c:1646 */
+#line 2607 "parser.c" /* yacc.c:1646 */
break;
case 36:
-#line 431 "parser.y" /* yacc.c:1646 */
+#line 432 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '*');
}
-#line 2614 "parser.c" /* yacc.c:1646 */
+#line 2615 "parser.c" /* yacc.c:1646 */
break;
case 37:
-#line 435 "parser.y" /* yacc.c:1646 */
+#line 436 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '/');
if (block_is_const_inf((yyval.blk)))
FAIL((yyloc), "Division by zero?");
}
-#line 2624 "parser.c" /* yacc.c:1646 */
+#line 2625 "parser.c" /* yacc.c:1646 */
break;
case 38:
-#line 441 "parser.y" /* yacc.c:1646 */
+#line 442 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '%');
if (block_is_const_inf((yyval.blk)))
FAIL((yyloc), "Remainder by zero?");
}
-#line 2634 "parser.c" /* yacc.c:1646 */
+#line 2635 "parser.c" /* yacc.c:1646 */
break;
case 39:
-#line 447 "parser.y" /* yacc.c:1646 */
+#line 448 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '/');
}
-#line 2642 "parser.c" /* yacc.c:1646 */
+#line 2643 "parser.c" /* yacc.c:1646 */
break;
case 40:
-#line 451 "parser.y" /* yacc.c:1646 */
+#line 452 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_update((yyvsp[-2].blk), (yyvsp[0].blk), '%');
}
-#line 2650 "parser.c" /* yacc.c:1646 */
+#line 2651 "parser.c" /* yacc.c:1646 */
break;
case 41:
-#line 455 "parser.y" /* yacc.c:1646 */
+#line 456 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), EQ);
}
-#line 2658 "parser.c" /* yacc.c:1646 */
+#line 2659 "parser.c" /* yacc.c:1646 */
break;
case 42:
-#line 459 "parser.y" /* yacc.c:1646 */
+#line 460 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), NEQ);
}
-#line 2666 "parser.c" /* yacc.c:1646 */
+#line 2667 "parser.c" /* yacc.c:1646 */
break;
case 43:
-#line 463 "parser.y" /* yacc.c:1646 */
+#line 464 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '<');
}
-#line 2674 "parser.c" /* yacc.c:1646 */
+#line 2675 "parser.c" /* yacc.c:1646 */
break;
case 44:
-#line 467 "parser.y" /* yacc.c:1646 */
+#line 468 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), '>');
}
-#line 2682 "parser.c" /* yacc.c:1646 */
+#line 2683 "parser.c" /* yacc.c:1646 */
break;
case 45:
-#line 471 "parser.y" /* yacc.c:1646 */
+#line 472 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), LESSEQ);
}
-#line 2690 "parser.c" /* yacc.c:1646 */
+#line 2691 "parser.c" /* yacc.c:1646 */
break;
case 46:
-#line 475 "parser.y" /* yacc.c:1646 */
+#line 476 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-2].blk), (yyvsp[0].blk), GREATEREQ);
}
-#line 2698 "parser.c" /* yacc.c:1646 */
+#line 2699 "parser.c" /* yacc.c:1646 */
break;
case 47:
-#line 479 "parser.y" /* yacc.c:1646 */
+#line 480 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[0].blk);
}
-#line 2706 "parser.c" /* yacc.c:1646 */
+#line 2707 "parser.c" /* yacc.c:1646 */
break;
case 48:
-#line 484 "parser.y" /* yacc.c:1646 */
+#line 485 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[-1].blk);
}
-#line 2714 "parser.c" /* yacc.c:1646 */
+#line 2715 "parser.c" /* yacc.c:1646 */
break;
case 49:
-#line 487 "parser.y" /* yacc.c:1646 */
+#line 488 "parser.y" /* yacc.c:1646 */
{
if (!block_is_const((yyvsp[-1].blk))) {
FAIL((yyloc), "Module metadata must be constant");
@@ -2730,11 +2731,11 @@ yyreduce:
(yyval.blk) = gen_import_meta((yyvsp[-2].blk), (yyvsp[-1].blk));
}
}
-#line 2734 "parser.c" /* yacc.c:1646 */
+#line 2735 "parser.c" /* yacc.c:1646 */
break;
case 50:
-#line 504 "parser.y" /* yacc.c:1646 */
+#line 505 "parser.y" /* yacc.c:1646 */
{
jv v = block_const((yyvsp[-3].blk));
// XXX Make gen_import take only blocks and the int is_data so we
@@ -2744,11 +2745,11 @@ yyreduce:
jv_free((yyvsp[0].literal));
jv_free(v);
}
-#line 2748 "parser.c" /* yacc.c:1646 */
+#line 2749 "parser.c" /* yacc.c:1646 */
break;
case 51:
-#line 513 "parser.y" /* yacc.c:1646 */
+#line 514 "parser.y" /* yacc.c:1646 */
{
jv v = block_const((yyvsp[-2].blk));
(yyval.blk) = gen_import(jv_string_value(v), jv_string_value((yyvsp[0].literal)), 0);
@@ -2756,22 +2757,22 @@ yyreduce:
jv_free((yyvsp[0].literal));
jv_free(v);
}
-#line 2760 "parser.c" /* yacc.c:1646 */
+#line 2761 "parser.c" /* yacc.c:1646 */
break;
case 52:
-#line 520 "parser.y" /* yacc.c:1646 */
+#line 521 "parser.y" /* yacc.c:1646 */
{
jv v = block_const((yyvsp[0].blk));
(yyval.blk) = gen_import(jv_string_value(v), NULL, 0);
block_free((yyvsp[0].blk));
jv_free(v);
}
-#line 2771 "parser.c" /* yacc.c:1646 */
+#line 2772 "parser.c" /* yacc.c:1646 */
break;
case 53:
-#line 528 "parser.y" /* yacc.c:1646 */
+#line 529 "parser.y" /* yacc.c:1646 */
{
if (!block_is_const((yyvsp[0].blk))) {
FAIL((yyloc), "Import path must be constant");
@@ -2781,173 +2782,173 @@ yyreduce:
(yyval.blk) = (yyvsp[0].blk);
}
}
-#line 2785 "parser.c" /* yacc.c:1646 */
+#line 2786 "parser.c" /* yacc.c:1646 */
break;
case 54:
-#line 539 "parser.y" /* yacc.c:1646 */
+#line 540 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_function(jv_string_value((yyvsp[-3].literal)), gen_noop(), (yyvsp[-1].blk));
jv_free((yyvsp[-3].literal));
}
-#line 2794 "parser.c" /* yacc.c:1646 */
+#line 2795 "parser.c" /* yacc.c:1646 */
break;
case 55:
-#line 544 "parser.y" /* yacc.c:1646 */
+#line 545 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_function(jv_string_value((yyvsp[-6].literal)), (yyvsp[-4].blk), (yyvsp[-1].blk));
jv_free((yyvsp[-6].literal));
}
-#line 2803 "parser.c" /* yacc.c:1646 */
+#line 2804 "parser.c" /* yacc.c:1646 */
break;
case 56:
-#line 550 "parser.y" /* yacc.c:1646 */
+#line 551 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[0].blk);
}
-#line 2811 "parser.c" /* yacc.c:1646 */
+#line 2812 "parser.c" /* yacc.c:1646 */
break;
case 57:
-#line 553 "parser.y" /* yacc.c:1646 */
+#line 554 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = BLOCK((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2819 "parser.c" /* yacc.c:1646 */
+#line 2820 "parser.c" /* yacc.c:1646 */
break;
case 58:
-#line 558 "parser.y" /* yacc.c:1646 */
+#line 559 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_param_regular(jv_string_value((yyvsp[0].literal)));
jv_free((yyvsp[0].literal));
}
-#line 2828 "parser.c" /* yacc.c:1646 */
+#line 2829 "parser.c" /* yacc.c:1646 */
break;
case 59:
-#line 563 "parser.y" /* yacc.c:1646 */
+#line 564 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_param(jv_string_value((yyvsp[0].literal)));
jv_free((yyvsp[0].literal));
}
-#line 2837 "parser.c" /* yacc.c:1646 */
+#line 2838 "parser.c" /* yacc.c:1646 */
break;
case 60:
-#line 570 "parser.y" /* yacc.c:1646 */
+#line 571 "parser.y" /* yacc.c:1646 */
{ (yyval.literal) = jv_string("text"); }
-#line 2843 "parser.c" /* yacc.c:1646 */
+#line 2844 "parser.c" /* yacc.c:1646 */
break;
case 61:
-#line 570 "parser.y" /* yacc.c:1646 */
+#line 571 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[-1].blk);
jv_free((yyvsp[-2].literal));
}
-#line 2852 "parser.c" /* yacc.c:1646 */
+#line 2853 "parser.c" /* yacc.c:1646 */
break;
case 62:
-#line 574 "parser.y" /* yacc.c:1646 */
+#line 575 "parser.y" /* yacc.c:1646 */
{ (yyval.literal) = (yyvsp[-1].literal); }
-#line 2858 "parser.c" /* yacc.c:1646 */
+#line 2859 "parser.c" /* yacc.c:1646 */
break;
case 63:
-#line 574 "parser.y" /* yacc.c:1646 */
+#line 575 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[-1].blk);
jv_free((yyvsp[-2].literal));
}
-#line 2867 "parser.c" /* yacc.c:1646 */
+#line 2868 "parser.c" /* yacc.c:1646 */
break;
case 64:
-#line 581 "parser.y" /* yacc.c:1646 */
+#line 582 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_const(jv_string(""));
}
-#line 2875 "parser.c" /* yacc.c:1646 */
+#line 2876 "parser.c" /* yacc.c:1646 */
break;
case 65:
-#line 584 "parser.y" /* yacc.c:1646 */
+#line 585 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-1].blk), gen_const((yyvsp[0].literal)), '+');
}
-#line 2883 "parser.c" /* yacc.c:1646 */
+#line 2884 "parser.c" /* yacc.c:1646 */
break;
case 66:
-#line 587 "parser.y" /* yacc.c:1646 */
+#line 588 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_binop((yyvsp[-3].blk), gen_format((yyvsp[-1].blk), jv_copy((yyvsp[-4].literal))), '+');
}
-#line 2891 "parser.c" /* yacc.c:1646 */
+#line 2892 "parser.c" /* yacc.c:1646 */
break;
case 67:
-#line 593 "parser.y" /* yacc.c:1646 */
+#line 594 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_cond((yyvsp[-3].blk), (yyvsp[-1].blk), (yyvsp[0].blk));
}
-#line 2899 "parser.c" /* yacc.c:1646 */
+#line 2900 "parser.c" /* yacc.c:1646 */
break;
case 68:
-#line 596 "parser.y" /* yacc.c:1646 */
+#line 597 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[-1].blk);
}
-#line 2907 "parser.c" /* yacc.c:1646 */
+#line 2908 "parser.c" /* yacc.c:1646 */
break;
case 69:
-#line 601 "parser.y" /* yacc.c:1646 */
+#line 602 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = block_join((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 2915 "parser.c" /* yacc.c:1646 */
+#line 2916 "parser.c" /* yacc.c:1646 */
break;
case 70:
-#line 604 "parser.y" /* yacc.c:1646 */
+#line 605 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = BLOCK((yyvsp[0].blk), gen_call("_negate", gen_noop()));
}
-#line 2923 "parser.c" /* yacc.c:1646 */
+#line 2924 "parser.c" /* yacc.c:1646 */
break;
case 71:
-#line 607 "parser.y" /* yacc.c:1646 */
+#line 608 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[0].blk);
}
-#line 2931 "parser.c" /* yacc.c:1646 */
+#line 2932 "parser.c" /* yacc.c:1646 */
break;
case 72:
-#line 613 "parser.y" /* yacc.c:1646 */
+#line 614 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_noop();
}
-#line 2939 "parser.c" /* yacc.c:1646 */
+#line 2940 "parser.c" /* yacc.c:1646 */
break;
case 73:
-#line 616 "parser.y" /* yacc.c:1646 */
+#line 617 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_call("recurse", gen_noop());
}
-#line 2947 "parser.c" /* yacc.c:1646 */
+#line 2948 "parser.c" /* yacc.c:1646 */
break;
case 74:
-#line 619 "parser.y" /* yacc.c:1646 */
+#line 620 "parser.y" /* yacc.c:1646 */
{
jv v = jv_string_fmt("*label-%s", jv_string_value((yyvsp[0].literal))); // impossible symbol
(yyval.blk) = gen_location((yyloc), locations,
@@ -2956,231 +2957,231 @@ yyreduce:
jv_free(v);
jv_free((yyvsp[0].literal));
}
-#line 2960 "parser.c" /* yacc.c:1646 */
+#line 2961 "parser.c" /* yacc.c:1646 */
break;
case 75:
-#line 627 "parser.y" /* yacc.c:1646 */
+#line 628 "parser.y" /* yacc.c:1646 */
{
FAIL((yyloc), "break requires a label to break to");
(yyval.blk) = gen_noop();
}
-#line 2969 "parser.c" /* yacc.c:1646 */
+#line 2970 "parser.c" /* yacc.c:1646 */
break;
case 76:
-#line 631 "parser.y" /* yacc.c:1646 */
+#line 632 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index_opt((yyvsp[-2].blk), gen_const((yyvsp[-1].literal)));
}
-#line 2977 "parser.c" /* yacc.c:1646 */
+#line 2978 "parser.c" /* yacc.c:1646 */
break;
case 77:
-#line 634 "parser.y" /* yacc.c:1646 */
+#line 635 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index_opt(gen_noop(), gen_const((yyvsp[-1].literal)));
}
-#line 2985 "parser.c" /* yacc.c:1646 */
+#line 2986 "parser.c" /* yacc.c:1646 */
break;
case 78:
-#line 637 "parser.y" /* yacc.c:1646 */
+#line 638 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index_opt((yyvsp[-3].blk), (yyvsp[-1].blk));
}
-#line 2993 "parser.c" /* yacc.c:1646 */
+#line 2994 "parser.c" /* yacc.c:1646 */
break;
case 79:
-#line 640 "parser.y" /* yacc.c:1646 */
+#line 641 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index_opt(gen_noop(), (yyvsp[-1].blk));
}
-#line 3001 "parser.c" /* yacc.c:1646 */
+#line 3002 "parser.c" /* yacc.c:1646 */
break;
case 80:
-#line 643 "parser.y" /* yacc.c:1646 */
+#line 644 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index((yyvsp[-1].blk), gen_const((yyvsp[0].literal)));
}
-#line 3009 "parser.c" /* yacc.c:1646 */
+#line 3010 "parser.c" /* yacc.c:1646 */
break;
case 81:
-#line 646 "parser.y" /* yacc.c:1646 */
+#line 647 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index(gen_noop(), gen_const((yyvsp[0].literal)));
}
-#line 3017 "parser.c" /* yacc.c:1646 */
+#line 3018 "parser.c" /* yacc.c:1646 */
break;
case 82:
-#line 649 "parser.y" /* yacc.c:1646 */
+#line 650 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index((yyvsp[-2].blk), (yyvsp[0].blk));
}
-#line 3025 "parser.c" /* yacc.c:1646 */
+#line 3026 "parser.c" /* yacc.c:1646 */
break;
case 83:
-#line 652 "parser.y" /* yacc.c:1646 */
+#line 653 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index(gen_noop(), (yyvsp[0].blk));
}
-#line 3033 "parser.c" /* yacc.c:1646 */
+#line 3034 "parser.c" /* yacc.c:1646 */
break;
case 84:
-#line 655 "parser.y" /* yacc.c:1646 */
+#line 656 "parser.y" /* yacc.c:1646 */
{
FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
(yyval.blk) = gen_noop();
}
-#line 3042 "parser.c" /* yacc.c:1646 */
+#line 3043 "parser.c" /* yacc.c:1646 */
break;
case 85:
-#line 659 "parser.y" /* yacc.c:1646 */
+#line 660 "parser.y" /* yacc.c:1646 */
{
jv_free((yyvsp[-1].literal));
FAIL((yyloc), "try .[\"field\"] instead of .field for unusually named fields");
(yyval.blk) = gen_noop();
}
-#line 3052 "parser.c" /* yacc.c:1646 */
+#line 3053 "parser.c" /* yacc.c:1646 */
break;
case 86:
-#line 665 "parser.y" /* yacc.c:1646 */
+#line 666 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index_opt((yyvsp[-4].blk), (yyvsp[-2].blk));
}
-#line 3060 "parser.c" /* yacc.c:1646 */
+#line 3061 "parser.c" /* yacc.c:1646 */
break;
case 87:
-#line 668 "parser.y" /* yacc.c:1646 */
+#line 669 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_index((yyvsp[-3].blk), (yyvsp[-1].blk));
}
-#line 3068 "parser.c" /* yacc.c:1646 */
+#line 3069 "parser.c" /* yacc.c:1646 */
break;
case 88:
-#line 671 "parser.y" /* yacc.c:1646 */
+#line 672 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = block_join((yyvsp[-3].blk), gen_op_simple(EACH_OPT));
}
-#line 3076 "parser.c" /* yacc.c:1646 */
+#line 3077 "parser.c" /* yacc.c:1646 */
break;
case 89:
-#line 674 "parser.y" /* yacc.c:1646 */
+#line 675 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = block_join((yyvsp[-2].blk), gen_op_simple(EACH));
}
-#line 3084 "parser.c" /* yacc.c:1646 */
+#line 3085 "parser.c" /* yacc.c:1646 */
break;
case 90:
-#line 677 "parser.y" /* yacc.c:1646 */
+#line 678 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_slice_index((yyvsp[-6].blk), (yyvsp[-4].blk), (yyvsp[-2].blk), INDEX_OPT);
}
-#line 3092 "parser.c" /* yacc.c:1646 */
+#line 3093 "parser.c" /* yacc.c:1646 */
break;
case 91:
-#line 680 "parser.y" /* yacc.c:1646 */
+#line 681 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), gen_const(jv_null()), INDEX_OPT);
}
-#line 3100 "parser.c" /* yacc.c:1646 */
+#line 3101 "parser.c" /* yacc.c:1646 */
break;
case 92:
-#line 683 "parser.y" /* yacc.c:1646 */
+#line 684 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_slice_index((yyvsp[-5].blk), gen_const(jv_null()), (yyvsp[-2].blk), INDEX_OPT);
}
-#line 3108 "parser.c" /* yacc.c:1646 */
+#line 3109 "parser.c" /* yacc.c:1646 */
break;
case 93:
-#line 686 "parser.y" /* yacc.c:1646 */
+#line 687 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_slice_index((yyvsp[-5].blk), (yyvsp[-3].blk), (yyvsp[-1].blk), INDEX);
}
-#line 3116 "parser.c" /* yacc.c:1646 */
+#line 3117 "parser.c" /* yacc.c:1646 */
break;
case 94:
-#line 689 "parser.y" /* yacc.c:1646 */
+#line 690 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_slice_index((yyvsp[-4].blk), (yyvsp[-2].blk), gen_const(jv_null()), INDEX);
}
-#line 3124 "parser.c" /* yacc.c:1646 */
+#line 3125 "parser.c" /* yacc.c:1646 */
break;
case 95:
-#line 692 "parser.y" /* yacc.c:1646 */
+#line 693 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_slice_index((yyvsp[-4].blk), gen_const(jv_null()), (yyvsp[-1].blk), INDEX);
}
-#line 3132 "parser.c" /* yacc.c:1646 */
+#line 3133 "parser.c" /* yacc.c:1646 */
break;
case 96:
-#line 695 "parser.y" /* yacc.c:1646 */
+#line 696 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_const((yyvsp[0].literal));
}
-#line 3140 "parser.c" /* yacc.c:1646 */
+#line 3141 "parser.c" /* yacc.c:1646 */
break;
case 97:
-#line 698 "parser.y" /* yacc.c:1646 */
+#line 699 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[0].blk);
}
-#line 3148 "parser.c" /* yacc.c:1646 */
+#line 3149 "parser.c" /* yacc.c:1646 */
break;
case 98:
-#line 701 "parser.y" /* yacc.c:1646 */
+#line 702 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_format(gen_noop(), (yyvsp[0].literal));
}
-#line 3156 "parser.c" /* yacc.c:1646 */
+#line 3157 "parser.c" /* yacc.c:1646 */
break;
case 99:
-#line 704 "parser.y" /* yacc.c:1646 */
+#line 705 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = (yyvsp[-1].blk);
}
-#line 3164 "parser.c" /* yacc.c:1646 */
+#line 3165 "parser.c" /* yacc.c:1646 */
break;
case 100:
-#line 707 "parser.y" /* yacc.c:1646 */
+#line 708 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_collect((yyvsp[-1].blk));
}
-#line 3172 "parser.c" /* yacc.c:1646 */
+#line 3173 "parser.c" /* yacc.c:1646 */
break;
case 101:
-#line 710 "parser.y" /* yacc.c:1646 */
+#line 711 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_const(jv_array());
}
-#line 3180 "parser.c" /* yacc.c:1646 */
+#line 3181 "parser.c" /* yacc.c:1646 */
break;
case 102:
-#line 713 "parser.y" /* yacc.c:1646 */
+#line 714 "parser.y" /* yacc.c:1646 */
{
block o = gen_const_object((yyvsp[-1].blk));
if (o.first != NULL)
@@ -3188,29 +3189,29 @@ yyreduce:
else
(yyval.blk) = BLOCK(gen_subexp(gen_const(jv_object())), (yyvsp[-1].blk), gen_op_simple(POP));
}
-#line 3192 "parser.c" /* yacc.c:1646 */
+#line 3193 "parser.c" /* yacc.c:1646 */
break;
case 103:
-#line 720 "parser.y" /* yacc.c:1646 */
+#line 721 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_const(JV_OBJECT(jv_string("file"), jv_copy(locations->fname),
jv_string("line"), jv_number(locfile_get_line(locations, (yyloc).start) + 1)));
}
-#line 3201 "parser.c" /* yacc.c:1646 */
+#line 3202 "parser.c" /* yacc.c:1646 */
break;
case 104:
-#line 724 "parser.y" /* yacc.c:1646 */
+#line 725 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_location((yyloc), locations, gen_op_unbound(LOADV, jv_string_value((yyvsp[0].literal))));
jv_free((yyvsp[0].literal));
}
-#line 3210 "parser.c" /* yacc.c:1646 */
+#line 3211 "parser.c" /* yacc.c:1646 */
break;
case 105:
-#line 728 "parser.y" /* yacc.c:1646 */
+#line 729 "parser.y" /* yacc.c:1646 */
{
const char *s = jv_string_value((yyvsp[0].literal));
if (strcmp(s, "false") == 0)
@@ -3223,409 +3224,409 @@ yyreduce:
(yyval.blk) = gen_location((yyloc), locations, gen_call(s, gen_noop()));
jv_free((yyvsp[0].literal));
}
-#line 3227 "parser.c" /* yacc.c:1646 */
+#line 3228 "parser.c" /* yacc.c:1646 */
break;
case 106:
-#line 740 "parser.y" /* yacc.c:1646 */
+#line 741 "parser.y" /* yacc.c:1646 */
{
(yyval.blk) = gen_call(jv_string_value((yyvsp[-3].literal)), (yyvsp[-1].blk));
(yyval.blk) = gen_location((yylsp[-3]), locations, (yyval.blk));
jv_free((yyvsp[-3].literal));
}
-#line 3237 "parser.c" /* yacc.c:1646 */
+#line 3238 "parser.c" /* yacc.c:1646 */
break;
case 107:
-#line 745 "parser.y" /* yacc.c:1646 */
+#line 746 "parser.y" /* yacc.c:1646 */
{ (yyval.blk) = gen_noop(); }
-#line 3243 "parser.c" /* yacc.c:1646 */
+#line 3244 "parser.c" /* yacc.c:1646 */
break;
case 108:
-#line 746 "parser.y" /* yacc.c:1646 */
+#line 747 "parser.y" /* yacc.c:1646 */
{ (yyval.blk) = gen_noop(); }
-#line 3249 "parser.c" /* yacc.c:1646 */
+#line 3250 "parser.c" /* yacc.c:1646 */