gawk-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-63-g9ee8aeb


From: Andrew J. Schorr
Subject: [gawk-diffs] [SCM] gawk branch, select, updated. gawk-4.1.0-63-g9ee8aeb
Date: Wed, 03 Jul 2013 00:46:46 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gawk".

The branch, select has been updated
       via  9ee8aeb59ad3b3873d52f3c9a2ab80b28c4c2c20 (commit)
      from  f0391b8a4db649853ecc47a10b09d7c4b04330cf (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.sv.gnu.org/cgit/gawk.git/commit/?id=9ee8aeb59ad3b3873d52f3c9a2ab80b28c4c2c20

commit 9ee8aeb59ad3b3873d52f3c9a2ab80b28c4c2c20
Author: Andrew J. Schorr <address@hidden>
Date:   Tue Jul 2 20:45:46 2013 -0400

    After the gawkapi get_file function opens a file, call the BEGINFILE block.

diff --git a/ChangeLog b/ChangeLog
index 23afe3b..c209f33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2013-07-02         Andrew J. Schorr     <address@hidden>
 
+       * awkgram.y (main_beginfile): Declare new global INSTRUCTION *.
+       (parse_program): Set main_beginfile to point to the BEGINFILE
+       instruction block.
+       * gawkapi.c (api_get_file): After nextfile starts a new file,
+       we need to run the BEGINFILE actions.  We retrieve the
+       instruction pointer from main_beginfile and execute it until
+       we reach the Op_after_beginfile opcode.  We then run after_beginfile
+       manually and restore the value of currule and source.
+
+2013-07-02         Andrew J. Schorr     <address@hidden>
+
        * gawkapi.h (awk_element_t): Add comment indicating that the array
        element index will always be a string!
        * gawkapi.c (api_flatten_array): When converting the index to an awk
diff --git a/awkgram.c b/awkgram.c
index 947f4a3..c6d7aad 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -186,6 +186,7 @@ static INSTRUCTION *ip_atexit = NULL;
 static INSTRUCTION *ip_end;
 static INSTRUCTION *ip_endfile;
 static INSTRUCTION *ip_beginfile;
+INSTRUCTION *main_beginfile;
 
 static inline INSTRUCTION *list_create(INSTRUCTION *x);
 static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
@@ -199,7 +200,7 @@ extern double fmod(double x, double y);
 #define is_identchar(c)                (isalnum(c) || (c) == '_')
 
 /* Line 371 of yacc.c  */
-#line 203 "awkgram.c"
+#line 204 "awkgram.c"
 
 # ifndef YY_NULL
 #  if defined __cplusplus && 201103L <= __cplusplus
@@ -368,7 +369,7 @@ int yyparse ();
 /* Copy the second part of user declarations.  */
 
 /* Line 390 of yacc.c  */
-#line 372 "awkgram.c"
+#line 373 "awkgram.c"
 
 #ifdef short
 # undef short
@@ -744,25 +745,25 @@ static const yytype_int16 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   200,   200,   202,   207,   208,   214,   226,   230,   241,
-     247,   252,   260,   268,   270,   275,   283,   285,   291,   292,
-     294,   320,   331,   342,   348,   357,   367,   369,   371,   377,
-     382,   383,   387,   406,   405,   439,   441,   446,   447,   460,
-     465,   466,   470,   472,   474,   481,   571,   613,   655,   768,
-     775,   782,   792,   801,   810,   819,   830,   846,   845,   869,
-     881,   881,   979,   979,  1012,  1042,  1048,  1049,  1055,  1056,
-    1063,  1068,  1080,  1094,  1096,  1104,  1109,  1111,  1119,  1121,
-    1130,  1131,  1139,  1144,  1144,  1155,  1159,  1167,  1168,  1171,
-    1173,  1178,  1179,  1188,  1189,  1194,  1199,  1205,  1207,  1209,
-    1216,  1217,  1223,  1224,  1229,  1231,  1236,  1238,  1246,  1251,
-    1260,  1267,  1269,  1271,  1287,  1297,  1304,  1306,  1311,  1313,
-    1315,  1323,  1325,  1330,  1332,  1337,  1339,  1341,  1391,  1393,
-    1395,  1397,  1399,  1401,  1403,  1405,  1428,  1433,  1438,  1463,
-    1469,  1471,  1473,  1475,  1477,  1479,  1484,  1488,  1520,  1522,
-    1528,  1534,  1547,  1548,  1549,  1554,  1559,  1563,  1567,  1582,
-    1595,  1600,  1636,  1654,  1655,  1661,  1662,  1667,  1669,  1676,
-    1693,  1710,  1712,  1719,  1724,  1732,  1742,  1754,  1763,  1767,
-    1771,  1775,  1779,  1783,  1786,  1788,  1792,  1796,  1800
+       0,   201,   201,   203,   208,   209,   215,   227,   231,   242,
+     248,   253,   261,   269,   271,   276,   284,   286,   292,   293,
+     295,   321,   332,   343,   349,   358,   368,   370,   372,   378,
+     383,   384,   388,   407,   406,   440,   442,   447,   448,   461,
+     466,   467,   471,   473,   475,   482,   572,   614,   656,   769,
+     776,   783,   793,   802,   811,   820,   831,   847,   846,   870,
+     882,   882,   980,   980,  1013,  1043,  1049,  1050,  1056,  1057,
+    1064,  1069,  1081,  1095,  1097,  1105,  1110,  1112,  1120,  1122,
+    1131,  1132,  1140,  1145,  1145,  1156,  1160,  1168,  1169,  1172,
+    1174,  1179,  1180,  1189,  1190,  1195,  1200,  1206,  1208,  1210,
+    1217,  1218,  1224,  1225,  1230,  1232,  1237,  1239,  1247,  1252,
+    1261,  1268,  1270,  1272,  1288,  1298,  1305,  1307,  1312,  1314,
+    1316,  1324,  1326,  1331,  1333,  1338,  1340,  1342,  1392,  1394,
+    1396,  1398,  1400,  1402,  1404,  1406,  1429,  1434,  1439,  1464,
+    1470,  1472,  1474,  1476,  1478,  1480,  1485,  1489,  1521,  1523,
+    1529,  1535,  1548,  1549,  1550,  1555,  1560,  1564,  1568,  1583,
+    1596,  1601,  1637,  1655,  1656,  1662,  1663,  1668,  1670,  1677,
+    1694,  1711,  1713,  1720,  1725,  1733,  1743,  1755,  1764,  1768,
+    1772,  1776,  1780,  1784,  1787,  1789,  1793,  1797,  1801
 };
 #endif
 
@@ -2049,7 +2050,7 @@ yyreduce:
     {
         case 3:
 /* Line 1787 of yacc.c  */
-#line 203 "awkgram.y"
+#line 204 "awkgram.y"
     {
                rule = 0;
                yyerrok;
@@ -2058,7 +2059,7 @@ yyreduce:
 
   case 5:
 /* Line 1787 of yacc.c  */
-#line 209 "awkgram.y"
+#line 210 "awkgram.y"
     {
                next_sourcefile();
                if (sourcefile == srcfiles)
@@ -2068,7 +2069,7 @@ yyreduce:
 
   case 6:
 /* Line 1787 of yacc.c  */
-#line 215 "awkgram.y"
+#line 216 "awkgram.y"
     {
                rule = 0;
                /*
@@ -2081,7 +2082,7 @@ yyreduce:
 
   case 7:
 /* Line 1787 of yacc.c  */
-#line 227 "awkgram.y"
+#line 228 "awkgram.y"
     {
                (void) append_rule((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
          }
@@ -2089,7 +2090,7 @@ yyreduce:
 
   case 8:
 /* Line 1787 of yacc.c  */
-#line 231 "awkgram.y"
+#line 232 "awkgram.y"
     {
                if (rule != Rule) {
                        msg(_("%s blocks must have an action part"), 
ruletab[rule]);
@@ -2104,7 +2105,7 @@ yyreduce:
 
   case 9:
 /* Line 1787 of yacc.c  */
-#line 242 "awkgram.y"
+#line 243 "awkgram.y"
     {
                in_function = NULL;
                (void) mk_function((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
@@ -2114,7 +2115,7 @@ yyreduce:
 
   case 10:
 /* Line 1787 of yacc.c  */
-#line 248 "awkgram.y"
+#line 249 "awkgram.y"
     {
                want_source = false;
                yyerrok;
@@ -2123,7 +2124,7 @@ yyreduce:
 
   case 11:
 /* Line 1787 of yacc.c  */
-#line 253 "awkgram.y"
+#line 254 "awkgram.y"
     {
                want_source = false;
                yyerrok;
@@ -2132,7 +2133,7 @@ yyreduce:
 
   case 12:
 /* Line 1787 of yacc.c  */
-#line 261 "awkgram.y"
+#line 262 "awkgram.y"
     {
                if (include_source((yyvsp[(1) - (1)])) < 0)
                        YYABORT;
@@ -2144,19 +2145,19 @@ yyreduce:
 
   case 13:
 /* Line 1787 of yacc.c  */
-#line 269 "awkgram.y"
+#line 270 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 14:
 /* Line 1787 of yacc.c  */
-#line 271 "awkgram.y"
+#line 272 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 15:
 /* Line 1787 of yacc.c  */
-#line 276 "awkgram.y"
+#line 277 "awkgram.y"
     {
                if (load_library((yyvsp[(1) - (1)])) < 0)
                        YYABORT;
@@ -2168,31 +2169,31 @@ yyreduce:
 
   case 16:
 /* Line 1787 of yacc.c  */
-#line 284 "awkgram.y"
+#line 285 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 17:
 /* Line 1787 of yacc.c  */
-#line 286 "awkgram.y"
+#line 287 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 18:
 /* Line 1787 of yacc.c  */
-#line 291 "awkgram.y"
+#line 292 "awkgram.y"
     {  (yyval) = NULL; rule = Rule; }
     break;
 
   case 19:
 /* Line 1787 of yacc.c  */
-#line 293 "awkgram.y"
+#line 294 "awkgram.y"
     {  (yyval) = (yyvsp[(1) - (1)]); rule = Rule; }
     break;
 
   case 20:
 /* Line 1787 of yacc.c  */
-#line 295 "awkgram.y"
+#line 296 "awkgram.y"
     {
                INSTRUCTION *tp;
 
@@ -2222,7 +2223,7 @@ yyreduce:
 
   case 21:
 /* Line 1787 of yacc.c  */
-#line 321 "awkgram.y"
+#line 322 "awkgram.y"
     {
                static int begin_seen = 0;
                if (do_lint_old && ++begin_seen == 2)
@@ -2237,7 +2238,7 @@ yyreduce:
 
   case 22:
 /* Line 1787 of yacc.c  */
-#line 332 "awkgram.y"
+#line 333 "awkgram.y"
     {
                static int end_seen = 0;
                if (do_lint_old && ++end_seen == 2)
@@ -2252,7 +2253,7 @@ yyreduce:
 
   case 23:
 /* Line 1787 of yacc.c  */
-#line 343 "awkgram.y"
+#line 344 "awkgram.y"
     {
                (yyvsp[(1) - (1)])->in_rule = rule = BEGINFILE;
                (yyvsp[(1) - (1)])->source_file = source;
@@ -2262,7 +2263,7 @@ yyreduce:
 
   case 24:
 /* Line 1787 of yacc.c  */
-#line 349 "awkgram.y"
+#line 350 "awkgram.y"
     {
                (yyvsp[(1) - (1)])->in_rule = rule = ENDFILE;
                (yyvsp[(1) - (1)])->source_file = source;
@@ -2272,7 +2273,7 @@ yyreduce:
 
   case 25:
 /* Line 1787 of yacc.c  */
-#line 358 "awkgram.y"
+#line 359 "awkgram.y"
     {
                if ((yyvsp[(2) - (5)]) == NULL)
                        (yyval) = list_create(instruction(Op_no_op));
@@ -2283,19 +2284,19 @@ yyreduce:
 
   case 26:
 /* Line 1787 of yacc.c  */
-#line 368 "awkgram.y"
+#line 369 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 27:
 /* Line 1787 of yacc.c  */
-#line 370 "awkgram.y"
+#line 371 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 28:
 /* Line 1787 of yacc.c  */
-#line 372 "awkgram.y"
+#line 373 "awkgram.y"
     {
                yyerror(_("`%s' is a built-in function, it cannot be 
redefined"),
                                        tokstart);
@@ -2305,13 +2306,13 @@ yyreduce:
 
   case 29:
 /* Line 1787 of yacc.c  */
-#line 378 "awkgram.y"
+#line 379 "awkgram.y"
     { (yyval) = (yyvsp[(2) - (2)]); }
     break;
 
   case 32:
 /* Line 1787 of yacc.c  */
-#line 388 "awkgram.y"
+#line 389 "awkgram.y"
     {
                (yyvsp[(1) - (6)])->source_file = source;
                if (install_function((yyvsp[(2) - (6)])->lextok, (yyvsp[(1) - 
(6)]), (yyvsp[(4) - (6)])) < 0)
@@ -2326,13 +2327,13 @@ yyreduce:
 
   case 33:
 /* Line 1787 of yacc.c  */
-#line 406 "awkgram.y"
+#line 407 "awkgram.y"
     { want_regexp = true; }
     break;
 
   case 34:
 /* Line 1787 of yacc.c  */
-#line 408 "awkgram.y"
+#line 409 "awkgram.y"
     {
                  NODE *n, *exp;
                  char *re;
@@ -2365,19 +2366,19 @@ yyreduce:
 
   case 35:
 /* Line 1787 of yacc.c  */
-#line 440 "awkgram.y"
+#line 441 "awkgram.y"
     { bcfree((yyvsp[(1) - (1)])); }
     break;
 
   case 37:
 /* Line 1787 of yacc.c  */
-#line 446 "awkgram.y"
+#line 447 "awkgram.y"
     {  (yyval) = NULL; }
     break;
 
   case 38:
 /* Line 1787 of yacc.c  */
-#line 448 "awkgram.y"
+#line 449 "awkgram.y"
     {
                if ((yyvsp[(2) - (2)]) == NULL)
                        (yyval) = (yyvsp[(1) - (2)]);
@@ -2394,25 +2395,25 @@ yyreduce:
 
   case 39:
 /* Line 1787 of yacc.c  */
-#line 461 "awkgram.y"
+#line 462 "awkgram.y"
     {  (yyval) = NULL; }
     break;
 
   case 42:
 /* Line 1787 of yacc.c  */
-#line 471 "awkgram.y"
+#line 472 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 43:
 /* Line 1787 of yacc.c  */
-#line 473 "awkgram.y"
+#line 474 "awkgram.y"
     { (yyval) = (yyvsp[(2) - (3)]); }
     break;
 
   case 44:
 /* Line 1787 of yacc.c  */
-#line 475 "awkgram.y"
+#line 476 "awkgram.y"
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[(1) - (1)]), 
instruction(Op_exec_count));
@@ -2423,7 +2424,7 @@ yyreduce:
 
   case 45:
 /* Line 1787 of yacc.c  */
-#line 482 "awkgram.y"
+#line 483 "awkgram.y"
     {
                INSTRUCTION *dflt, *curr = NULL, *cexp, *cstmt;
                INSTRUCTION *ip, *nextc, *tbreak;
@@ -2517,7 +2518,7 @@ yyreduce:
 
   case 46:
 /* Line 1787 of yacc.c  */
-#line 572 "awkgram.y"
+#line 573 "awkgram.y"
     { 
                /*
                 *    -----------------
@@ -2563,7 +2564,7 @@ yyreduce:
 
   case 47:
 /* Line 1787 of yacc.c  */
-#line 614 "awkgram.y"
+#line 615 "awkgram.y"
     {
                /*
                 *    -----------------
@@ -2609,7 +2610,7 @@ yyreduce:
 
   case 48:
 /* Line 1787 of yacc.c  */
-#line 656 "awkgram.y"
+#line 657 "awkgram.y"
     {
                INSTRUCTION *ip;
                char *var_name = (yyvsp[(3) - (8)])->lextok;
@@ -2726,7 +2727,7 @@ regular_loop:
 
   case 49:
 /* Line 1787 of yacc.c  */
-#line 769 "awkgram.y"
+#line 770 "awkgram.y"
     {
                (yyval) = mk_for_loop((yyvsp[(1) - (12)]), (yyvsp[(3) - (12)]), 
(yyvsp[(6) - (12)]), (yyvsp[(9) - (12)]), (yyvsp[(12) - (12)]));
 
@@ -2737,7 +2738,7 @@ regular_loop:
 
   case 50:
 /* Line 1787 of yacc.c  */
-#line 776 "awkgram.y"
+#line 777 "awkgram.y"
     {
                (yyval) = mk_for_loop((yyvsp[(1) - (11)]), (yyvsp[(3) - (11)]), 
(INSTRUCTION *) NULL, (yyvsp[(8) - (11)]), (yyvsp[(11) - (11)]));
 
@@ -2748,7 +2749,7 @@ regular_loop:
 
   case 51:
 /* Line 1787 of yacc.c  */
-#line 783 "awkgram.y"
+#line 784 "awkgram.y"
     {
                if (do_pretty_print)
                        (yyval) = list_prepend((yyvsp[(1) - (1)]), 
instruction(Op_exec_count));
@@ -2759,7 +2760,7 @@ regular_loop:
 
   case 52:
 /* Line 1787 of yacc.c  */
-#line 793 "awkgram.y"
+#line 794 "awkgram.y"
     { 
                if (! break_allowed)
                        error_ln((yyvsp[(1) - (2)])->source_line,
@@ -2772,7 +2773,7 @@ regular_loop:
 
   case 53:
 /* Line 1787 of yacc.c  */
-#line 802 "awkgram.y"
+#line 803 "awkgram.y"
     {
                if (! continue_allowed)
                        error_ln((yyvsp[(1) - (2)])->source_line,
@@ -2785,7 +2786,7 @@ regular_loop:
 
   case 54:
 /* Line 1787 of yacc.c  */
-#line 811 "awkgram.y"
+#line 812 "awkgram.y"
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule && rule != Rule)
@@ -2798,7 +2799,7 @@ regular_loop:
 
   case 55:
 /* Line 1787 of yacc.c  */
-#line 820 "awkgram.y"
+#line 821 "awkgram.y"
     {
                /* if inside function (rule = 0), resolve context at run-time */
                if (rule == BEGIN || rule == END || rule == ENDFILE)
@@ -2813,7 +2814,7 @@ regular_loop:
 
   case 56:
 /* Line 1787 of yacc.c  */
-#line 831 "awkgram.y"
+#line 832 "awkgram.y"
     {
                /* Initialize the two possible jump targets, the actual target
                 * is resolved at run-time. 
@@ -2832,7 +2833,7 @@ regular_loop:
 
   case 57:
 /* Line 1787 of yacc.c  */
-#line 846 "awkgram.y"
+#line 847 "awkgram.y"
     {
                if (! in_function)
                        yyerror(_("`return' used outside function context"));
@@ -2841,7 +2842,7 @@ regular_loop:
 
   case 58:
 /* Line 1787 of yacc.c  */
-#line 849 "awkgram.y"
+#line 850 "awkgram.y"
     {
                if ((yyvsp[(3) - (4)]) == NULL) {
                        (yyval) = list_create((yyvsp[(1) - (4)]));
@@ -2866,13 +2867,13 @@ regular_loop:
 
   case 60:
 /* Line 1787 of yacc.c  */
-#line 881 "awkgram.y"
+#line 882 "awkgram.y"
     { in_print = true; in_parens = 0; }
     break;
 
   case 61:
 /* Line 1787 of yacc.c  */
-#line 882 "awkgram.y"
+#line 883 "awkgram.y"
     {
                /*
                 * Optimization: plain `print' has no expression list, so $3 is 
null.
@@ -2973,13 +2974,13 @@ regular_print:
 
   case 62:
 /* Line 1787 of yacc.c  */
-#line 979 "awkgram.y"
+#line 980 "awkgram.y"
     { sub_counter = 0; }
     break;
 
   case 63:
 /* Line 1787 of yacc.c  */
-#line 980 "awkgram.y"
+#line 981 "awkgram.y"
     {
                char *arr = (yyvsp[(2) - (4)])->lextok;
 
@@ -3016,7 +3017,7 @@ regular_print:
 
   case 64:
 /* Line 1787 of yacc.c  */
-#line 1017 "awkgram.y"
+#line 1018 "awkgram.y"
     {
                static bool warned = false;
                char *arr = (yyvsp[(3) - (4)])->lextok;
@@ -3046,31 +3047,31 @@ regular_print:
 
   case 65:
 /* Line 1787 of yacc.c  */
-#line 1043 "awkgram.y"
+#line 1044 "awkgram.y"
     {  (yyval) = optimize_assignment((yyvsp[(1) - (1)])); }
     break;
 
   case 66:
 /* Line 1787 of yacc.c  */
-#line 1048 "awkgram.y"
+#line 1049 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 67:
 /* Line 1787 of yacc.c  */
-#line 1050 "awkgram.y"
+#line 1051 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 68:
 /* Line 1787 of yacc.c  */
-#line 1055 "awkgram.y"
+#line 1056 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 69:
 /* Line 1787 of yacc.c  */
-#line 1057 "awkgram.y"
+#line 1058 "awkgram.y"
     {
                if ((yyvsp[(1) - (2)]) == NULL)
                        (yyval) = list_create((yyvsp[(2) - (2)]));
@@ -3081,13 +3082,13 @@ regular_print:
 
   case 70:
 /* Line 1787 of yacc.c  */
-#line 1064 "awkgram.y"
+#line 1065 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 71:
 /* Line 1787 of yacc.c  */
-#line 1069 "awkgram.y"
+#line 1070 "awkgram.y"
     {
                INSTRUCTION *casestmt = (yyvsp[(5) - (5)]);
                if ((yyvsp[(5) - (5)]) == NULL)
@@ -3103,7 +3104,7 @@ regular_print:
 
   case 72:
 /* Line 1787 of yacc.c  */
-#line 1081 "awkgram.y"
+#line 1082 "awkgram.y"
     {
                INSTRUCTION *casestmt = (yyvsp[(4) - (4)]);
                if ((yyvsp[(4) - (4)]) == NULL)
@@ -3118,13 +3119,13 @@ regular_print:
 
   case 73:
 /* Line 1787 of yacc.c  */
-#line 1095 "awkgram.y"
+#line 1096 "awkgram.y"
     {  (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 74:
 /* Line 1787 of yacc.c  */
-#line 1097 "awkgram.y"
+#line 1098 "awkgram.y"
     { 
                NODE *n = (yyvsp[(2) - (2)])->memory;
                (void) force_number(n);
@@ -3136,7 +3137,7 @@ regular_print:
 
   case 75:
 /* Line 1787 of yacc.c  */
-#line 1105 "awkgram.y"
+#line 1106 "awkgram.y"
     {
                bcfree((yyvsp[(1) - (2)]));
                (yyval) = (yyvsp[(2) - (2)]);
@@ -3145,13 +3146,13 @@ regular_print:
 
   case 76:
 /* Line 1787 of yacc.c  */
-#line 1110 "awkgram.y"
+#line 1111 "awkgram.y"
     {  (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 77:
 /* Line 1787 of yacc.c  */
-#line 1112 "awkgram.y"
+#line 1113 "awkgram.y"
     {
                (yyvsp[(1) - (1)])->opcode = Op_push_re;
                (yyval) = (yyvsp[(1) - (1)]);
@@ -3160,19 +3161,19 @@ regular_print:
 
   case 78:
 /* Line 1787 of yacc.c  */
-#line 1120 "awkgram.y"
+#line 1121 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 79:
 /* Line 1787 of yacc.c  */
-#line 1122 "awkgram.y"
+#line 1123 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 81:
 /* Line 1787 of yacc.c  */
-#line 1132 "awkgram.y"
+#line 1133 "awkgram.y"
     {
                (yyval) = (yyvsp[(2) - (3)]);
          }
@@ -3180,7 +3181,7 @@ regular_print:
 
   case 82:
 /* Line 1787 of yacc.c  */
-#line 1139 "awkgram.y"
+#line 1140 "awkgram.y"
     {
                in_print = false;
                in_parens = 0;
@@ -3190,13 +3191,13 @@ regular_print:
 
   case 83:
 /* Line 1787 of yacc.c  */
-#line 1144 "awkgram.y"
+#line 1145 "awkgram.y"
     { in_print = false; in_parens = 0; }
     break;
 
   case 84:
 /* Line 1787 of yacc.c  */
-#line 1145 "awkgram.y"
+#line 1146 "awkgram.y"
     {
                if ((yyvsp[(1) - (3)])->redir_type == redirect_twoway
                        && (yyvsp[(3) - (3)])->lasti->opcode == 
Op_K_getline_redir
@@ -3208,7 +3209,7 @@ regular_print:
 
   case 85:
 /* Line 1787 of yacc.c  */
-#line 1156 "awkgram.y"
+#line 1157 "awkgram.y"
     {
                (yyval) = mk_condition((yyvsp[(3) - (6)]), (yyvsp[(1) - (6)]), 
(yyvsp[(6) - (6)]), NULL, NULL);
          }
@@ -3216,7 +3217,7 @@ regular_print:
 
   case 86:
 /* Line 1787 of yacc.c  */
-#line 1161 "awkgram.y"
+#line 1162 "awkgram.y"
     {
                (yyval) = mk_condition((yyvsp[(3) - (9)]), (yyvsp[(1) - (9)]), 
(yyvsp[(6) - (9)]), (yyvsp[(7) - (9)]), (yyvsp[(9) - (9)]));
          }
@@ -3224,13 +3225,13 @@ regular_print:
 
   case 91:
 /* Line 1787 of yacc.c  */
-#line 1178 "awkgram.y"
+#line 1179 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 92:
 /* Line 1787 of yacc.c  */
-#line 1180 "awkgram.y"
+#line 1181 "awkgram.y"
     {
                bcfree((yyvsp[(1) - (2)]));
                (yyval) = (yyvsp[(2) - (2)]);
@@ -3239,19 +3240,19 @@ regular_print:
 
   case 93:
 /* Line 1787 of yacc.c  */
-#line 1188 "awkgram.y"
+#line 1189 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 94:
 /* Line 1787 of yacc.c  */
-#line 1190 "awkgram.y"
+#line 1191 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]) ; }
     break;
 
   case 95:
 /* Line 1787 of yacc.c  */
-#line 1195 "awkgram.y"
+#line 1196 "awkgram.y"
     {
                (yyvsp[(1) - (1)])->param_count = 0;
                (yyval) = list_create((yyvsp[(1) - (1)]));
@@ -3260,7 +3261,7 @@ regular_print:
 
   case 96:
 /* Line 1787 of yacc.c  */
-#line 1200 "awkgram.y"
+#line 1201 "awkgram.y"
     {
                (yyvsp[(3) - (3)])->param_count =  (yyvsp[(1) - 
(3)])->lasti->param_count + 1;
                (yyval) = list_append((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]));
@@ -3270,55 +3271,55 @@ regular_print:
 
   case 97:
 /* Line 1787 of yacc.c  */
-#line 1206 "awkgram.y"
+#line 1207 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 98:
 /* Line 1787 of yacc.c  */
-#line 1208 "awkgram.y"
+#line 1209 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (2)]); }
     break;
 
   case 99:
 /* Line 1787 of yacc.c  */
-#line 1210 "awkgram.y"
+#line 1211 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (3)]); }
     break;
 
   case 100:
 /* Line 1787 of yacc.c  */
-#line 1216 "awkgram.y"
+#line 1217 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 101:
 /* Line 1787 of yacc.c  */
-#line 1218 "awkgram.y"
+#line 1219 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 102:
 /* Line 1787 of yacc.c  */
-#line 1223 "awkgram.y"
+#line 1224 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 103:
 /* Line 1787 of yacc.c  */
-#line 1225 "awkgram.y"
+#line 1226 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 104:
 /* Line 1787 of yacc.c  */
-#line 1230 "awkgram.y"
+#line 1231 "awkgram.y"
     {  (yyval) = mk_expression_list(NULL, (yyvsp[(1) - (1)])); }
     break;
 
   case 105:
 /* Line 1787 of yacc.c  */
-#line 1232 "awkgram.y"
+#line 1233 "awkgram.y"
     {
                (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - 
(3)]));
                yyerrok;
@@ -3327,13 +3328,13 @@ regular_print:
 
   case 106:
 /* Line 1787 of yacc.c  */
-#line 1237 "awkgram.y"
+#line 1238 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 107:
 /* Line 1787 of yacc.c  */
-#line 1239 "awkgram.y"
+#line 1240 "awkgram.y"
     {
                /*
                 * Returning the expression list instead of NULL lets
@@ -3345,7 +3346,7 @@ regular_print:
 
   case 108:
 /* Line 1787 of yacc.c  */
-#line 1247 "awkgram.y"
+#line 1248 "awkgram.y"
     {
                /* Ditto */
                (yyval) = mk_expression_list((yyvsp[(1) - (3)]), (yyvsp[(3) - 
(3)]));
@@ -3354,7 +3355,7 @@ regular_print:
 
   case 109:
 /* Line 1787 of yacc.c  */
-#line 1252 "awkgram.y"
+#line 1253 "awkgram.y"
     {
                /* Ditto */
                (yyval) = (yyvsp[(1) - (3)]);
@@ -3363,7 +3364,7 @@ regular_print:
 
   case 110:
 /* Line 1787 of yacc.c  */
-#line 1261 "awkgram.y"
+#line 1262 "awkgram.y"
     {
                if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == 
Op_match_rec)
                        lintwarn_ln((yyvsp[(2) - (3)])->source_line,
@@ -3374,19 +3375,19 @@ regular_print:
 
   case 111:
 /* Line 1787 of yacc.c  */
-#line 1268 "awkgram.y"
+#line 1269 "awkgram.y"
     {  (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) 
- (3)])); }
     break;
 
   case 112:
 /* Line 1787 of yacc.c  */
-#line 1270 "awkgram.y"
+#line 1271 "awkgram.y"
     {  (yyval) = mk_boolean((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) 
- (3)])); }
     break;
 
   case 113:
 /* Line 1787 of yacc.c  */
-#line 1272 "awkgram.y"
+#line 1273 "awkgram.y"
     {
                if ((yyvsp[(1) - (3)])->lasti->opcode == Op_match_rec)
                        warning_ln((yyvsp[(2) - (3)])->source_line,
@@ -3406,7 +3407,7 @@ regular_print:
 
   case 114:
 /* Line 1787 of yacc.c  */
-#line 1288 "awkgram.y"
+#line 1289 "awkgram.y"
     {
                if (do_lint_old)
                        warning_ln((yyvsp[(2) - (3)])->source_line,
@@ -3420,7 +3421,7 @@ regular_print:
 
   case 115:
 /* Line 1787 of yacc.c  */
-#line 1298 "awkgram.y"
+#line 1299 "awkgram.y"
     {
                if (do_lint && (yyvsp[(3) - (3)])->lasti->opcode == 
Op_match_rec)
                        lintwarn_ln((yyvsp[(2) - (3)])->source_line,
@@ -3431,31 +3432,31 @@ regular_print:
 
   case 116:
 /* Line 1787 of yacc.c  */
-#line 1305 "awkgram.y"
+#line 1306 "awkgram.y"
     { (yyval) = mk_condition((yyvsp[(1) - (5)]), (yyvsp[(2) - (5)]), 
(yyvsp[(3) - (5)]), (yyvsp[(4) - (5)]), (yyvsp[(5) - (5)])); }
     break;
 
   case 117:
 /* Line 1787 of yacc.c  */
-#line 1307 "awkgram.y"
+#line 1308 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 118:
 /* Line 1787 of yacc.c  */
-#line 1312 "awkgram.y"
+#line 1313 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 119:
 /* Line 1787 of yacc.c  */
-#line 1314 "awkgram.y"
+#line 1315 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 120:
 /* Line 1787 of yacc.c  */
-#line 1316 "awkgram.y"
+#line 1317 "awkgram.y"
     {  
                (yyvsp[(2) - (2)])->opcode = Op_assign_quotient;
                (yyval) = (yyvsp[(2) - (2)]);
@@ -3464,43 +3465,43 @@ regular_print:
 
   case 121:
 /* Line 1787 of yacc.c  */
-#line 1324 "awkgram.y"
+#line 1325 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 122:
 /* Line 1787 of yacc.c  */
-#line 1326 "awkgram.y"
+#line 1327 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 123:
 /* Line 1787 of yacc.c  */
-#line 1331 "awkgram.y"
+#line 1332 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 124:
 /* Line 1787 of yacc.c  */
-#line 1333 "awkgram.y"
+#line 1334 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 125:
 /* Line 1787 of yacc.c  */
-#line 1338 "awkgram.y"
+#line 1339 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 126:
 /* Line 1787 of yacc.c  */
-#line 1340 "awkgram.y"
+#line 1341 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 127:
 /* Line 1787 of yacc.c  */
-#line 1342 "awkgram.y"
+#line 1343 "awkgram.y"
     {
                int count = 2;
                bool is_simple_var = false;
@@ -3551,43 +3552,43 @@ regular_print:
 
   case 129:
 /* Line 1787 of yacc.c  */
-#line 1394 "awkgram.y"
+#line 1395 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 130:
 /* Line 1787 of yacc.c  */
-#line 1396 "awkgram.y"
+#line 1397 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 131:
 /* Line 1787 of yacc.c  */
-#line 1398 "awkgram.y"
+#line 1399 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 132:
 /* Line 1787 of yacc.c  */
-#line 1400 "awkgram.y"
+#line 1401 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 133:
 /* Line 1787 of yacc.c  */
-#line 1402 "awkgram.y"
+#line 1403 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 134:
 /* Line 1787 of yacc.c  */
-#line 1404 "awkgram.y"
+#line 1405 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 135:
 /* Line 1787 of yacc.c  */
-#line 1406 "awkgram.y"
+#line 1407 "awkgram.y"
     {
                /*
                 * In BEGINFILE/ENDFILE, allow `getline var < file'
@@ -3614,7 +3615,7 @@ regular_print:
 
   case 136:
 /* Line 1787 of yacc.c  */
-#line 1429 "awkgram.y"
+#line 1430 "awkgram.y"
     {
                (yyvsp[(2) - (2)])->opcode = Op_postincrement;
                (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - 
(2)]));
@@ -3623,7 +3624,7 @@ regular_print:
 
   case 137:
 /* Line 1787 of yacc.c  */
-#line 1434 "awkgram.y"
+#line 1435 "awkgram.y"
     {
                (yyvsp[(2) - (2)])->opcode = Op_postdecrement;
                (yyval) = mk_assignment((yyvsp[(1) - (2)]), NULL, (yyvsp[(2) - 
(2)]));
@@ -3632,7 +3633,7 @@ regular_print:
 
   case 138:
 /* Line 1787 of yacc.c  */
-#line 1439 "awkgram.y"
+#line 1440 "awkgram.y"
     {
                if (do_lint_old) {
                    warning_ln((yyvsp[(4) - (5)])->source_line,
@@ -3656,7 +3657,7 @@ regular_print:
 
   case 139:
 /* Line 1787 of yacc.c  */
-#line 1464 "awkgram.y"
+#line 1465 "awkgram.y"
     {
                  (yyval) = mk_getline((yyvsp[(3) - (4)]), (yyvsp[(4) - (4)]), 
(yyvsp[(1) - (4)]), (yyvsp[(2) - (4)])->redir_type);
                  bcfree((yyvsp[(2) - (4)]));
@@ -3665,43 +3666,43 @@ regular_print:
 
   case 140:
 /* Line 1787 of yacc.c  */
-#line 1470 "awkgram.y"
+#line 1471 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 141:
 /* Line 1787 of yacc.c  */
-#line 1472 "awkgram.y"
+#line 1473 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 142:
 /* Line 1787 of yacc.c  */
-#line 1474 "awkgram.y"
+#line 1475 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 143:
 /* Line 1787 of yacc.c  */
-#line 1476 "awkgram.y"
+#line 1477 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 144:
 /* Line 1787 of yacc.c  */
-#line 1478 "awkgram.y"
+#line 1479 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 145:
 /* Line 1787 of yacc.c  */
-#line 1480 "awkgram.y"
+#line 1481 "awkgram.y"
     { (yyval) = mk_binary((yyvsp[(1) - (3)]), (yyvsp[(3) - (3)]), (yyvsp[(2) - 
(3)])); }
     break;
 
   case 146:
 /* Line 1787 of yacc.c  */
-#line 1485 "awkgram.y"
+#line 1486 "awkgram.y"
     {
                (yyval) = list_create((yyvsp[(1) - (1)]));
          }
@@ -3709,7 +3710,7 @@ regular_print:
 
   case 147:
 /* Line 1787 of yacc.c  */
-#line 1489 "awkgram.y"
+#line 1490 "awkgram.y"
     {
                if ((yyvsp[(2) - (2)])->opcode == Op_match_rec) {
                        (yyvsp[(2) - (2)])->opcode = Op_nomatch;
@@ -3745,13 +3746,13 @@ regular_print:
 
   case 148:
 /* Line 1787 of yacc.c  */
-#line 1521 "awkgram.y"
+#line 1522 "awkgram.y"
     { (yyval) = (yyvsp[(2) - (3)]); }
     break;
 
   case 149:
 /* Line 1787 of yacc.c  */
-#line 1523 "awkgram.y"
+#line 1524 "awkgram.y"
     {
                (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)]));
                if ((yyval) == NULL)
@@ -3761,7 +3762,7 @@ regular_print:
 
   case 150:
 /* Line 1787 of yacc.c  */
-#line 1529 "awkgram.y"
+#line 1530 "awkgram.y"
     {
                (yyval) = snode((yyvsp[(3) - (4)]), (yyvsp[(1) - (4)]));
                if ((yyval) == NULL)
@@ -3771,7 +3772,7 @@ regular_print:
 
   case 151:
 /* Line 1787 of yacc.c  */
-#line 1535 "awkgram.y"
+#line 1536 "awkgram.y"
     {
                static bool warned = false;
 
@@ -3788,7 +3789,7 @@ regular_print:
 
   case 154:
 /* Line 1787 of yacc.c  */
-#line 1550 "awkgram.y"
+#line 1551 "awkgram.y"
     {
                (yyvsp[(1) - (2)])->opcode = Op_preincrement;
                (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - 
(2)]));
@@ -3797,7 +3798,7 @@ regular_print:
 
   case 155:
 /* Line 1787 of yacc.c  */
-#line 1555 "awkgram.y"
+#line 1556 "awkgram.y"
     {
                (yyvsp[(1) - (2)])->opcode = Op_predecrement;
                (yyval) = mk_assignment((yyvsp[(2) - (2)]), NULL, (yyvsp[(1) - 
(2)]));
@@ -3806,7 +3807,7 @@ regular_print:
 
   case 156:
 /* Line 1787 of yacc.c  */
-#line 1560 "awkgram.y"
+#line 1561 "awkgram.y"
     {
                (yyval) = list_create((yyvsp[(1) - (1)]));
          }
@@ -3814,7 +3815,7 @@ regular_print:
 
   case 157:
 /* Line 1787 of yacc.c  */
-#line 1564 "awkgram.y"
+#line 1565 "awkgram.y"
     {
                (yyval) = list_create((yyvsp[(1) - (1)]));
          }
@@ -3822,7 +3823,7 @@ regular_print:
 
   case 158:
 /* Line 1787 of yacc.c  */
-#line 1568 "awkgram.y"
+#line 1569 "awkgram.y"
     {
                if ((yyvsp[(2) - (2)])->lasti->opcode == Op_push_i
                        && ((yyvsp[(2) - (2)])->lasti->memory->flags & 
(STRCUR|STRING)) == 0
@@ -3841,7 +3842,7 @@ regular_print:
 
   case 159:
 /* Line 1787 of yacc.c  */
-#line 1583 "awkgram.y"
+#line 1584 "awkgram.y"
     {
            /*
             * was: $$ = $2
@@ -3855,7 +3856,7 @@ regular_print:
 
   case 160:
 /* Line 1787 of yacc.c  */
-#line 1596 "awkgram.y"
+#line 1597 "awkgram.y"
     {
                func_use((yyvsp[(1) - (1)])->lasti->func_name, FUNC_USE);
                (yyval) = (yyvsp[(1) - (1)]);
@@ -3864,7 +3865,7 @@ regular_print:
 
   case 161:
 /* Line 1787 of yacc.c  */
-#line 1601 "awkgram.y"
+#line 1602 "awkgram.y"
     {
                /* indirect function call */
                INSTRUCTION *f, *t;
@@ -3901,7 +3902,7 @@ regular_print:
 
   case 162:
 /* Line 1787 of yacc.c  */
-#line 1637 "awkgram.y"
+#line 1638 "awkgram.y"
     {
                param_sanity((yyvsp[(3) - (4)]));
                (yyvsp[(1) - (4)])->opcode = Op_func_call;
@@ -3919,37 +3920,37 @@ regular_print:
 
   case 163:
 /* Line 1787 of yacc.c  */
-#line 1654 "awkgram.y"
+#line 1655 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 164:
 /* Line 1787 of yacc.c  */
-#line 1656 "awkgram.y"
+#line 1657 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 165:
 /* Line 1787 of yacc.c  */
-#line 1661 "awkgram.y"
+#line 1662 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 166:
 /* Line 1787 of yacc.c  */
-#line 1663 "awkgram.y"
+#line 1664 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (2)]); }
     break;
 
   case 167:
 /* Line 1787 of yacc.c  */
-#line 1668 "awkgram.y"
+#line 1669 "awkgram.y"
     {  (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 168:
 /* Line 1787 of yacc.c  */
-#line 1670 "awkgram.y"
+#line 1671 "awkgram.y"
     {
                (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
          }
@@ -3957,7 +3958,7 @@ regular_print:
 
   case 169:
 /* Line 1787 of yacc.c  */
-#line 1677 "awkgram.y"
+#line 1678 "awkgram.y"
     {
                INSTRUCTION *ip = (yyvsp[(1) - (1)])->lasti; 
                int count = ip->sub_count;      /* # of SUBSEP-seperated 
expressions */
@@ -3975,7 +3976,7 @@ regular_print:
 
   case 170:
 /* Line 1787 of yacc.c  */
-#line 1694 "awkgram.y"
+#line 1695 "awkgram.y"
     {
                INSTRUCTION *t = (yyvsp[(2) - (3)]);
                if ((yyvsp[(2) - (3)]) == NULL) {
@@ -3993,13 +3994,13 @@ regular_print:
 
   case 171:
 /* Line 1787 of yacc.c  */
-#line 1711 "awkgram.y"
+#line 1712 "awkgram.y"
     {  (yyval) = (yyvsp[(1) - (1)]); }
     break;
 
   case 172:
 /* Line 1787 of yacc.c  */
-#line 1713 "awkgram.y"
+#line 1714 "awkgram.y"
     {
                (yyval) = list_merge((yyvsp[(1) - (2)]), (yyvsp[(2) - (2)]));
          }
@@ -4007,13 +4008,13 @@ regular_print:
 
   case 173:
 /* Line 1787 of yacc.c  */
-#line 1720 "awkgram.y"
+#line 1721 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (2)]); }
     break;
 
   case 174:
 /* Line 1787 of yacc.c  */
-#line 1725 "awkgram.y"
+#line 1726 "awkgram.y"
     {
                char *var_name = (yyvsp[(1) - (1)])->lextok;
 
@@ -4025,7 +4026,7 @@ regular_print:
 
   case 175:
 /* Line 1787 of yacc.c  */
-#line 1733 "awkgram.y"
+#line 1734 "awkgram.y"
     {
                char *arr = (yyvsp[(1) - (2)])->lextok;
                (yyvsp[(1) - (2)])->memory = variable((yyvsp[(1) - 
(2)])->source_line, arr, Node_var_new);
@@ -4036,7 +4037,7 @@ regular_print:
 
   case 176:
 /* Line 1787 of yacc.c  */
-#line 1743 "awkgram.y"
+#line 1744 "awkgram.y"
     {
                INSTRUCTION *ip = (yyvsp[(1) - (1)])->nexti;
                if (ip->opcode == Op_push
@@ -4052,7 +4053,7 @@ regular_print:
 
   case 177:
 /* Line 1787 of yacc.c  */
-#line 1755 "awkgram.y"
+#line 1756 "awkgram.y"
     {
                (yyval) = list_append((yyvsp[(2) - (3)]), (yyvsp[(1) - (3)]));
                if ((yyvsp[(3) - (3)]) != NULL)
@@ -4062,7 +4063,7 @@ regular_print:
 
   case 178:
 /* Line 1787 of yacc.c  */
-#line 1764 "awkgram.y"
+#line 1765 "awkgram.y"
     {
                (yyvsp[(1) - (1)])->opcode = Op_postincrement;
          }
@@ -4070,7 +4071,7 @@ regular_print:
 
   case 179:
 /* Line 1787 of yacc.c  */
-#line 1768 "awkgram.y"
+#line 1769 "awkgram.y"
     {
                (yyvsp[(1) - (1)])->opcode = Op_postdecrement;
          }
@@ -4078,43 +4079,43 @@ regular_print:
 
   case 180:
 /* Line 1787 of yacc.c  */
-#line 1771 "awkgram.y"
+#line 1772 "awkgram.y"
     { (yyval) = NULL; }
     break;
 
   case 182:
 /* Line 1787 of yacc.c  */
-#line 1779 "awkgram.y"
+#line 1780 "awkgram.y"
     { yyerrok; }
     break;
 
   case 183:
 /* Line 1787 of yacc.c  */
-#line 1783 "awkgram.y"
+#line 1784 "awkgram.y"
     { yyerrok; }
     break;
 
   case 186:
 /* Line 1787 of yacc.c  */
-#line 1792 "awkgram.y"
+#line 1793 "awkgram.y"
     { yyerrok; }
     break;
 
   case 187:
 /* Line 1787 of yacc.c  */
-#line 1796 "awkgram.y"
+#line 1797 "awkgram.y"
     { (yyval) = (yyvsp[(1) - (1)]); yyerrok; }
     break;
 
   case 188:
 /* Line 1787 of yacc.c  */
-#line 1800 "awkgram.y"
+#line 1801 "awkgram.y"
     { yyerrok; }
     break;
 
 
 /* Line 1787 of yacc.c  */
-#line 4118 "awkgram.c"
+#line 4119 "awkgram.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4346,7 +4347,7 @@ yyreturn:
 
 
 /* Line 2050 of yacc.c  */
-#line 1802 "awkgram.y"
+#line 1803 "awkgram.y"
 
 
 struct token {
@@ -4819,7 +4820,7 @@ parse_program(INSTRUCTION **pcode)
                ip_newfile = ip_rec = ip_atexit = ip_beginfile = ip_endfile = 
NULL;
        else {
                ip_endfile = instruction(Op_no_op);
-               ip_beginfile = instruction(Op_no_op);
+               main_beginfile = ip_beginfile = instruction(Op_no_op);
                ip_rec = instruction(Op_get_record); /* target for `next', also 
ip_newfile */
                ip_newfile = bcalloc(Op_newfile, 2, 0); /* target for 
`nextfile' */
                ip_newfile->target_jmp = ip_end;
diff --git a/awkgram.y b/awkgram.y
index f0ff4f0..ab81354 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -145,6 +145,7 @@ static INSTRUCTION *ip_atexit = NULL;
 static INSTRUCTION *ip_end;
 static INSTRUCTION *ip_endfile;
 static INSTRUCTION *ip_beginfile;
+INSTRUCTION *main_beginfile;
 
 static inline INSTRUCTION *list_create(INSTRUCTION *x);
 static inline INSTRUCTION *list_append(INSTRUCTION *l, INSTRUCTION *x);
@@ -2271,7 +2272,7 @@ parse_program(INSTRUCTION **pcode)
                ip_newfile = ip_rec = ip_atexit = ip_beginfile = ip_endfile = 
NULL;
        else {
                ip_endfile = instruction(Op_no_op);
-               ip_beginfile = instruction(Op_no_op);
+               main_beginfile = ip_beginfile = instruction(Op_no_op);
                ip_rec = instruction(Op_get_record); /* target for `next', also 
ip_newfile */
                ip_newfile = bcalloc(Op_newfile, 2, 0); /* target for 
`nextfile' */
                ip_newfile->target_jmp = ip_end;
diff --git a/gawkapi.c b/gawkapi.c
index 3fc2338..e12e55d 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -1054,6 +1054,9 @@ api_lookup_file(awk_ext_id_t id, const char *name, size_t 
namelen)
 
 /* api_get_file --- return a handle to an existing or newly opened file */
 
+extern INSTRUCTION *main_beginfile;
+extern int currule;
+
 static const awk_input_buf_t *
 api_get_file(awk_ext_id_t id, const char *name, size_t namelen, const char 
*filetype, size_t typelen)
 {
@@ -1065,8 +1068,27 @@ api_get_file(awk_ext_id_t id, const char *name, size_t 
namelen, const char *file
                if (curfile == NULL) {
                        if (nextfile(& curfile, false) <= 0)
                                return NULL;
-                       /* XXX Fix me! */
-                       fputs("Bug: need to call BEGINFILE!\n", stderr);
+                       {
+                               INSTRUCTION *pc = main_beginfile;
+                               /* save execution state */
+                               int save_rule = currule;
+                               char *save_source = source;
+
+                               while (1) {
+                                       if (!pc)
+                                               fatal(_("cannot find end of 
BEGINFILE rule"));
+                                       if (pc->opcode == Op_after_beginfile)
+                                               break;
+                                       pc = pc->nexti;
+                               }
+                               pc->opcode = Op_stop;
+                               (void) (*interpret)(main_beginfile);
+                               pc->opcode = Op_after_beginfile;
+                               after_beginfile(& curfile);
+                               /* restore execution state */
+                               currule = save_rule;
+                               source = save_source;
+                       }
                }
                return &curfile->public;
        }

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog |   11 ++
 awkgram.c |  385 +++++++++++++++++++++++++++++++------------------------------
 awkgram.y |    3 +-
 gawkapi.c |   26 ++++-
 4 files changed, 230 insertions(+), 195 deletions(-)


hooks/post-receive
-- 
gawk



reply via email to

[Prev in Thread] Current Thread [Next in Thread]