505
504
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
506
static const unsigned short yyrline[] =
505
static const unsigned short int yyrline[] =
508
507
0, 171, 171, 177, 179, 184, 196, 200, 215, 226,
509
508
229, 233, 243, 248, 256, 261, 263, 265, 276, 277,
510
282, 281, 305, 304, 328, 329, 334, 335, 353, 358,
511
359, 363, 365, 367, 369, 371, 373, 375, 417, 421,
512
426, 429, 432, 441, 461, 464, 463, 473, 485, 485,
513
516, 518, 532, 547, 553, 554, 559, 612, 613, 630,
514
635, 637, 642, 644, 649, 651, 653, 658, 659, 667,
515
668, 674, 679, 679, 691, 696, 703, 704, 707, 709,
516
714, 715, 721, 722, 727, 729, 731, 733, 735, 742,
517
743, 749, 750, 755, 757, 763, 765, 767, 769, 774,
518
793, 795, 797, 803, 805, 811, 813, 818, 820, 822,
519
827, 829, 833, 834, 839, 841, 849, 851, 853, 858,
520
860, 862, 864, 866, 868, 870, 872, 878, 883, 885,
521
890, 892, 894, 897, 899, 907, 915, 916, 918, 920,
522
922, 925, 933, 945, 946, 951, 953, 967, 972, 976,
523
980, 983, 985, 989, 993, 996
509
282, 281, 305, 304, 330, 331, 336, 337, 355, 360,
510
361, 365, 367, 369, 371, 373, 375, 377, 421, 425,
511
430, 433, 436, 445, 465, 468, 467, 477, 489, 489,
512
520, 522, 536, 551, 557, 558, 563, 616, 617, 634,
513
639, 641, 646, 648, 653, 655, 657, 662, 663, 671,
514
672, 678, 683, 683, 695, 700, 707, 708, 711, 713,
515
718, 719, 725, 726, 731, 733, 735, 737, 739, 746,
516
747, 753, 754, 759, 761, 767, 769, 771, 773, 778,
517
797, 799, 801, 807, 809, 815, 817, 822, 824, 826,
518
831, 833, 837, 838, 843, 845, 853, 855, 857, 862,
519
864, 866, 868, 870, 872, 874, 876, 882, 887, 889,
520
894, 896, 898, 901, 903, 911, 919, 920, 922, 924,
521
926, 929, 937, 949, 950, 955, 957, 971, 982, 986,
522
990, 993, 995, 999, 1003, 1006
529
528
First, the terminals, then, starting at YYNTOKENS, nonterminals. */
530
529
static const char *const yytname[] =
532
"$end", "error", "$undefined", "FUNC_CALL", "NAME", "REGEXP", "ERROR",
533
"YNUMBER", "YSTRING", "RELOP", "IO_OUT", "IO_IN", "ASSIGNOP", "ASSIGN",
534
"MATCHOP", "CONCAT_OP", "LEX_BEGIN", "LEX_END", "LEX_IF", "LEX_ELSE",
535
"LEX_RETURN", "LEX_DELETE", "LEX_SWITCH", "LEX_CASE", "LEX_DEFAULT",
536
"LEX_WHILE", "LEX_DO", "LEX_FOR", "LEX_BREAK", "LEX_CONTINUE",
537
"LEX_PRINT", "LEX_PRINTF", "LEX_NEXT", "LEX_EXIT", "LEX_FUNCTION",
538
"LEX_GETLINE", "LEX_NEXTFILE", "LEX_IN", "LEX_AND", "LEX_OR",
539
"INCREMENT", "DECREMENT", "LEX_BUILTIN", "LEX_LENGTH", "NEWLINE",
540
"SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'",
541
"'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'['",
542
"']'", "'{'", "'}'", "';'", "$accept", "start", "program", "rule",
543
"pattern", "action", "func_name", "lex_builtin", "function_prologue",
544
"@1", "regexp", "@2", "a_slash", "statements", "statement_term",
545
"statement", "@3", "simple_stmt", "@4", "opt_simple_stmt",
546
"switch_body", "case_statements", "case_statement", "case_value",
547
"print", "print_expression_list", "output_redir", "@5", "if_statement",
548
"nls", "opt_nls", "input_redir", "opt_param_list", "param_list",
549
"opt_exp", "opt_expression_list", "expression_list", "exp",
550
"assign_operator", "relop_or_less", "a_relop", "common_exp", "simp_exp",
551
"non_post_simp_exp", "opt_variable", "variable", "l_brace", "r_brace",
531
"$end", "error", "$undefined", "FUNC_CALL", "NAME", "REGEXP", "ERROR",
532
"YNUMBER", "YSTRING", "RELOP", "IO_OUT", "IO_IN", "ASSIGNOP", "ASSIGN",
533
"MATCHOP", "CONCAT_OP", "LEX_BEGIN", "LEX_END", "LEX_IF", "LEX_ELSE",
534
"LEX_RETURN", "LEX_DELETE", "LEX_SWITCH", "LEX_CASE", "LEX_DEFAULT",
535
"LEX_WHILE", "LEX_DO", "LEX_FOR", "LEX_BREAK", "LEX_CONTINUE",
536
"LEX_PRINT", "LEX_PRINTF", "LEX_NEXT", "LEX_EXIT", "LEX_FUNCTION",
537
"LEX_GETLINE", "LEX_NEXTFILE", "LEX_IN", "LEX_AND", "LEX_OR",
538
"INCREMENT", "DECREMENT", "LEX_BUILTIN", "LEX_LENGTH", "NEWLINE",
539
"SLASH_BEFORE_EQUAL", "'?'", "':'", "','", "'<'", "'>'", "'+'", "'-'",
540
"'*'", "'/'", "'%'", "'!'", "UNARY", "'^'", "'$'", "'('", "')'", "'['",
541
"']'", "'{'", "'}'", "';'", "$accept", "start", "program", "rule",
542
"pattern", "action", "func_name", "lex_builtin", "function_prologue",
543
"@1", "regexp", "@2", "a_slash", "statements", "statement_term",
544
"statement", "@3", "simple_stmt", "@4", "opt_simple_stmt", "switch_body",
545
"case_statements", "case_statement", "case_value", "print",
546
"print_expression_list", "output_redir", "@5", "if_statement", "nls",
547
"opt_nls", "input_redir", "opt_param_list", "param_list", "opt_exp",
548
"opt_expression_list", "expression_list", "exp", "assign_operator",
549
"relop_or_less", "a_relop", "common_exp", "simp_exp",
550
"non_post_simp_exp", "opt_variable", "variable", "l_brace", "r_brace",
552
551
"r_paren", "opt_semi", "semi", "colon", "comma", 0
1725
1755
#line 307 "awkgram.y"
1728
size_t len = strlen(yyvsp[0].sval);
1758
size_t len = strlen((yyvsp[0].sval));
1730
if (do_lint && (yyvsp[0].sval)[0] == '*') {
1731
/* possible C comment */
1732
if ((yyvsp[0].sval)[len-1] == '*')
1762
lintwarn(_("regexp constant `//' looks like a C++ comment, but is not"));
1763
else if (((yyvsp[0].sval))[0] == '*' && ((yyvsp[0].sval))[len-1] == '*')
1764
/* possible C comment */
1733
1765
lintwarn(_("regexp constant `/%s/' looks like a C comment, but is not"), tokstart);
1736
1768
n->type = Node_regex;
1737
n->re_exp = make_string(yyvsp[0].sval, len);
1738
n->re_reg = make_regexp(yyvsp[0].sval, len, FALSE, TRUE);
1769
n->re_exp = make_string((yyvsp[0].sval), len);
1770
n->re_reg = make_regexp((yyvsp[0].sval), len, FALSE, TRUE);
1739
1771
n->re_text = NULL;
1740
1772
n->re_flags = CONST;
1774
(yyval.nodeval) = n;
1747
#line 334 "awkgram.y"
1748
{ yyval.nodeval = NULL; }
1779
#line 336 "awkgram.y"
1780
{ (yyval.nodeval) = NULL; }
1752
#line 336 "awkgram.y"
1784
#line 338 "awkgram.y"
1754
if (yyvsp[0].nodeval == NULL)
1755
yyval.nodeval = yyvsp[-1].nodeval;
1786
if ((yyvsp[0].nodeval) == NULL)
1787
(yyval.nodeval) = (yyvsp[-1].nodeval);
1757
if (do_lint && isnoeffect(yyvsp[0].nodeval->type))
1789
if (do_lint && isnoeffect((yyvsp[0].nodeval)->type))
1758
1790
lintwarn(_("statement may have no effect"));
1759
if (yyvsp[-1].nodeval == NULL)
1760
yyval.nodeval = yyvsp[0].nodeval;
1791
if ((yyvsp[-1].nodeval) == NULL)
1792
(yyval.nodeval) = (yyvsp[0].nodeval);
1762
yyval.nodeval = append_right(
1763
(yyvsp[-1].nodeval->type == Node_statement_list ? yyvsp[-1].nodeval
1764
: node(yyvsp[-1].nodeval, Node_statement_list, (NODE *) NULL)),
1765
(yyvsp[0].nodeval->type == Node_statement_list ? yyvsp[0].nodeval
1766
: node(yyvsp[0].nodeval, Node_statement_list, (NODE *) NULL)));
1794
(yyval.nodeval) = append_right(
1795
((yyvsp[-1].nodeval)->type == Node_statement_list ? (yyvsp[-1].nodeval)
1796
: node((yyvsp[-1].nodeval), Node_statement_list, (NODE *) NULL)),
1797
((yyvsp[0].nodeval)->type == Node_statement_list ? (yyvsp[0].nodeval)
1798
: node((yyvsp[0].nodeval), Node_statement_list, (NODE *) NULL)));
1773
#line 354 "awkgram.y"
1774
{ yyval.nodeval = NULL; }
1805
#line 356 "awkgram.y"
1806
{ (yyval.nodeval) = NULL; }
1778
#line 364 "awkgram.y"
1779
{ yyval.nodeval = NULL; }
1810
#line 366 "awkgram.y"
1811
{ (yyval.nodeval) = NULL; }
1783
#line 366 "awkgram.y"
1784
{ yyval.nodeval = yyvsp[-1].nodeval; }
1815
#line 368 "awkgram.y"
1816
{ (yyval.nodeval) = (yyvsp[-1].nodeval); }
1788
#line 368 "awkgram.y"
1789
{ yyval.nodeval = yyvsp[0].nodeval; }
1820
#line 370 "awkgram.y"
1821
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
1793
#line 370 "awkgram.y"
1794
{ yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_switch, yyvsp[-2].nodeval); }
1825
#line 372 "awkgram.y"
1826
{ (yyval.nodeval) = node((yyvsp[-6].nodeval), Node_K_switch, (yyvsp[-2].nodeval)); }
1798
#line 372 "awkgram.y"
1799
{ yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_while, yyvsp[0].nodeval); }
1830
#line 374 "awkgram.y"
1831
{ (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_K_while, (yyvsp[0].nodeval)); }
1803
#line 374 "awkgram.y"
1804
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_K_do, yyvsp[-5].nodeval); }
1835
#line 376 "awkgram.y"
1836
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_K_do, (yyvsp[-5].nodeval)); }
1808
#line 376 "awkgram.y"
1840
#line 378 "awkgram.y"
1811
1843
* Efficiency hack. Recognize the special case of
2105
#line 631 "awkgram.y"
2106
{ yyval.nodeval = NULL; }
2139
#line 635 "awkgram.y"
2140
{ (yyval.nodeval) = NULL; }
2110
#line 636 "awkgram.y"
2111
{ yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_case, yyvsp[0].nodeval); }
2144
#line 640 "awkgram.y"
2145
{ (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_K_case, (yyvsp[0].nodeval)); }
2115
#line 638 "awkgram.y"
2116
{ yyval.nodeval = node((NODE *) NULL, Node_K_default, yyvsp[0].nodeval); }
2149
#line 642 "awkgram.y"
2150
{ (yyval.nodeval) = node((NODE *) NULL, Node_K_default, (yyvsp[0].nodeval)); }
2120
#line 643 "awkgram.y"
2121
{ yyval.nodeval = yyvsp[0].nodeval; }
2154
#line 647 "awkgram.y"
2155
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2125
#line 645 "awkgram.y"
2159
#line 649 "awkgram.y"
2127
yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval));
2128
yyval.nodeval = yyvsp[0].nodeval;
2161
(yyvsp[0].nodeval)->numbr = -(force_number((yyvsp[0].nodeval)));
2162
(yyval.nodeval) = (yyvsp[0].nodeval);
2133
#line 650 "awkgram.y"
2134
{ yyval.nodeval = yyvsp[0].nodeval; }
2167
#line 654 "awkgram.y"
2168
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2138
#line 652 "awkgram.y"
2139
{ yyval.nodeval = yyvsp[0].nodeval; }
2172
#line 656 "awkgram.y"
2173
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2143
#line 654 "awkgram.y"
2144
{ yyval.nodeval = yyvsp[0].nodeval; }
2177
#line 658 "awkgram.y"
2178
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2148
#line 669 "awkgram.y"
2149
{ yyval.nodeval = node(yyvsp[-3].nodeval, Node_expression_list, yyvsp[-1].nodeval); }
2182
#line 673 "awkgram.y"
2183
{ (yyval.nodeval) = node((yyvsp[-3].nodeval), Node_expression_list, (yyvsp[-1].nodeval)); }
2153
#line 674 "awkgram.y"
2187
#line 678 "awkgram.y"
2155
2189
in_print = FALSE;
2157
yyval.nodeval = NULL;
2191
(yyval.nodeval) = NULL;
2162
#line 679 "awkgram.y"
2196
#line 683 "awkgram.y"
2163
2197
{ in_print = FALSE; in_parens = 0; }
2167
#line 680 "awkgram.y"
2201
#line 684 "awkgram.y"
2169
yyval.nodeval = node(yyvsp[0].nodeval, yyvsp[-2].nodetypeval, (NODE *) NULL);
2170
if (yyvsp[-2].nodetypeval == Node_redirect_twoway
2171
&& yyvsp[0].nodeval->type == Node_K_getline
2172
&& yyvsp[0].nodeval->rnode != NULL
2173
&& yyvsp[0].nodeval->rnode->type == Node_redirect_twoway)
2203
(yyval.nodeval) = node((yyvsp[0].nodeval), (yyvsp[-2].nodetypeval), (NODE *) NULL);
2204
if ((yyvsp[-2].nodetypeval) == Node_redirect_twoway
2205
&& (yyvsp[0].nodeval)->type == Node_K_getline
2206
&& (yyvsp[0].nodeval)->rnode != NULL
2207
&& (yyvsp[0].nodeval)->rnode->type == Node_redirect_twoway)
2174
2208
yyerror(_("multistage two-way pipelines don't work"));
2179
#line 692 "awkgram.y"
2213
#line 696 "awkgram.y"
2181
yyval.nodeval = node(yyvsp[-3].nodeval, Node_K_if,
2182
node(yyvsp[0].nodeval, Node_if_branches, (NODE *) NULL));
2215
(yyval.nodeval) = node((yyvsp[-3].nodeval), Node_K_if,
2216
node((yyvsp[0].nodeval), Node_if_branches, (NODE *) NULL));
2187
#line 698 "awkgram.y"
2188
{ yyval.nodeval = node(yyvsp[-6].nodeval, Node_K_if,
2189
node(yyvsp[-3].nodeval, Node_if_branches, yyvsp[0].nodeval)); }
2221
#line 702 "awkgram.y"
2222
{ (yyval.nodeval) = node((yyvsp[-6].nodeval), Node_K_if,
2223
node((yyvsp[-3].nodeval), Node_if_branches, (yyvsp[0].nodeval))); }
2193
#line 714 "awkgram.y"
2194
{ yyval.nodeval = NULL; }
2227
#line 718 "awkgram.y"
2228
{ (yyval.nodeval) = NULL; }
2198
#line 716 "awkgram.y"
2199
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_redirect_input, (NODE *) NULL); }
2232
#line 720 "awkgram.y"
2233
{ (yyval.nodeval) = node((yyvsp[0].nodeval), Node_redirect_input, (NODE *) NULL); }
2203
#line 721 "awkgram.y"
2204
{ yyval.nodeval = NULL; }
2237
#line 725 "awkgram.y"
2238
{ (yyval.nodeval) = NULL; }
2208
#line 723 "awkgram.y"
2209
{ yyval.nodeval = yyvsp[0].nodeval; }
2242
#line 727 "awkgram.y"
2243
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2213
#line 728 "awkgram.y"
2214
{ yyval.nodeval = make_param(yyvsp[0].sval); }
2247
#line 732 "awkgram.y"
2248
{ (yyval.nodeval) = make_param((yyvsp[0].sval)); }
2218
#line 730 "awkgram.y"
2219
{ yyval.nodeval = append_right(yyvsp[-2].nodeval, make_param(yyvsp[0].sval)); yyerrok; }
2252
#line 734 "awkgram.y"
2253
{ (yyval.nodeval) = append_right((yyvsp[-2].nodeval), make_param((yyvsp[0].sval))); yyerrok; }
2223
#line 732 "awkgram.y"
2224
{ yyval.nodeval = NULL; }
2257
#line 736 "awkgram.y"
2258
{ (yyval.nodeval) = NULL; }
2228
#line 734 "awkgram.y"
2229
{ yyval.nodeval = NULL; }
2262
#line 738 "awkgram.y"
2263
{ (yyval.nodeval) = NULL; }
2233
#line 736 "awkgram.y"
2234
{ yyval.nodeval = NULL; }
2267
#line 740 "awkgram.y"
2268
{ (yyval.nodeval) = NULL; }
2238
#line 742 "awkgram.y"
2239
{ yyval.nodeval = NULL; }
2272
#line 746 "awkgram.y"
2273
{ (yyval.nodeval) = NULL; }
2243
#line 744 "awkgram.y"
2244
{ yyval.nodeval = yyvsp[0].nodeval; }
2277
#line 748 "awkgram.y"
2278
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2248
#line 749 "awkgram.y"
2249
{ yyval.nodeval = NULL; }
2282
#line 753 "awkgram.y"
2283
{ (yyval.nodeval) = NULL; }
2253
#line 751 "awkgram.y"
2254
{ yyval.nodeval = yyvsp[0].nodeval; }
2287
#line 755 "awkgram.y"
2288
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2258
#line 756 "awkgram.y"
2259
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL); }
2292
#line 760 "awkgram.y"
2293
{ (yyval.nodeval) = node((yyvsp[0].nodeval), Node_expression_list, (NODE *) NULL); }
2263
#line 758 "awkgram.y"
2297
#line 762 "awkgram.y"
2265
yyval.nodeval = append_right(yyvsp[-2].nodeval,
2266
node(yyvsp[0].nodeval, Node_expression_list, (NODE *) NULL));
2299
(yyval.nodeval) = append_right((yyvsp[-2].nodeval),
2300
node((yyvsp[0].nodeval), Node_expression_list, (NODE *) NULL));
2272
#line 764 "awkgram.y"
2273
{ yyval.nodeval = NULL; }
2306
#line 768 "awkgram.y"
2307
{ (yyval.nodeval) = NULL; }
2277
#line 766 "awkgram.y"
2278
{ yyval.nodeval = NULL; }
2311
#line 770 "awkgram.y"
2312
{ (yyval.nodeval) = NULL; }
2282
#line 768 "awkgram.y"
2283
{ yyval.nodeval = NULL; }
2316
#line 772 "awkgram.y"
2317
{ (yyval.nodeval) = NULL; }
2287
#line 770 "awkgram.y"
2288
{ yyval.nodeval = NULL; }
2321
#line 774 "awkgram.y"
2322
{ (yyval.nodeval) = NULL; }
2292
#line 775 "awkgram.y"
2326
#line 779 "awkgram.y"
2294
if (do_lint && yyvsp[0].nodeval->type == Node_regex)
2328
if (do_lint && (yyvsp[0].nodeval)->type == Node_regex)
2295
2329
lintwarn(_("regular expression on right of assignment"));
2297
2331
* Optimization of `x = x y'. Can save lots of time
2298
2332
* if done a lot.
2300
if (( yyvsp[-2].nodeval->type == Node_var
2301
|| yyvsp[-2].nodeval->type == Node_var_new
2302
|| yyvsp[-2].nodeval->type == Node_param_list)
2303
&& yyvsp[-1].nodetypeval == Node_assign
2304
&& yyvsp[0].nodeval->type == Node_concat
2305
&& yyvsp[0].nodeval->lnode == yyvsp[-2].nodeval) {
2306
yyvsp[0].nodeval->type = Node_assign_concat; /* Just change the type */
2307
yyval.nodeval = yyvsp[0].nodeval; /* And use it directly */
2334
if (( (yyvsp[-2].nodeval)->type == Node_var
2335
|| (yyvsp[-2].nodeval)->type == Node_var_new
2336
|| (yyvsp[-2].nodeval)->type == Node_param_list)
2337
&& (yyvsp[-1].nodetypeval) == Node_assign
2338
&& (yyvsp[0].nodeval)->type == Node_concat
2339
&& (yyvsp[0].nodeval)->lnode == (yyvsp[-2].nodeval)) {
2340
(yyvsp[0].nodeval)->type = Node_assign_concat; /* Just change the type */
2341
(yyval.nodeval) = (yyvsp[0].nodeval); /* And use it directly */
2309
yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, yyvsp[0].nodeval);
2343
(yyval.nodeval) = node((yyvsp[-2].nodeval), (yyvsp[-1].nodetypeval), (yyvsp[0].nodeval));
2314
#line 794 "awkgram.y"
2315
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_and, yyvsp[0].nodeval); }
2348
#line 798 "awkgram.y"
2349
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_and, (yyvsp[0].nodeval)); }
2319
#line 796 "awkgram.y"
2320
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_or, yyvsp[0].nodeval); }
2353
#line 800 "awkgram.y"
2354
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_or, (yyvsp[0].nodeval)); }
2324
#line 798 "awkgram.y"
2358
#line 802 "awkgram.y"
2326
if (yyvsp[-2].nodeval->type == Node_regex)
2360
if ((yyvsp[-2].nodeval)->type == Node_regex)
2327
2361
warning(_("regular expression on left of `~' or `!~' operator"));
2328
yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, mk_rexp(yyvsp[0].nodeval));
2362
(yyval.nodeval) = node((yyvsp[-2].nodeval), (yyvsp[-1].nodetypeval), mk_rexp((yyvsp[0].nodeval)));
2333
#line 804 "awkgram.y"
2334
{ yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-2].nodeval); }
2367
#line 808 "awkgram.y"
2368
{ (yyval.nodeval) = node(variable((yyvsp[0].sval), CAN_FREE, Node_var_array), Node_in_array, (yyvsp[-2].nodeval)); }
2338
#line 806 "awkgram.y"
2372
#line 810 "awkgram.y"
2340
if (do_lint && yyvsp[0].nodeval->type == Node_regex)
2374
if (do_lint && (yyvsp[0].nodeval)->type == Node_regex)
2341
2375
lintwarn(_("regular expression on right of comparison"));
2342
yyval.nodeval = node(yyvsp[-2].nodeval, yyvsp[-1].nodetypeval, yyvsp[0].nodeval);
2376
(yyval.nodeval) = node((yyvsp[-2].nodeval), (yyvsp[-1].nodetypeval), (yyvsp[0].nodeval));
2347
#line 812 "awkgram.y"
2348
{ yyval.nodeval = node(yyvsp[-4].nodeval, Node_cond_exp, node(yyvsp[-2].nodeval, Node_if_branches, yyvsp[0].nodeval));}
2381
#line 816 "awkgram.y"
2382
{ (yyval.nodeval) = node((yyvsp[-4].nodeval), Node_cond_exp, node((yyvsp[-2].nodeval), Node_if_branches, (yyvsp[0].nodeval)));}
2352
#line 814 "awkgram.y"
2353
{ yyval.nodeval = yyvsp[0].nodeval; }
2386
#line 818 "awkgram.y"
2387
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2357
#line 819 "awkgram.y"
2358
{ yyval.nodetypeval = yyvsp[0].nodetypeval; }
2391
#line 823 "awkgram.y"
2392
{ (yyval.nodetypeval) = (yyvsp[0].nodetypeval); }
2362
#line 821 "awkgram.y"
2363
{ yyval.nodetypeval = yyvsp[0].nodetypeval; }
2396
#line 825 "awkgram.y"
2397
{ (yyval.nodetypeval) = (yyvsp[0].nodetypeval); }
2367
#line 823 "awkgram.y"
2368
{ yyval.nodetypeval = Node_assign_quotient; }
2401
#line 827 "awkgram.y"
2402
{ (yyval.nodetypeval) = Node_assign_quotient; }
2372
#line 828 "awkgram.y"
2373
{ yyval.nodetypeval = yyvsp[0].nodetypeval; }
2406
#line 832 "awkgram.y"
2407
{ (yyval.nodetypeval) = (yyvsp[0].nodetypeval); }
2377
#line 830 "awkgram.y"
2378
{ yyval.nodetypeval = Node_less; }
2411
#line 834 "awkgram.y"
2412
{ (yyval.nodetypeval) = Node_less; }
2382
#line 835 "awkgram.y"
2383
{ yyval.nodetypeval = Node_greater; }
2416
#line 839 "awkgram.y"
2417
{ (yyval.nodetypeval) = Node_greater; }
2387
#line 840 "awkgram.y"
2388
{ yyval.nodeval = yyvsp[0].nodeval; }
2421
#line 844 "awkgram.y"
2422
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2392
#line 842 "awkgram.y"
2426
#line 846 "awkgram.y"
2394
yyval.nodeval = node(node(make_number(0.0),
2428
(yyval.nodeval) = node(node(make_number(0.0),
2395
2429
Node_field_spec,
2396
2430
(NODE *) NULL),
2432
(yyvsp[0].nodeval));
2403
#line 850 "awkgram.y"
2404
{ yyval.nodeval = node(variable(yyvsp[0].sval, CAN_FREE, Node_var_array), Node_in_array, yyvsp[-3].nodeval); }
2437
#line 854 "awkgram.y"
2438
{ (yyval.nodeval) = node(variable((yyvsp[0].sval), CAN_FREE, Node_var_array), Node_in_array, (yyvsp[-3].nodeval)); }
2408
#line 852 "awkgram.y"
2409
{ yyval.nodeval = yyvsp[0].nodeval; }
2442
#line 856 "awkgram.y"
2443
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2413
#line 854 "awkgram.y"
2414
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_concat, yyvsp[0].nodeval); }
2447
#line 858 "awkgram.y"
2448
{ (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_concat, (yyvsp[0].nodeval)); }
2418
#line 861 "awkgram.y"
2419
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_exp, yyvsp[0].nodeval); }
2452
#line 865 "awkgram.y"
2453
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_exp, (yyvsp[0].nodeval)); }
2423
#line 863 "awkgram.y"
2424
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_times, yyvsp[0].nodeval); }
2457
#line 867 "awkgram.y"
2458
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_times, (yyvsp[0].nodeval)); }
2428
#line 865 "awkgram.y"
2429
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_quotient, yyvsp[0].nodeval); }
2462
#line 869 "awkgram.y"
2463
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_quotient, (yyvsp[0].nodeval)); }
2433
#line 867 "awkgram.y"
2434
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_mod, yyvsp[0].nodeval); }
2467
#line 871 "awkgram.y"
2468
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_mod, (yyvsp[0].nodeval)); }
2438
#line 869 "awkgram.y"
2439
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_plus, yyvsp[0].nodeval); }
2472
#line 873 "awkgram.y"
2473
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_plus, (yyvsp[0].nodeval)); }
2443
#line 871 "awkgram.y"
2444
{ yyval.nodeval = node(yyvsp[-2].nodeval, Node_minus, yyvsp[0].nodeval); }
2477
#line 875 "awkgram.y"
2478
{ (yyval.nodeval) = node((yyvsp[-2].nodeval), Node_minus, (yyvsp[0].nodeval)); }
2448
#line 873 "awkgram.y"
2482
#line 877 "awkgram.y"
2450
if (do_lint && parsing_end_rule && yyvsp[0].nodeval == NULL)
2484
if (do_lint && parsing_end_rule && (yyvsp[0].nodeval) == NULL)
2451
2485
lintwarn(_("non-redirected `getline' undefined inside END action"));
2452
yyval.nodeval = node(yyvsp[-1].nodeval, Node_K_getline, yyvsp[0].nodeval);
2486
(yyval.nodeval) = node((yyvsp[-1].nodeval), Node_K_getline, (yyvsp[0].nodeval));
2457
#line 879 "awkgram.y"
2491
#line 883 "awkgram.y"
2459
yyval.nodeval = node(yyvsp[0].nodeval, Node_K_getline,
2460
node(yyvsp[-3].nodeval, yyvsp[-2].nodetypeval, (NODE *) NULL));
2493
(yyval.nodeval) = node((yyvsp[0].nodeval), Node_K_getline,
2494
node((yyvsp[-3].nodeval), (yyvsp[-2].nodetypeval), (NODE *) NULL));
2465
#line 884 "awkgram.y"
2466
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_postincrement, (NODE *) NULL); }
2499
#line 888 "awkgram.y"
2500
{ (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_postincrement, (NODE *) NULL); }
2470
#line 886 "awkgram.y"
2471
{ yyval.nodeval = node(yyvsp[-1].nodeval, Node_postdecrement, (NODE *) NULL); }
2504
#line 890 "awkgram.y"
2505
{ (yyval.nodeval) = node((yyvsp[-1].nodeval), Node_postdecrement, (NODE *) NULL); }
2475
#line 891 "awkgram.y"
2476
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_not, (NODE *) NULL); }
2509
#line 895 "awkgram.y"
2510
{ (yyval.nodeval) = node((yyvsp[0].nodeval), Node_not, (NODE *) NULL); }
2480
#line 893 "awkgram.y"
2481
{ yyval.nodeval = yyvsp[-1].nodeval; }
2514
#line 897 "awkgram.y"
2515
{ (yyval.nodeval) = (yyvsp[-1].nodeval); }
2485
#line 896 "awkgram.y"
2486
{ yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); }
2519
#line 900 "awkgram.y"
2520
{ (yyval.nodeval) = snode((yyvsp[-1].nodeval), Node_builtin, (int) (yyvsp[-3].lval)); }
2490
#line 898 "awkgram.y"
2491
{ yyval.nodeval = snode(yyvsp[-1].nodeval, Node_builtin, (int) yyvsp[-3].lval); }
2524
#line 902 "awkgram.y"
2525
{ (yyval.nodeval) = snode((yyvsp[-1].nodeval), Node_builtin, (int) (yyvsp[-3].lval)); }
2495
#line 900 "awkgram.y"
2529
#line 904 "awkgram.y"
2498
2532
lintwarn(_("call of `length' without parentheses is not portable"));
2499
yyval.nodeval = snode((NODE *) NULL, Node_builtin, (int) yyvsp[0].lval);
2533
(yyval.nodeval) = snode((NODE *) NULL, Node_builtin, (int) (yyvsp[0].lval));
2501
2535
warning(_("call of `length' without parentheses is deprecated by POSIX"));
2506
#line 908 "awkgram.y"
2540
#line 912 "awkgram.y"
2508
yyval.nodeval = node(yyvsp[-1].nodeval, Node_func_call, make_string(yyvsp[-3].sval, strlen(yyvsp[-3].sval)));
2509
yyval.nodeval->funcbody = NULL;
2510
func_use(yyvsp[-3].sval, FUNC_USE);
2511
param_sanity(yyvsp[-1].nodeval);
2512
free(yyvsp[-3].sval);
2542
(yyval.nodeval) = node((yyvsp[-1].nodeval), Node_func_call, make_string((yyvsp[-3].sval), strlen((yyvsp[-3].sval))));
2543
(yyval.nodeval)->funcbody = NULL;
2544
func_use((yyvsp[-3].sval), FUNC_USE);
2545
param_sanity((yyvsp[-1].nodeval));
2546
free((yyvsp[-3].sval));
2517
#line 917 "awkgram.y"
2518
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_preincrement, (NODE *) NULL); }
2551
#line 921 "awkgram.y"
2552
{ (yyval.nodeval) = node((yyvsp[0].nodeval), Node_preincrement, (NODE *) NULL); }
2522
#line 919 "awkgram.y"
2523
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_predecrement, (NODE *) NULL); }
2556
#line 923 "awkgram.y"
2557
{ (yyval.nodeval) = node((yyvsp[0].nodeval), Node_predecrement, (NODE *) NULL); }
2527
#line 921 "awkgram.y"
2528
{ yyval.nodeval = yyvsp[0].nodeval; }
2561
#line 925 "awkgram.y"
2562
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2532
#line 923 "awkgram.y"
2533
{ yyval.nodeval = yyvsp[0].nodeval; }
2566
#line 927 "awkgram.y"
2567
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2537
#line 926 "awkgram.y"
2571
#line 930 "awkgram.y"
2539
if (yyvsp[0].nodeval->type == Node_val && (yyvsp[0].nodeval->flags & (STRCUR|STRING)) == 0) {
2540
yyvsp[0].nodeval->numbr = -(force_number(yyvsp[0].nodeval));
2541
yyval.nodeval = yyvsp[0].nodeval;
2573
if ((yyvsp[0].nodeval)->type == Node_val && ((yyvsp[0].nodeval)->flags & (STRCUR|STRING)) == 0) {
2574
(yyvsp[0].nodeval)->numbr = -(force_number((yyvsp[0].nodeval)));
2575
(yyval.nodeval) = (yyvsp[0].nodeval);
2543
yyval.nodeval = node(yyvsp[0].nodeval, Node_unary_minus, (NODE *) NULL);
2577
(yyval.nodeval) = node((yyvsp[0].nodeval), Node_unary_minus, (NODE *) NULL);
2548
#line 934 "awkgram.y"
2582
#line 938 "awkgram.y"
2552
2586
* POSIX semantics: force a conversion to numeric type
2554
yyval.nodeval = node (make_number(0.0), Node_plus, yyvsp[0].nodeval);
2588
(yyval.nodeval) = node (make_number(0.0), Node_plus, (yyvsp[0].nodeval));
2559
#line 945 "awkgram.y"
2560
{ yyval.nodeval = NULL; }
2593
#line 949 "awkgram.y"
2594
{ (yyval.nodeval) = NULL; }
2564
#line 947 "awkgram.y"
2565
{ yyval.nodeval = yyvsp[0].nodeval; }
2598
#line 951 "awkgram.y"
2599
{ (yyval.nodeval) = (yyvsp[0].nodeval); }
2569
#line 952 "awkgram.y"
2570
{ yyval.nodeval = variable(yyvsp[0].sval, CAN_FREE, Node_var_new); }
2603
#line 956 "awkgram.y"
2604
{ (yyval.nodeval) = variable((yyvsp[0].sval), CAN_FREE, Node_var_new); }
2574
#line 954 "awkgram.y"
2608
#line 958 "awkgram.y"
2578
if ((n = lookup(yyvsp[-3].sval)) != NULL && ! isarray(n))
2612
if ((n = lookup((yyvsp[-3].sval))) != NULL && ! isarray(n))
2579
2613
yyerror(_("use of non-array as array"));
2580
else if (yyvsp[-1].nodeval == NULL) {
2614
else if ((yyvsp[-1].nodeval) == NULL) {
2581
2615
fatal(_("invalid subscript expression"));
2582
} else if (yyvsp[-1].nodeval->rnode == NULL) {
2583
yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_subscript, yyvsp[-1].nodeval->lnode);
2584
freenode(yyvsp[-1].nodeval);
2616
} else if ((yyvsp[-1].nodeval)->rnode == NULL) {
2617
(yyval.nodeval) = node(variable((yyvsp[-3].sval), CAN_FREE, Node_var_array), Node_subscript, (yyvsp[-1].nodeval)->lnode);
2618
freenode((yyvsp[-1].nodeval));
2586
yyval.nodeval = node(variable(yyvsp[-3].sval, CAN_FREE, Node_var_array), Node_subscript, yyvsp[-1].nodeval);
2620
(yyval.nodeval) = node(variable((yyvsp[-3].sval), CAN_FREE, Node_var_array), Node_subscript, (yyvsp[-1].nodeval));
2591
#line 968 "awkgram.y"
2592
{ yyval.nodeval = node(yyvsp[0].nodeval, Node_field_spec, (NODE *) NULL); }
2625
#line 972 "awkgram.y"
2626
{ (yyval.nodeval) = node((yyvsp[0].nodeval), Node_field_spec, (NODE *) NULL); }
2596
#line 976 "awkgram.y"
2630
#line 986 "awkgram.y"
2601
#line 980 "awkgram.y"
2635
#line 990 "awkgram.y"
2606
#line 989 "awkgram.y"
2640
#line 999 "awkgram.y"
2611
#line 993 "awkgram.y"
2645
#line 1003 "awkgram.y"
2616
#line 996 "awkgram.y"
2650
#line 1006 "awkgram.y"
2623
/* Line 991 of yacc.c. */
2624
#line 2622 "y.tab.c"
2657
/* Line 1037 of yacc.c. */
2658
#line 2661 "y.tab.c"
2626
2660
yyvsp -= yylen;
2627
2661
yyssp -= yylen;