[svn:parrot] r35794 - trunk/compilers/pirc/src
[email protected] Tue, 20 Jan 2009 03:10:05 -0800 (PST)
| Newsgroups | perl.cvs.parrot |
|---|---|
| Message-ID | <[email protected]> |
Author: kjs
Date: Tue Jan 20 03:10:03 2009
New Revision: 35794
Modified:
trunk/compilers/pirc/src/pir.l
trunk/compilers/pirc/src/pir.y
trunk/compilers/pirc/src/pircompiler.h
trunk/compilers/pirc/src/pirlexer.c
trunk/compilers/pirc/src/pirlexer.h
trunk/compilers/pirc/src/pirparser.c
Log:
[pirc] start of implementation of line counting. Flex' linecounting and flex+bison token interaction make that the current line is not always reported correctly.
Modified: trunk/compilers/pirc/src/pir.l
==============================================================================
--- trunk/compilers/pirc/src/pir.l (original)
+++ trunk/compilers/pirc/src/pir.l Tue Jan 20 03:10:03 2009
@@ -250,7 +250,24 @@
[#].*{EOL}{WS}* { /* ignore line comments */ }
{EOL}[\t\r\n ]* { /* a set of continuous newlines yields a single newline token. */
- yylval->sval = "\n";
+ int index = 0;
+ int num_newlines = 0;
+
+ /* count number of newlines in the matched text;
+ * iterate explicitly using an index is somewhat safer
+ * than with a character pointer, as you'd have to
+ * check for (*iter != '\0'), not (iter != NULL) for
+ * some reason. Just do it safely, and hope the compiler
+ * optimizes this a bit.
+ */
+ while (index < yyleng) {
+ if (yytext[index] == '\n')
+ ++num_newlines;
+
+ ++index;
+ }
+ /* pass the number of matched newlines */
+ yylval->ival = num_newlines;
return TK_NL;
}
Modified: trunk/compilers/pirc/src/pir.y
==============================================================================
--- trunk/compilers/pirc/src/pir.y (original)
+++ trunk/compilers/pirc/src/pir.y Tue Jan 20 03:10:03 2009
@@ -287,7 +287,7 @@
TK_TAILCALL ".tailcall"
TK_ANNOTATE ".annotate"
-%token <sval> TK_NL "\n"
+%token <ival> TK_NL "\n"
%token <sval> TK_LABEL "label"
<sval> TK_IDENT "identifier"
@@ -954,6 +954,7 @@
;
braced_item : "\n"
+ { $$ = "\n"; }
| TK_MACRO_ARG_OTHER
| TK_MACRO_ARG_IDENT
| TK_MACRO_IDENT opt_macro_args
Modified: trunk/compilers/pirc/src/pircompiler.h
==============================================================================
--- trunk/compilers/pirc/src/pircompiler.h (original)
+++ trunk/compilers/pirc/src/pircompiler.h Tue Jan 20 03:10:03 2009
@@ -91,6 +91,7 @@
unsigned parse_errors;
char const *filename; /* name of input file */
FILE *outfile; /* output file */
+ int linenr; /* Flex' line counting su^W^W doesn't work well. */
subroutine *subs; /* list of subs; always points to the current sub. */
Modified: trunk/compilers/pirc/src/pirlexer.c
==============================================================================
--- trunk/compilers/pirc/src/pirlexer.c (original)
+++ trunk/compilers/pirc/src/pirlexer.c Tue Jan 20 03:10:03 2009
@@ -44,10 +44,18 @@
/* A lexical scanner generated by flex */
+/* %not-for-header */
+
+/* %if-c-only */
+/* %if-not-reentrant */
+/* %endif */
+/* %endif */
+/* %ok-for-header */
+
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -85,7 +93,7 @@
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
* if you want the limit (max/min) macros for int types.
@@ -153,11 +161,12 @@
#else /* ! __cplusplus */
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
@@ -201,7 +210,6 @@
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
#define yy_flex_debug yyg->yy_flex_debug_r
-int yypirlex_init (yyscan_t* scanner);
/* %endif */
/* %if-not-reentrant */
@@ -285,14 +293,9 @@
#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
+typedef size_t yy_size_t;
#endif
#ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -1401,29 +1404,29 @@
static yyconst flex_int16_t yy_rule_linenum[210] =
{ 0,
- 226, 248, 250, 252, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 270, 271, 272, 273,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 288, 293, 294, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 308, 309, 310, 311,
- 313, 314, 315, 316, 318, 319, 320, 321, 322, 324,
- 325, 326, 327, 328, 329, 330, 331, 332, 334, 335,
- 336, 337, 338, 339, 340, 341, 342, 343, 344, 345,
- 346, 347, 348, 349, 350, 351, 354, 361, 362, 363,
- 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
-
- 374, 376, 377, 378, 379, 380, 381, 382, 383, 385,
- 389, 406, 411, 440, 488, 489, 490, 491, 493, 498,
- 510, 538, 539, 540, 541, 542, 544, 552, 603, 616,
- 638, 643, 648, 655, 656, 671, 676, 677, 682, 683,
- 684, 686, 702, 756, 784, 789, 794, 795, 796, 797,
- 802, 813, 814, 816, 818, 829, 843, 848, 849, 850,
- 851, 853, 868, 882, 911, 936, 938, 943, 953, 958,
- 976, 982, 989, 1022, 1024, 1029, 1065, 1066, 1067, 1069,
- 1070, 1071, 1072, 1073, 1074, 1076, 1077, 1078, 1080, 1085,
- 1090, 1091, 1094, 1128, 1133, 1136, 1137, 1138, 1139, 1141,
+ 226, 248, 250, 252, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 287, 288, 289, 290,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 305, 310, 311, 313, 314, 315, 316, 317,
+ 318, 319, 320, 321, 322, 323, 325, 326, 327, 328,
+ 330, 331, 332, 333, 335, 336, 337, 338, 339, 341,
+ 342, 343, 344, 345, 346, 347, 348, 349, 351, 352,
+ 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
+ 363, 364, 365, 366, 367, 368, 371, 378, 379, 380,
+ 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
+
+ 391, 393, 394, 395, 396, 397, 398, 399, 400, 402,
+ 406, 423, 428, 457, 505, 506, 507, 508, 510, 515,
+ 527, 555, 556, 557, 558, 559, 561, 569, 620, 633,
+ 655, 660, 665, 672, 673, 688, 693, 694, 699, 700,
+ 701, 703, 719, 773, 801, 806, 811, 812, 813, 814,
+ 819, 830, 831, 833, 835, 846, 860, 865, 866, 867,
+ 868, 870, 885, 899, 928, 953, 955, 960, 970, 975,
+ 993, 999, 1006, 1039, 1041, 1046, 1082, 1083, 1084, 1086,
+ 1087, 1088, 1089, 1090, 1091, 1093, 1094, 1095, 1097, 1102,
+ 1107, 1108, 1111, 1145, 1150, 1153, 1154, 1155, 1156, 1158,
- 1146, 1147, 1148, 1149, 1150, 1152, 1157, 1159, 1161
+ 1163, 1164, 1165, 1166, 1167, 1169, 1174, 1176, 1178
} ;
/* The intent behind this definition is that it'll catch
@@ -1543,7 +1546,7 @@
/* The PASM state is an exclusive state, recognizing ONLY PASM tokens. */
-#line 1547 "pirlexer.c"
+#line 1550 "pirlexer.c"
#define INITIAL 0
#define MACROHEAD 1
@@ -1625,8 +1628,14 @@
* from bison output in section 1.*/
# define yylval yyg->yylval_r
+int yypirlex_init (yyscan_t* scanner);
+
+int yypirlex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
/* %endif */
+/* %endif End reentrant structures and macros. */
+
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
@@ -1663,7 +1672,6 @@
void yypirset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
/* %endif */
-/* %endif End reentrant structures and macros. */
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -1726,7 +1734,7 @@
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#define ECHO fwrite( yytext, yyleng, 1, yyout )
/* %endif */
/* %if-c++-only C++ definition */
/* %endif */
@@ -1741,7 +1749,7 @@
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
int c = '*'; \
- size_t n; \
+ int n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -1813,9 +1821,11 @@
#define YY_DECL_IS_OURS 1
/* %if-c-only Standard (non-C++) definition */
-extern int yypirlex (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+extern int yypirlex \
+ (YYSTYPE * yylval_param ,yyscan_t yyscanner);
-#define YY_DECL int yypirlex (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#define YY_DECL int yypirlex \
+ (YYSTYPE * yylval_param , yyscan_t yyscanner)
/* %endif */
/* %if-c++-only C++ definition */
/* %endif */
@@ -1853,7 +1863,7 @@
-#line 1857 "pirlexer.c"
+#line 1867 "pirlexer.c"
yylval = yylval_param;
@@ -2019,425 +2029,442 @@
YY_RULE_SETUP
#line 252 "pir.l"
{ /* a set of continuous newlines yields a single newline token. */
- yylval->sval = "\n";
+ int index = 0;
+ int num_newlines = 0;
+
+ /* count number of newlines in the matched text;
+ * iterate explicitly using an index is somewhat safer
+ * than with a character pointer, as you'd have to
+ * check for (*iter != '\0'), not (iter != NULL) for
+ * some reason. Just do it safely, and hope the compiler
+ * optimizes this a bit.
+ */
+ while (index < yyleng) {
+ if (yytext[index] == '\n')
+ ++num_newlines;
+
+ ++index;
+ }
+ /* pass the number of matched newlines */
+ yylval->ival = num_newlines;
return TK_NL;
}
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 257 "pir.l"
+#line 274 "pir.l"
{ return TK_ASSIGN_USHIFT; }
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 258 "pir.l"
+#line 275 "pir.l"
{ return TK_USHIFT; }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 259 "pir.l"
+#line 276 "pir.l"
{ return TK_ASSIGN_RSHIFT; }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 260 "pir.l"
+#line 277 "pir.l"
{ return TK_RSHIFT; }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 261 "pir.l"
+#line 278 "pir.l"
{ return TK_LSHIFT; }
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 262 "pir.l"
+#line 279 "pir.l"
{ return TK_ARROW; }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 263 "pir.l"
+#line 280 "pir.l"
{ return TK_EQ; }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 264 "pir.l"
+#line 281 "pir.l"
{ return TK_NE; }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 265 "pir.l"
+#line 282 "pir.l"
{ return TK_LE; }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 266 "pir.l"
+#line 283 "pir.l"
{ return TK_GE; }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 267 "pir.l"
+#line 284 "pir.l"
{ return TK_LT; }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 268 "pir.l"
+#line 285 "pir.l"
{ return TK_GT; }
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 270 "pir.l"
+#line 287 "pir.l"
{ return TK_FDIV; }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 271 "pir.l"
+#line 288 "pir.l"
{ return TK_AND; }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 272 "pir.l"
+#line 289 "pir.l"
{ return TK_OR; }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 273 "pir.l"
+#line 290 "pir.l"
{ return TK_XOR; }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 275 "pir.l"
+#line 292 "pir.l"
{ return '+'; }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 276 "pir.l"
+#line 293 "pir.l"
{ return '%'; }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 277 "pir.l"
+#line 294 "pir.l"
{ return '*'; }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 278 "pir.l"
+#line 295 "pir.l"
{ return '/'; }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 279 "pir.l"
+#line 296 "pir.l"
{ return '!'; }
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 280 "pir.l"
+#line 297 "pir.l"
{ return '~'; }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 281 "pir.l"
+#line 298 "pir.l"
{ return '-'; }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 282 "pir.l"
+#line 299 "pir.l"
{ return '('; }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 283 "pir.l"
+#line 300 "pir.l"
{ return ')'; }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 284 "pir.l"
+#line 301 "pir.l"
{ return ','; }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 285 "pir.l"
+#line 302 "pir.l"
{ return '['; }
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 286 "pir.l"
+#line 303 "pir.l"
{ return ']'; }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 288 "pir.l"
+#line 305 "pir.l"
{ /* if the dot is surrounded by whitespace, it's a concatenation operator */
return TK_CONC;
}
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 293 "pir.l"
+#line 310 "pir.l"
{ return '='; }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 294 "pir.l"
+#line 311 "pir.l"
{ return ';'; }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 296 "pir.l"
+#line 313 "pir.l"
{ return TK_ASSIGN_INC; }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 297 "pir.l"
+#line 314 "pir.l"
{ return TK_ASSIGN_DEC; }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 298 "pir.l"
+#line 315 "pir.l"
{ return TK_ASSIGN_DIV; }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 299 "pir.l"
+#line 316 "pir.l"
{ return TK_ASSIGN_MUL; }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 300 "pir.l"
+#line 317 "pir.l"
{ return TK_ASSIGN_MOD; }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 301 "pir.l"
+#line 318 "pir.l"
{ return TK_ASSIGN_POW; }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 302 "pir.l"
+#line 319 "pir.l"
{ return TK_ASSIGN_BOR; }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 303 "pir.l"
+#line 320 "pir.l"
{ return TK_ASSIGN_BAND; }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 304 "pir.l"
+#line 321 "pir.l"
{ return TK_ASSIGN_FDIV; }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 305 "pir.l"
+#line 322 "pir.l"
{ return TK_ASSIGN_BNOT; }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 306 "pir.l"
+#line 323 "pir.l"
{ return TK_ASSIGN_CONC; }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 308 "pir.l"
+#line 325 "pir.l"
{ return TK_IF; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 309 "pir.l"
+#line 326 "pir.l"
{ return TK_GOTO; }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 310 "pir.l"
+#line 327 "pir.l"
{ return TK_UNLESS; }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 311 "pir.l"
+#line 328 "pir.l"
{ return TK_NULL; }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 313 "pir.l"
+#line 330 "pir.l"
{ return TK_INT; }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 314 "pir.l"
+#line 331 "pir.l"
{ return TK_NUM; }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 315 "pir.l"
+#line 332 "pir.l"
{ return TK_PMC; }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 316 "pir.l"
+#line 333 "pir.l"
{ return TK_STRING; }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 318 "pir.l"
+#line 335 "pir.l"
{ return TK_ANNOTATE; }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 319 "pir.l"
+#line 336 "pir.l"
{ return TK_SET_ARG; }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 320 "pir.l"
+#line 337 "pir.l"
{ return TK_CONST; }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 321 "pir.l"
+#line 338 "pir.l"
{ return TK_END; }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 322 "pir.l"
+#line 339 "pir.l"
{ return TK_FILE; }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 324 "pir.l"
+#line 341 "pir.l"
{ return TK_GET_RESULTS; }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 325 "pir.l"
+#line 342 "pir.l"
{ return TK_GLOBALCONST; }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 326 "pir.l"
+#line 343 "pir.l"
{ return TK_HLL; }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 327 "pir.l"
+#line 344 "pir.l"
{ return TK_HLL_MAP; }
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 328 "pir.l"
+#line 345 "pir.l"
{ return TK_INVOCANT; }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 329 "pir.l"
+#line 346 "pir.l"
{ return TK_LEX; }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 330 "pir.l"
+#line 347 "pir.l"
{ return TK_LINE; }
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 331 "pir.l"
+#line 348 "pir.l"
{ return TK_LOADLIB; }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 332 "pir.l"
+#line 349 "pir.l"
{ return TK_LOCAL; }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 334 "pir.l"
+#line 351 "pir.l"
{ return TK_METH_CALL; }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 335 "pir.l"
+#line 352 "pir.l"
{ return TK_NAMESPACE; }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 336 "pir.l"
+#line 353 "pir.l"
{ return TK_NCI_CALL; }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 337 "pir.l"
+#line 354 "pir.l"
{ return TK_PARAM; }
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 338 "pir.l"
+#line 355 "pir.l"
{ return TK_BEGIN_CALL; }
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 339 "pir.l"
+#line 356 "pir.l"
{ return TK_BEGIN_RETURN; }
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 340 "pir.l"
+#line 357 "pir.l"
{ return TK_BEGIN_YIELD; }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 341 "pir.l"
+#line 358 "pir.l"
{ return TK_CALL; }
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 342 "pir.l"
+#line 359 "pir.l"
{ return TK_END_CALL; }
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 343 "pir.l"
+#line 360 "pir.l"
{ return TK_END_RETURN; }
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 344 "pir.l"
+#line 361 "pir.l"
{ return TK_END_YIELD; }
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 345 "pir.l"
+#line 362 "pir.l"
{ return TK_GET_RESULT; }
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 346 "pir.l"
+#line 363 "pir.l"
{ return TK_RETURN; }
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 347 "pir.l"
+#line 364 "pir.l"
{ return TK_SUB; }
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 348 "pir.l"
+#line 365 "pir.l"
{ return TK_YIELD; }
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 349 "pir.l"
+#line 366 "pir.l"
{ return TK_SET_RETURN; }
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 350 "pir.l"
+#line 367 "pir.l"
{ return TK_SET_YIELD; }
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 351 "pir.l"
+#line 368 "pir.l"
{ return TK_TAILCALL; }
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 354 "pir.l"
+#line 371 "pir.l"
{ /* make sure these are not used outside macro defs */
yypirerror(yyscanner, yypirget_extra(yyscanner),
"cannot use '%s' outside of macro definitions", yytext);
@@ -2445,124 +2472,124 @@
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 361 "pir.l"
+#line 378 "pir.l"
{ return TK_FLAG_ANON; }
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 362 "pir.l"
+#line 379 "pir.l"
{ return TK_FLAG_INIT; }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 363 "pir.l"
+#line 380 "pir.l"
{ return TK_FLAG_LOAD; }
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 364 "pir.l"
+#line 381 "pir.l"
{ return TK_FLAG_POSTCOMP; }
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 365 "pir.l"
+#line 382 "pir.l"
{ return TK_FLAG_IMMEDIATE; }
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 366 "pir.l"
+#line 383 "pir.l"
{ return TK_FLAG_MAIN; }
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 367 "pir.l"
+#line 384 "pir.l"
{ return TK_FLAG_METHOD; }
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 368 "pir.l"
+#line 385 "pir.l"
{ return TK_FLAG_LEX; }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 369 "pir.l"
+#line 386 "pir.l"
{ return TK_FLAG_OUTER; }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 370 "pir.l"
+#line 387 "pir.l"
{ return TK_FLAG_VTABLE; }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 371 "pir.l"
+#line 388 "pir.l"
{ return TK_FLAG_MULTI; }
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 372 "pir.l"
+#line 389 "pir.l"
{ return TK_FLAG_SUBID; }
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 373 "pir.l"
+#line 390 "pir.l"
{ return TK_FLAG_INSTANCEOF; }
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 374 "pir.l"
+#line 391 "pir.l"
{ return TK_FLAG_NSENTRY; }
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 376 "pir.l"
+#line 393 "pir.l"
{ return TK_FLAG_UNIQUE_REG; }
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 377 "pir.l"
+#line 394 "pir.l"
{ return TK_FLAG_OPTIONAL; }
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 378 "pir.l"
+#line 395 "pir.l"
{ return TK_FLAG_OPT_FLAG; }
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 379 "pir.l"
+#line 396 "pir.l"
{ return TK_FLAG_SLURPY; }
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 380 "pir.l"
+#line 397 "pir.l"
{ return TK_FLAG_NAMED; }
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 381 "pir.l"
+#line 398 "pir.l"
{ return TK_FLAG_FLAT; }
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 382 "pir.l"
+#line 399 "pir.l"
{ return TK_FLAG_INVOCANT; }
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 383 "pir.l"
+#line 400 "pir.l"
{ return TK_FLAG_LOOKAHEAD; }
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 385 "pir.l"
+#line 402 "pir.l"
{ yypirerror(yyscanner, yypirget_extra(yyscanner),
"unrecognized flag: '%s'", yytext);
}
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 389 "pir.l"
+#line 406 "pir.l"
{ /* XXX this is a bit hacky. First the string is unescaped, but that
* returns a STRING * object; that's not what we want at this point.
* So, convert it back to a C string, and return that. Later, that
@@ -2582,7 +2609,7 @@
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 406 "pir.l"
+#line 423 "pir.l"
{ /* copy the string, remove the quotes. */
yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext + 1, yyleng - 2);
return TK_STRINGC;
@@ -2590,7 +2617,7 @@
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 411 "pir.l"
+#line 428 "pir.l"
{ /* XXX these double-quoted strings are not unescaped (yet) */
/* parse yytext, which contains the charset, a ':', and the quoted string */
char *colon = strchr(yytext, ':');
@@ -2622,7 +2649,7 @@
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 440 "pir.l"
+#line 457 "pir.l"
{ /* XXX these double-quoted strings are not unescaped (yet) */
/* parse yytext, which contains the encoding, a ':', a charset,
* a ':', and the quoted string
@@ -2672,27 +2699,27 @@
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 488 "pir.l"
+#line 505 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_PREG; }
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 489 "pir.l"
+#line 506 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_SREG; }
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 490 "pir.l"
+#line 507 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_NREG; }
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 491 "pir.l"
+#line 508 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_IREG; }
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 493 "pir.l"
+#line 510 "pir.l"
{ /* make the label Id available in the parser. remove the ":" first. */
yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext, yyleng - 1);
return TK_LABEL;
@@ -2700,7 +2727,7 @@
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 498 "pir.l"
+#line 515 "pir.l"
{ /* give a warning when using PASM registers as PIR identifiers */
lexer_state * const lexer = yypirget_extra(yyscanner);
@@ -2715,7 +2742,7 @@
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 510 "pir.l"
+#line 527 "pir.l"
{ /* identifier; can be a global (sub or const), local or parrot op */
lexer_state * const lexer = yypirget_extra(yyscanner);
constdecl * const c = find_global_constant(lexer, yytext);
@@ -2746,27 +2773,27 @@
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 538 "pir.l"
+#line 555 "pir.l"
{ yylval->dval = atof(yytext); return TK_NUMC; }
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 539 "pir.l"
+#line 556 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 540 "pir.l"
+#line 557 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 541 "pir.l"
+#line 558 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 542 "pir.l"
+#line 559 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 127:
@@ -2774,7 +2801,7 @@
yyg->yy_c_buf_p = yy_cp = yy_bp + 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 544 "pir.l"
+#line 561 "pir.l"
{ /* Make sure the dot is followed by a character that
* starts a method object. $ for registers,
* quotes for quoted strings, and letters for identifiers.
@@ -2786,7 +2813,7 @@
case 128:
/* rule 128 can match eol */
YY_RULE_SETUP
-#line 552 "pir.l"
+#line 569 "pir.l"
{ yypirerror(yyscanner, yypirget_extra(yyscanner),
"no space allowed before a methodcall dot, "
"or space expected after the '.' operator");
@@ -2809,7 +2836,7 @@
case YY_STATE_EOF(SCANSTR):
-#line 574 "pir.l"
+#line 591 "pir.l"
{ /* switch back from .macro_const buffer to file. */
lexer_state * const lexer = yypirget_extra(yyscanner);
yy_pop_state(yyscanner);
@@ -2817,7 +2844,7 @@
}
YY_BREAK
case YY_STATE_EOF(SCANMACRO):
-#line 580 "pir.l"
+#line 597 "pir.l"
{ /* override the default <<EOF>> action; go back to normal state and
* switch back to the saved file.
*/
@@ -2843,7 +2870,7 @@
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 603 "pir.l"
+#line 620 "pir.l"
{ /* when scanning a macro body, the @ marker indicates the {IDENT} must
* be munged.
*/
@@ -2854,14 +2881,14 @@
}
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 612 "pir.l"
+#line 629 "pir.l"
{ /* end of file, stop scanning. */
yyterminate();
}
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 616 "pir.l"
+#line 633 "pir.l"
{ /* any character not covered in the rules above is an error. */
yypirerror(yyscanner, yypirget_extra(yyscanner),
"unexpected character: '%c'", yytext[0]);
@@ -2882,7 +2909,7 @@
case 131:
YY_RULE_SETUP
-#line 638 "pir.l"
+#line 655 "pir.l"
{
yy_push_state(MACROCONST, yyscanner);
return TK_MACRO_CONST;
@@ -2890,7 +2917,7 @@
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 643 "pir.l"
+#line 660 "pir.l"
{
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
return TK_IDENT;
@@ -2898,7 +2925,7 @@
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 648 "pir.l"
+#line 665 "pir.l"
{
/* only these tokens can be macro constant values */
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
@@ -2908,19 +2935,19 @@
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 655 "pir.l"
+#line 672 "pir.l"
{ /* ignore whitespace */ }
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 656 "pir.l"
+#line 673 "pir.l"
{
yypirerror(yyscanner, yypirget_extra(yyscanner),
"unknown character: '%c'", yytext[0]);
}
YY_BREAK
case YY_STATE_EOF(MACROCONST):
-#line 660 "pir.l"
+#line 677 "pir.l"
{
yypirerror(yyscanner, yypirget_extra(yyscanner),
"read end of file during .macro_const definition");
@@ -2933,7 +2960,7 @@
case 136:
YY_RULE_SETUP
-#line 671 "pir.l"
+#line 688 "pir.l"
{ /* start a macro definition */
yy_push_state(MACROHEAD, yyscanner);
return TK_MACRO;
@@ -2941,12 +2968,12 @@
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 676 "pir.l"
+#line 693 "pir.l"
{ /* ignore whitespace */ }
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 677 "pir.l"
+#line 694 "pir.l"
{
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
return TK_IDENT;
@@ -2954,23 +2981,23 @@
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 682 "pir.l"
+#line 699 "pir.l"
{ return '('; }
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 683 "pir.l"
+#line 700 "pir.l"
{ return ')'; }
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 684 "pir.l"
+#line 701 "pir.l"
{ return ','; }
YY_BREAK
case 142:
/* rule 142 can match eol */
YY_RULE_SETUP
-#line 686 "pir.l"
+#line 703 "pir.l"
{ /* a set of continuous newlines yields a single newline token. */
yy_pop_state(yyscanner); /* remove MACROHEAD state */
yy_push_state(MACROBODY, yyscanner); /* enter MACROBODY state */
@@ -2988,7 +3015,7 @@
case 143:
YY_RULE_SETUP
-#line 702 "pir.l"
+#line 719 "pir.l"
{ /* .foo; it can be a macro, macro_local, or just $P0.foo(),
* but we need to check that.
*/
@@ -3045,7 +3072,7 @@
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 756 "pir.l"
+#line 773 "pir.l"
{ /* expand a .macro_const or parameter in argument list */
lexer_state * const lexer = yypirget_extra(yyscanner);
macro_def * const macro = find_macro(lexer->macros, yytext + 1);
@@ -3076,7 +3103,7 @@
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 784 "pir.l"
+#line 801 "pir.l"
{
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
return TK_MACRO_ARG_IDENT;
@@ -3084,7 +3111,7 @@
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 789 "pir.l"
+#line 806 "pir.l"
{
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
return TK_MACRO_ARG_OTHER;
@@ -3092,22 +3119,22 @@
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 794 "pir.l"
+#line 811 "pir.l"
{ /* ignore whitespace */ }
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 795 "pir.l"
+#line 812 "pir.l"
{ return ','; }
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 796 "pir.l"
+#line 813 "pir.l"
{ return '('; }
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 797 "pir.l"
+#line 814 "pir.l"
{
yy_pop_state(yyscanner); /* leave MACROEXPAND state */
return ')';
@@ -3115,14 +3142,14 @@
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 802 "pir.l"
+#line 819 "pir.l"
{
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
return TK_MACRO_ARG_OTHER;
}
YY_BREAK
case YY_STATE_EOF(STRINGEXPAND):
-#line 807 "pir.l"
+#line 824 "pir.l"
{
lexer_state * const lexer = yypirget_extra(yyscanner);
yy_pop_state(yyscanner);
@@ -3131,23 +3158,23 @@
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 813 "pir.l"
+#line 830 "pir.l"
{ return '{'; }
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 814 "pir.l"
+#line 831 "pir.l"
{ return '}'; }
YY_BREAK
case 154:
/* rule 154 can match eol */
YY_RULE_SETUP
-#line 816 "pir.l"
+#line 833 "pir.l"
{ yylval->sval = "\n"; return TK_NL; }
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 818 "pir.l"
+#line 835 "pir.l"
{ yypirerror(yyscanner, yypirget_extra(yyscanner),
"unknown character in macro expansion: %c", yytext[0]);
}
@@ -3159,7 +3186,7 @@
case 156:
YY_RULE_SETUP
-#line 829 "pir.l"
+#line 846 "pir.l"
{ /* give a warning if the right flag is set */
/*
lexer_state * const lexer = yypirget_extra(yyscanner);
@@ -3175,7 +3202,7 @@
YY_BREAK
case 157:
YY_RULE_SETUP
-#line 843 "pir.l"
+#line 860 "pir.l"
{
yy_push_state(MACROLOCAL, yyscanner);
return TK_MACRO_LOCAL;
@@ -3183,27 +3210,27 @@
YY_BREAK
case 158:
YY_RULE_SETUP
-#line 848 "pir.l"
+#line 865 "pir.l"
{ return TK_INT; }
YY_BREAK
case 159:
YY_RULE_SETUP
-#line 849 "pir.l"
+#line 866 "pir.l"
{ return TK_PMC; }
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 850 "pir.l"
+#line 867 "pir.l"
{ return TK_NUM; }
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 851 "pir.l"
+#line 868 "pir.l"
{ return TK_STRING; }
YY_BREAK
case 162:
YY_RULE_SETUP
-#line 853 "pir.l"
+#line 870 "pir.l"
{ /* normal .macro_local */
lexer_state * const lexer = yypirget_extra(yyscanner);
/* reserve space for {IDENT}, the @ marker and the NULL char. */
@@ -3221,7 +3248,7 @@
YY_BREAK
case 163:
YY_RULE_SETUP
-#line 868 "pir.l"
+#line 885 "pir.l"
{ /* declare a .macro_local based on a parameter */
lexer_state * const lexer = yypirget_extra(yyscanner);
@@ -3238,7 +3265,7 @@
YY_BREAK
case 164:
YY_RULE_SETUP
-#line 882 "pir.l"
+#line 899 "pir.l"
{ /* .$foo */
lexer_state * const lexer = yypirget_extra(yyscanner);
macro_table * const table = peek_macro_table(lexer);
@@ -3270,7 +3297,7 @@
YY_BREAK
case 165:
YY_RULE_SETUP
-#line 911 "pir.l"
+#line 928 "pir.l"
{ /* expanding a .macro_local using a macro parameter value */
lexer_state * const lexer = yypirget_extra(yyscanner);
char const * const paramname = dupstrn(lexer, yytext + 1, yyleng - 2);
@@ -3298,13 +3325,13 @@
YY_BREAK
case 166:
YY_RULE_SETUP
-#line 936 "pir.l"
+#line 953 "pir.l"
{ /* ignore whitespace */ }
YY_BREAK
case 167:
/* rule 167 can match eol */
YY_RULE_SETUP
-#line 938 "pir.l"
+#line 955 "pir.l"
{ /* newline after .macro_local <type> <ident> line */
yy_pop_state(yyscanner);
return TK_NL;
@@ -3312,7 +3339,7 @@
YY_BREAK
case 168:
YY_RULE_SETUP
-#line 943 "pir.l"
+#line 960 "pir.l"
{ /* this state is only used for declaring .macro_locals */
yypirerror(yyscanner, yypirget_extra(yyscanner),
"unknown character '%c' when declaring .macro_local", yytext[0]);
@@ -3325,7 +3352,7 @@
case 169:
YY_RULE_SETUP
-#line 953 "pir.l"
+#line 970 "pir.l"
{
yy_push_state(MACROLABEL, yyscanner);
return TK_MACRO_LABEL;
@@ -3333,7 +3360,7 @@
YY_BREAK
case 170:
YY_RULE_SETUP
-#line 958 "pir.l"
+#line 975 "pir.l"
{ /* if the "$" is there, it's a macro label using a macro
* parameter's value; otherwise it's a normal macro label
*/
@@ -3354,7 +3381,7 @@
case 171:
/* rule 171 can match eol */
YY_RULE_SETUP
-#line 976 "pir.l"
+#line 993 "pir.l"
{ /* the newline character after a ".macro_label $foo:" declaration */
yy_pop_state(yyscanner); /* leave MACROLABEL state */
return TK_NL;
@@ -3362,7 +3389,7 @@
YY_BREAK
case 172:
YY_RULE_SETUP
-#line 982 "pir.l"
+#line 999 "pir.l"
{ /* scan a label when expanding a buffer; declared as .macro_label */
lexer_state * const lexer = yypirget_extra(yyscanner);
char const * const label = dupstrn(lexer, yytext, yyleng - 2);
@@ -3372,7 +3399,7 @@
YY_BREAK
case 173:
YY_RULE_SETUP
-#line 989 "pir.l"
+#line 1006 "pir.l"
{ /* scan a label when expanding macro; was a macro parameter */
lexer_state * const lexer = yypirget_extra(yyscanner);
char const * const paramname = dupstrn(lexer, yytext + 1, yyleng - 3);
@@ -3407,12 +3434,12 @@
case 174:
/* rule 174 can match eol */
YY_RULE_SETUP
-#line 1022 "pir.l"
+#line 1039 "pir.l"
{ store_macro_char(CURRENT_MACRO(yypirget_extra(yyscanner)), '\n'); }
YY_BREAK
case 175:
YY_RULE_SETUP
-#line 1024 "pir.l"
+#line 1041 "pir.l"
{
yy_pop_state(yyscanner); /* leave MACROBODY state */
return TK_ENDM;
@@ -3420,13 +3447,13 @@
YY_BREAK
case 176:
YY_RULE_SETUP
-#line 1029 "pir.l"
+#line 1046 "pir.l"
{ /* store everything else */
store_macro_char(CURRENT_MACRO(yypirget_extra(yyscanner)), yytext[0]);
}
YY_BREAK
case YY_STATE_EOF(MACROBODY):
-#line 1033 "pir.l"
+#line 1050 "pir.l"
{ /* catch run-away macro bodys */
yypirerror(yyscanner, yypirget_extra(yyscanner),
"read end of file while reading macro body");
@@ -3458,67 +3485,67 @@
case 177:
YY_RULE_SETUP
-#line 1065 "pir.l"
+#line 1082 "pir.l"
{ return ','; }
YY_BREAK
case 178:
YY_RULE_SETUP
-#line 1066 "pir.l"
+#line 1083 "pir.l"
{ return '['; }
YY_BREAK
case 179:
YY_RULE_SETUP
-#line 1067 "pir.l"
+#line 1084 "pir.l"
{ return ']'; }
YY_BREAK
case 180:
YY_RULE_SETUP
-#line 1069 "pir.l"
+#line 1086 "pir.l"
{ return TK_FLAG_MAIN; }
YY_BREAK
case 181:
YY_RULE_SETUP
-#line 1070 "pir.l"
+#line 1087 "pir.l"
{ return TK_FLAG_LOAD; }
YY_BREAK
case 182:
YY_RULE_SETUP
-#line 1071 "pir.l"
+#line 1088 "pir.l"
{ return TK_FLAG_INIT; }
YY_BREAK
case 183:
YY_RULE_SETUP
-#line 1072 "pir.l"
+#line 1089 "pir.l"
{ return TK_FLAG_ANON; }
YY_BREAK
case 184:
YY_RULE_SETUP
-#line 1073 "pir.l"
+#line 1090 "pir.l"
{ return TK_FLAG_POSTCOMP; }
YY_BREAK
case 185:
YY_RULE_SETUP
-#line 1074 "pir.l"
+#line 1091 "pir.l"
{ return TK_FLAG_IMMEDIATE; }
YY_BREAK
case 186:
YY_RULE_SETUP
-#line 1076 "pir.l"
+#line 1093 "pir.l"
{ return TK_PCC_SUB; }
YY_BREAK
case 187:
YY_RULE_SETUP
-#line 1077 "pir.l"
+#line 1094 "pir.l"
{ return TK_LEX; }
YY_BREAK
case 188:
YY_RULE_SETUP
-#line 1078 "pir.l"
+#line 1095 "pir.l"
{ return TK_NAMESPACE; }
YY_BREAK
case 189:
YY_RULE_SETUP
-#line 1080 "pir.l"
+#line 1097 "pir.l"
{
yy_push_state(MACROHEAD, yyscanner);
return TK_MACRO;
@@ -3526,7 +3553,7 @@
YY_BREAK
case 190:
YY_RULE_SETUP
-#line 1085 "pir.l"
+#line 1102 "pir.l"
{
yy_push_state(MACROCONST, yyscanner);
return TK_MACRO_CONST;
@@ -3534,17 +3561,17 @@
YY_BREAK
case 191:
YY_RULE_SETUP
-#line 1090 "pir.l"
+#line 1107 "pir.l"
{ return TK_LINE; }
YY_BREAK
case 192:
YY_RULE_SETUP
-#line 1091 "pir.l"
+#line 1108 "pir.l"
{ return TK_FILE; }
YY_BREAK
case 193:
YY_RULE_SETUP
-#line 1094 "pir.l"
+#line 1111 "pir.l"
{ /* macro expansion in PASM mode. */
lexer_state * const lexer = yypirget_extra(yyscanner);
macro_def * const macro = find_macro(lexer->macros, yytext + 1);
@@ -3581,7 +3608,7 @@
YY_BREAK
case 194:
YY_RULE_SETUP
-#line 1128 "pir.l"
+#line 1145 "pir.l"
{ /* a label in PASM */
yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext, yyleng - 1);
return TK_LABEL;
@@ -3589,34 +3616,34 @@
YY_BREAK
case 195:
YY_RULE_SETUP
-#line 1133 "pir.l"
+#line 1150 "pir.l"
{ yypirerror(yyscanner, yypirget_extra(yyscanner),
"symbolic registers are not allowed in PASM mode");
}
YY_BREAK
case 196:
YY_RULE_SETUP
-#line 1136 "pir.l"
+#line 1153 "pir.l"
{ yylval->ival = atoi(yytext + 1); return TK_PREG; }
YY_BREAK
case 197:
YY_RULE_SETUP
-#line 1137 "pir.l"
+#line 1154 "pir.l"
{ yylval->ival = atoi(yytext + 1); return TK_NREG; }
YY_BREAK
case 198:
YY_RULE_SETUP
-#line 1138 "pir.l"
+#line 1155 "pir.l"
{ yylval->ival = atoi(yytext + 1); return TK_IREG; }
YY_BREAK
case 199:
YY_RULE_SETUP
-#line 1139 "pir.l"
+#line 1156 "pir.l"
{ yylval->ival = atoi(yytext + 1); return TK_SREG; }
YY_BREAK
case 200:
YY_RULE_SETUP
-#line 1141 "pir.l"
+#line 1158 "pir.l"
{ /* can be a parrot op or a label; the check is done in the parser. */
yylval->sval = dupstr(yypirget_extra(yyscanner), yytext);
return TK_IDENT;
@@ -3624,32 +3651,32 @@
YY_BREAK
case 201:
YY_RULE_SETUP
-#line 1146 "pir.l"
+#line 1163 "pir.l"
{ yylval->dval = atof(yytext); return TK_NUMC; }
YY_BREAK
case 202:
YY_RULE_SETUP
-#line 1147 "pir.l"
+#line 1164 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 203:
YY_RULE_SETUP
-#line 1148 "pir.l"
+#line 1165 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 204:
YY_RULE_SETUP
-#line 1149 "pir.l"
+#line 1166 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 205:
YY_RULE_SETUP
-#line 1150 "pir.l"
+#line 1167 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 206:
YY_RULE_SETUP
-#line 1152 "pir.l"
+#line 1169 "pir.l"
{ /* copy the string, remove the quotes. */
yylval->sval = dupstrn(yypirget_extra(yyscanner), yytext + 1, yyleng - 2);
return TK_STRINGC;
@@ -3657,32 +3684,32 @@
YY_BREAK
case 207:
YY_RULE_SETUP
-#line 1157 "pir.l"
+#line 1174 "pir.l"
{ /* ignore whitespace */ }
YY_BREAK
case 208:
/* rule 208 can match eol */
YY_RULE_SETUP
-#line 1159 "pir.l"
+#line 1176 "pir.l"
{ return TK_NL; }
YY_BREAK
case 209:
YY_RULE_SETUP
-#line 1161 "pir.l"
+#line 1178 "pir.l"
{ yypirerror(yyscanner, yypirget_extra(yyscanner),
"unrecognized character: %c", yytext[0]);
}
YY_BREAK
case YY_STATE_EOF(PASM):
-#line 1164 "pir.l"
+#line 1181 "pir.l"
{ yyterminate(); }
YY_BREAK
case 210:
YY_RULE_SETUP
-#line 1166 "pir.l"
+#line 1183 "pir.l"
ECHO;
YY_BREAK
-#line 3686 "pirlexer.c"
+#line 3713 "pirlexer.c"
case YY_STATE_EOF(MACROHEAD):
case YY_STATE_EOF(MACROLOCAL):
case YY_STATE_EOF(MACROLABEL):
@@ -3932,7 +3959,7 @@
/* Read in more data. */
YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
- yyg->yy_n_chars, num_to_read );
+ yyg->yy_n_chars, (size_t) num_to_read );
YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars;
}
@@ -3956,6 +3983,14 @@
else
ret_val = EOB_ACT_CONTINUE_SCAN;
+ if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yypirrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
+
yyg->yy_n_chars += number_to_move;
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR;
YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
@@ -4430,6 +4465,8 @@
yyg->yy_buffer_stack = (struct yy_buffer_state**)yypiralloc
(num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
+ if ( ! yyg->yy_buffer_stack )
+ YY_FATAL_ERROR( "out of dynamic memory in yypirensure_buffer_stack()" );
memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*));
@@ -4448,6 +4485,8 @@
(yyg->yy_buffer_stack,
num_to_alloc * sizeof(struct yy_buffer_state*)
, yyscanner);
+ if ( ! yyg->yy_buffer_stack )
+ YY_FATAL_ERROR( "out of dynamic memory in yypirensure_buffer_stack()" );
/* zero only the new slots.*/
memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*));
@@ -4496,7 +4535,7 @@
/* %if-c-only */
/** Setup the input buffer state to scan a string. The next call to yypirlex() will
* scan from a @e copy of @a str.
- * @param str a NUL-terminated string to scan
+ * @param yystr a NUL-terminated string to scan
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
* @note If you want to scan bytes that may contain NUL values, then use
@@ -4569,8 +4608,7 @@
yyg->yy_start_stack = (int *) yypirrealloc((void *) yyg->yy_start_stack,new_size ,yyscanner );
if ( ! yyg->yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
+ YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
}
yyg->yy_start_stack[yyg->yy_start_stack_ptr++] = YY_START;
@@ -4834,7 +4872,43 @@
return yy_init_globals ( *ptr_yy_globals );
}
-/* %endif */
+/* yypirlex_init_extra has the same functionality as yypirlex_init, but follows the
+ * convention of taking the scanner as the last argument. Note however, that
+ * this is a *pointer* to a scanner, as it will be allocated by this call (and
+ * is the reason, too, why this function also must handle its own declaration).
+ * The user defined value in the first argument will be available to yypiralloc in
+ * the yyextra field.
+ */
+
+int yypirlex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals )
+
+{
+ struct yyguts_t dummy_yyguts;
+
+ yypirset_extra (yy_user_defined, &dummy_yyguts);
+
+ if (ptr_yy_globals == NULL){
+ errno = EINVAL;
+ return 1;
+ }
+
+ *ptr_yy_globals = (yyscan_t) yypiralloc ( sizeof( struct yyguts_t ), &dummy_yyguts );
+
+ if (*ptr_yy_globals == NULL){
+ errno = ENOMEM;
+ return 1;
+ }
+
+ /* By setting to 0xAA, we expose bugs in
+ yy_init_globals. Leave at 0x00 for releases. */
+ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));
+
+ yypirset_extra (yy_user_defined, *ptr_yy_globals);
+
+ return yy_init_globals ( *ptr_yy_globals );
+}
+
+/* %endif if-c-only */
/* %if-c-only */
static int yy_init_globals (yyscan_t yyscanner)
@@ -4936,7 +5010,7 @@
/* %ok-for-header */
-#line 1166 "pir.l"
+#line 1183 "pir.l"
Modified: trunk/compilers/pirc/src/pirlexer.h
==============================================================================
--- trunk/compilers/pirc/src/pirlexer.h (original)
+++ trunk/compilers/pirc/src/pirlexer.h Tue Jan 20 03:10:03 2009
@@ -48,10 +48,12 @@
/* A lexical scanner generated by flex */
+/* %not-for-header */
+
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 33
+#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -89,7 +91,7 @@
/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-#if __STDC_VERSION__ >= 199901L
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
* if you want the limit (max/min) macros for int types.
@@ -157,11 +159,12 @@
#else /* ! __cplusplus */
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
#ifdef YY_USE_CONST
@@ -193,12 +196,16 @@
#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)
#define yy_flex_debug yyg->yy_flex_debug_r
-int yypirlex_init (yyscan_t* scanner);
/* %endif */
/* %if-not-reentrant */
/* %endif */
+/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
+#define YY_BUF_SIZE 16384
+#endif
+
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
@@ -212,14 +219,9 @@
/* %endif */
/* %endif */
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-
#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
-typedef unsigned int yy_size_t;
+typedef size_t yy_size_t;
#endif
#ifndef YY_STRUCT_YY_BUFFER_STATE
@@ -363,8 +365,14 @@
/* %if-reentrant */
+int yypirlex_init (yyscan_t* scanner);
+
+int yypirlex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner);
+
/* %endif */
+/* %endif End reentrant structures and macros. */
+
/* Accessor methods to globals.
These are made visible to non-reentrant scanners for convenience. */
@@ -401,7 +409,6 @@
void yypirset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner );
/* %endif */
-/* %endif End reentrant structures and macros. */
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -460,9 +467,11 @@
#define YY_DECL_IS_OURS 1
/* %if-c-only Standard (non-C++) definition */
-extern int yypirlex (YYSTYPE * yylval_param ,yyscan_t yyscanner);
+extern int yypirlex \
+ (YYSTYPE * yylval_param ,yyscan_t yyscanner);
-#define YY_DECL int yypirlex (YYSTYPE * yylval_param , yyscan_t yyscanner)
+#define YY_DECL int yypirlex \
+ (YYSTYPE * yylval_param , yyscan_t yyscanner)
/* %endif */
/* %if-c++-only C++ definition */
/* %endif */
@@ -492,9 +501,9 @@
#undef YY_DECL
#endif
-#line 1166 "pir.l"
+#line 1183 "pir.l"
-#line 499 "pirlexer.h"
+#line 508 "pirlexer.h"
#undef yypirIN_HEADER
#endif /* yypirHEADER_H */
Modified: trunk/compilers/pirc/src/pirparser.c
==============================================================================
--- trunk/compilers/pirc/src/pirparser.c (original)
+++ trunk/compilers/pirc/src/pirparser.c Tue Jan 20 03:10:03 2009
@@ -1073,38 +1073,38 @@
851, 857, 858, 868, 870, 873, 874, 875, 876, 877,
878, 879, 880, 881, 882, 883, 884, 885, 886, 887,
888, 891, 898, 901, 906, 907, 912, 913, 916, 918,
- 926, 934, 935, 937, 940, 946, 947, 956, 957, 958,
- 959, 967, 971, 975, 984, 991, 997, 1000, 1001, 1004,
- 1013, 1020, 1023, 1024, 1027, 1028, 1031, 1067, 1069, 1073,
- 1075, 1080, 1082, 1086, 1109, 1113, 1115, 1124, 1135, 1147,
- 1157, 1160, 1161, 1164, 1173, 1182, 1187, 1192, 1213, 1218,
- 1259, 1277, 1284, 1289, 1300, 1311, 1322, 1333, 1338, 1343,
- 1348, 1358, 1377, 1411, 1413, 1415, 1417, 1419, 1421, 1423,
- 1425, 1430, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453,
- 1455, 1457, 1469, 1476, 1478, 1484, 1486, 1488, 1490, 1492,
- 1494, 1496, 1498, 1500, 1502, 1504, 1535, 1561, 1569, 1578,
- 1587, 1589, 1591, 1593, 1595, 1599, 1604, 1606, 1611, 1612,
- 1615, 1616, 1619, 1620, 1623, 1631, 1635, 1637, 1641, 1645,
- 1646, 1649, 1664, 1668, 1669, 1672, 1684, 1685, 1689, 1691,
- 1695, 1699, 1701, 1703, 1709, 1710, 1715, 1716, 1720, 1722,
- 1731, 1733, 1737, 1741, 1743, 1745, 1749, 1750, 1753, 1773,
- 1780, 1782, 1792, 1809, 1811, 1813, 1817, 1826, 1831, 1838,
- 1839, 1843, 1845, 1849, 1851, 1856, 1857, 1861, 1863, 1865,
- 1867, 1877, 1881, 1882, 1883, 1884, 1887, 1892, 1903, 1910,
- 1915, 1916, 1920, 1922, 1926, 1927, 1930, 1934, 1938, 1942,
- 1951, 1961, 1962, 1967, 1969, 1974, 1979, 1980, 1984, 1986,
- 1990, 1996, 1997, 2001, 2003, 2011, 2012, 2016, 2020, 2023,
- 2027, 2028, 2031, 2035, 2036, 2039, 2043, 2045, 2047, 2049,
- 2053, 2057, 2058, 2071, 2072, 2076, 2077, 2078, 2081, 2082,
- 2085, 2086, 2087, 2088, 2089, 2090, 2093, 2094, 2095, 2096,
- 2104, 2107, 2108, 2121, 2122, 2123, 2124, 2128, 2129, 2132,
- 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2142, 2143, 2144,
- 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156,
- 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166,
- 2167, 2168, 2169, 2175, 2176, 2177, 2178, 2179, 2180, 2181,
- 2182, 2183, 2184, 2185, 2186, 2198, 2206, 2210, 2211, 2214,
- 2215, 2216, 2217, 2218, 2219, 2222, 2224, 2225, 2228, 2229,
- 2232, 2236, 2241
+ 926, 934, 935, 937, 940, 946, 947, 956, 958, 959,
+ 960, 968, 972, 976, 985, 992, 998, 1001, 1002, 1005,
+ 1014, 1021, 1024, 1025, 1028, 1029, 1032, 1068, 1070, 1074,
+ 1076, 1081, 1083, 1087, 1110, 1114, 1116, 1125, 1136, 1148,
+ 1158, 1161, 1162, 1165, 1174, 1183, 1188, 1193, 1214, 1219,
+ 1260, 1278, 1285, 1290, 1301, 1312, 1323, 1334, 1339, 1344,
+ 1349, 1359, 1378, 1412, 1414, 1416, 1418, 1420, 1422, 1424,
+ 1426, 1431, 1440, 1442, 1444, 1446, 1448, 1450, 1452, 1454,
+ 1456, 1458, 1470, 1477, 1479, 1485, 1487, 1489, 1491, 1493,
+ 1495, 1497, 1499, 1501, 1503, 1505, 1536, 1562, 1570, 1579,
+ 1588, 1590, 1592, 1594, 1596, 1600, 1605, 1607, 1612, 1613,
+ 1616, 1617, 1620, 1621, 1624, 1632, 1636, 1638, 1642, 1646,
+ 1647, 1650, 1665, 1669, 1670, 1673, 1685, 1686, 1690, 1692,
+ 1696, 1700, 1702, 1704, 1710, 1711, 1716, 1717, 1721, 1723,
+ 1732, 1734, 1738, 1742, 1744, 1746, 1750, 1751, 1754, 1774,
+ 1781, 1783, 1793, 1810, 1812, 1814, 1818, 1827, 1832, 1839,
+ 1840, 1844, 1846, 1850, 1852, 1857, 1858, 1862, 1864, 1866,
+ 1868, 1878, 1882, 1883, 1884, 1885, 1888, 1893, 1904, 1911,
+ 1916, 1917, 1921, 1923, 1927, 1928, 1931, 1935, 1939, 1943,
+ 1952, 1962, 1963, 1968, 1970, 1975, 1980, 1981, 1985, 1987,
+ 1991, 1997, 1998, 2002, 2004, 2012, 2013, 2017, 2021, 2024,
+ 2028, 2029, 2032, 2036, 2037, 2040, 2044, 2046, 2048, 2050,
+ 2054, 2058, 2059, 2072, 2073, 2077, 2078, 2079, 2082, 2083,
+ 2086, 2087, 2088, 2089, 2090, 2091, 2094, 2095, 2096, 2097,
+ 2105, 2108, 2109, 2122, 2123, 2124, 2125, 2129, 2130, 2133,
+ 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2143, 2144, 2145,
+ 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, 2157,
+ 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167,
+ 2168, 2169, 2170, 2176, 2177, 2178, 2179, 2180, 2181, 2182,
+ 2183, 2184, 2185, 2186, 2187, 2199, 2207, 2211, 2212, 2215,
+ 2216, 2217, 2218, 2219, 2220, 2223, 2225, 2226, 2229, 2230,
+ 2233, 2237, 2242
};
#endif
@@ -3027,18 +3027,23 @@
;}
break;
+ case 127:
+#line 957 "pir.y"
+ { (yyval.sval) = "\n"; ;}
+ break;
+
case 130:
-#line 960 "pir.y"
+#line 961 "pir.y"
{ (yyval.sval) = expand_macro(yyscanner, (yyvsp[(1) - (2)].mval), (yyvsp[(2) - (2)].pval)); ;}
break;
case 131:
-#line 968 "pir.y"
+#line 969 "pir.y"
{ set_instr(lexer, NULL); ;}
break;
case 133:
-#line 976 "pir.y"
+#line 977 "pir.y"
{
if (lexer->parse_errors > MAX_NUM_ERRORS)
panic(lexer, "Too many errors. Compilation aborted.\n");
@@ -3048,7 +3053,7 @@
break;
case 134:
-#line 985 "pir.y"
+#line 986 "pir.y"
{
set_instrf(lexer, "null", "%T", (yyvsp[(2) - (3)].targ));
get_opinfo(lexer);
@@ -3056,14 +3061,14 @@
break;
case 135:
-#line 992 "pir.y"
+#line 993 "pir.y"
{
generate_getresults_instr(lexer, (yyvsp[(2) - (3)].targ));
;}
break;
case 139:
-#line 1005 "pir.y"
+#line 1006 "pir.y"
{ /* at this point, TK_IDENT may in fact be a symbol identifier,
* not an op, so don't do any checks like is_parrot_op() just yet.
*/
@@ -3073,7 +3078,7 @@
break;
case 140:
-#line 1014 "pir.y"
+#line 1015 "pir.y"
{ /* when this rule is activated, the initial identifier must
* be a parrot op.
*/
@@ -3083,7 +3088,7 @@
break;
case 146:
-#line 1032 "pir.y"
+#line 1033 "pir.y"
{
/* the "instruction" that was set now appears to be
* an identifier; get the name, and check its type.
@@ -3120,22 +3125,22 @@
break;
case 147:
-#line 1068 "pir.y"
+#line 1069 "pir.y"
{ push_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 148:
-#line 1070 "pir.y"
+#line 1071 "pir.y"
{ push_operand(lexer, expr_from_key(lexer, (yyvsp[(1) - (1)].key))); ;}
break;
case 149:
-#line 1074 "pir.y"
+#line 1075 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
break;
case 150:
-#line 1076 "pir.y"
+#line 1077 "pir.y"
{ /* this is either a LABEL or a symbol; in the latter case, the type
* will be filled in later. */
(yyval.expr) = expr_from_ident(lexer, (yyvsp[(1) - (1)].sval));
@@ -3143,17 +3148,17 @@
break;
case 151:
-#line 1081 "pir.y"
+#line 1082 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 152:
-#line 1083 "pir.y"
+#line 1084 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 153:
-#line 1087 "pir.y"
+#line 1088 "pir.y"
{
/* if $1 is a register, just return that */
if (TEST_FLAG((yyvsp[(1) - (2)].targ)->flags, TARGET_FLAG_IS_REG))
@@ -3177,22 +3182,22 @@
break;
case 154:
-#line 1110 "pir.y"
+#line 1111 "pir.y"
{ (yyval.key) = (yyvsp[(2) - (3)].key); ;}
break;
case 155:
-#line 1114 "pir.y"
+#line 1115 "pir.y"
{ (yyval.key) = new_key(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 156:
-#line 1116 "pir.y"
+#line 1117 "pir.y"
{ (yyval.key) = add_key(lexer, (yyvsp[(1) - (3)].key), (yyvsp[(3) - (3)].expr)); ;}
break;
case 157:
-#line 1125 "pir.y"
+#line 1126 "pir.y"
{
/* the instruction is already set in parrot_op rule */
unshift_operand(lexer, (yyvsp[(4) - (6)].expr));
@@ -3206,7 +3211,7 @@
break;
case 158:
-#line 1136 "pir.y"
+#line 1137 "pir.y"
{
/* the instruction is already set in parrot_op rule */
unshift_operand(lexer, (yyvsp[(4) - (4)].expr));
@@ -3221,7 +3226,7 @@
break;
case 159:
-#line 1148 "pir.y"
+#line 1149 "pir.y"
{
unshift_operand(lexer, expr_from_key(lexer, (yyvsp[(4) - (6)].key)));
unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (6)].targ)));
@@ -3232,7 +3237,7 @@
break;
case 163:
-#line 1165 "pir.y"
+#line 1166 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 0)
set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3244,7 +3249,7 @@
break;
case 164:
-#line 1174 "pir.y"
+#line 1175 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 0.0)
set_instrf(lexer, "null", "%T", (yyvsp[(1) - (3)].targ));
@@ -3256,7 +3261,7 @@
break;
case 165:
-#line 1183 "pir.y"
+#line 1184 "pir.y"
{
set_instrf(lexer, "set", "%T%C", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].cval));
get_opinfo(lexer);
@@ -3264,7 +3269,7 @@
break;
case 166:
-#line 1188 "pir.y"
+#line 1189 "pir.y"
{
set_instrf(lexer, "set", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(lexer);
@@ -3272,7 +3277,7 @@
break;
case 167:
-#line 1193 "pir.y"
+#line 1194 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(3) - (3)].sval));
if (sym) {
@@ -3296,7 +3301,7 @@
break;
case 168:
-#line 1214 "pir.y"
+#line 1215 "pir.y"
{
unshift_operand(lexer, expr_from_target(lexer, (yyvsp[(1) - (3)].targ)));
get_opinfo(lexer);
@@ -3304,7 +3309,7 @@
break;
case 169:
-#line 1219 "pir.y"
+#line 1220 "pir.y"
{
/* $P0 = foo ["bar"] # PIR style
*
@@ -3348,7 +3353,7 @@
break;
case 170:
-#line 1260 "pir.y"
+#line 1261 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(3) - (4)].sval));
target *t;
@@ -3369,7 +3374,7 @@
break;
case 171:
-#line 1278 "pir.y"
+#line 1279 "pir.y"
{
target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (4)].ival));
set_target_key(preg, (yyvsp[(4) - (4)].key));
@@ -3379,7 +3384,7 @@
break;
case 172:
-#line 1285 "pir.y"
+#line 1286 "pir.y"
{
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%E", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].expr));
get_opinfo(lexer);
@@ -3387,7 +3392,7 @@
break;
case 173:
-#line 1290 "pir.y"
+#line 1291 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 1)
set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3401,7 +3406,7 @@
break;
case 174:
-#line 1301 "pir.y"
+#line 1302 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 1.0)
set_instrf(lexer, "inc", "%T", (yyvsp[(1) - (3)].targ));
@@ -3415,7 +3420,7 @@
break;
case 175:
-#line 1312 "pir.y"
+#line 1313 "pir.y"
{
if ((yyvsp[(3) - (3)].ival) == 1)
set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3429,7 +3434,7 @@
break;
case 176:
-#line 1323 "pir.y"
+#line 1324 "pir.y"
{
if ((yyvsp[(3) - (3)].dval) == 1.0)
set_instrf(lexer, "dec", "%T", (yyvsp[(1) - (3)].targ));
@@ -3443,7 +3448,7 @@
break;
case 177:
-#line 1334 "pir.y"
+#line 1335 "pir.y"
{
set_instrf(lexer, "add", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(lexer);
@@ -3451,7 +3456,7 @@
break;
case 178:
-#line 1339 "pir.y"
+#line 1340 "pir.y"
{
set_instrf(lexer, "sub", "%T%T", (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ));
get_opinfo(lexer);
@@ -3459,7 +3464,7 @@
break;
case 179:
-#line 1344 "pir.y"
+#line 1345 "pir.y"
{
set_instrf(lexer, (yyvsp[(3) - (4)].sval), "%T%E", (yyvsp[(1) - (4)].targ), (yyvsp[(4) - (4)].expr));
get_opinfo(lexer);
@@ -3467,7 +3472,7 @@
break;
case 180:
-#line 1349 "pir.y"
+#line 1350 "pir.y"
{
if (targets_equal((yyvsp[(1) - (5)].targ), (yyvsp[(3) - (5)].targ))) /* $P0 = $P0 + $P1 ==> $P0 += $P1 */
set_instrf(lexer, opnames[(yyvsp[(4) - (5)].ival)], "%T%E", (yyvsp[(1) - (5)].targ), (yyvsp[(5) - (5)].expr));
@@ -3480,7 +3485,7 @@
break;
case 181:
-#line 1359 "pir.y"
+#line 1360 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (4)].sval));
target *t;
@@ -3502,7 +3507,7 @@
break;
case 182:
-#line 1378 "pir.y"
+#line 1379 "pir.y"
{
target *preg = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (4)].ival));
set_target_key(preg, (yyvsp[(2) - (4)].key));
@@ -3512,97 +3517,97 @@
break;
case 183:
-#line 1412 "pir.y"
+#line 1413 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%i%T", (yyvsp[(1) - (3)].ival), (yyvsp[(3) - (3)].targ)); ;}
break;
case 184:
-#line 1414 "pir.y"
+#line 1415 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%n%T", (yyvsp[(1) - (3)].dval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 185:
-#line 1416 "pir.y"
+#line 1417 "pir.y"
{ set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%s%T", (yyvsp[(1) - (3)].sval), (yyvsp[(3) - (3)].targ)); ;}
break;
case 186:
-#line 1418 "pir.y"
+#line 1419 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_s_s(yyscanner, (yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval))); ;}
break;
case 187:
-#line 1420 "pir.y"
+#line 1421 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_i_i(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
break;
case 188:
-#line 1422 "pir.y"
+#line 1423 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_n_n(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
break;
case 189:
-#line 1424 "pir.y"
+#line 1425 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_i_n(yyscanner, (yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval))); ;}
break;
case 190:
-#line 1426 "pir.y"
+#line 1427 "pir.y"
{ set_instrf(lexer, "set", "%C", fold_n_i(yyscanner, (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival))); ;}
break;
case 191:
-#line 1431 "pir.y"
+#line 1432 "pir.y"
{ get_opinfo(lexer); ;}
break;
case 192:
-#line 1440 "pir.y"
+#line 1441 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, (yyvsp[(3) - (5)].sval), (yyvsp[(5) - (5)].sval)); ;}
break;
case 193:
-#line 1442 "pir.y"
+#line 1443 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "int", (yyvsp[(5) - (5)].sval)); ;}
break;
case 194:
-#line 1444 "pir.y"
+#line 1445 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "num", (yyvsp[(5) - (5)].sval)); ;}
break;
case 195:
-#line 1446 "pir.y"
+#line 1447 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "pmc", (yyvsp[(5) - (5)].sval)); ;}
break;
case 196:
-#line 1448 "pir.y"
+#line 1449 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "string", (yyvsp[(5) - (5)].sval)); ;}
break;
case 197:
-#line 1450 "pir.y"
+#line 1451 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "if", (yyvsp[(5) - (5)].sval)); ;}
break;
case 198:
-#line 1452 "pir.y"
+#line 1453 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "unless", (yyvsp[(5) - (5)].sval)); ;}
break;
case 199:
-#line 1454 "pir.y"
+#line 1455 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "goto", (yyvsp[(5) - (5)].sval)); ;}
break;
case 200:
-#line 1456 "pir.y"
+#line 1457 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (5)].ival), 1, "null", (yyvsp[(5) - (5)].sval)); ;}
break;
case 201:
-#line 1458 "pir.y"
+#line 1459 "pir.y"
{
int istrue = evaluate_c(lexer, (yyvsp[(2) - (4)].cval));
/* if "unless", invert the true-ness */
@@ -3617,7 +3622,7 @@
break;
case 202:
-#line 1470 "pir.y"
+#line 1471 "pir.y"
{
set_instrf(lexer, (yyvsp[(1) - (5)].ival) ? "unless_null" : "if_null", "%T%I",
new_reg(lexer, PMC_TYPE, (yyvsp[(3) - (5)].ival)), (yyvsp[(5) - (5)].sval));
@@ -3627,12 +3632,12 @@
break;
case 203:
-#line 1477 "pir.y"
+#line 1478 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 204:
-#line 1479 "pir.y"
+#line 1480 "pir.y"
{
set_instrf(lexer, (yyvsp[(1) - (4)].ival) ? "unless" : "if", "%T%I", (yyvsp[(2) - (4)].targ), (yyvsp[(4) - (4)].sval));
/* set a flag indicating that the 2nd operand is a label */
@@ -3641,57 +3646,57 @@
break;
case 205:
-#line 1485 "pir.y"
+#line 1486 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "int", (yyvsp[(4) - (4)].sval)); ;}
break;
case 206:
-#line 1487 "pir.y"
+#line 1488 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "num", (yyvsp[(4) - (4)].sval)); ;}
break;
case 207:
-#line 1489 "pir.y"
+#line 1490 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "pmc", (yyvsp[(4) - (4)].sval)); ;}
break;
case 208:
-#line 1491 "pir.y"
+#line 1492 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "string", (yyvsp[(4) - (4)].sval)); ;}
break;
case 209:
-#line 1493 "pir.y"
+#line 1494 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "if", (yyvsp[(4) - (4)].sval)); ;}
break;
case 210:
-#line 1495 "pir.y"
+#line 1496 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "unless", (yyvsp[(4) - (4)].sval)); ;}
break;
case 211:
-#line 1497 "pir.y"
+#line 1498 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
break;
case 212:
-#line 1499 "pir.y"
+#line 1500 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "goto", (yyvsp[(4) - (4)].sval)); ;}
break;
case 213:
-#line 1501 "pir.y"
+#line 1502 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
break;
case 214:
-#line 1503 "pir.y"
+#line 1504 "pir.y"
{ create_if_instr(lexer, (yyvsp[(1) - (4)].ival), 0, "null", (yyvsp[(4) - (4)].sval)); ;}
break;
case 215:
-#line 1505 "pir.y"
+#line 1506 "pir.y"
{
if ((yyvsp[(2) - (4)].ival) == COMPUTE_DURING_RUNTIME) {
if ((yyvsp[(1) - (4)].ival) == NEED_INVERT_OPNAME) /* "unless" */
@@ -3719,7 +3724,7 @@
break;
case 216:
-#line 1536 "pir.y"
+#line 1537 "pir.y"
{
/* the instructions "gt" and "ge" are converted to "lt" and "le".
* if so, then the arguments must be reversed as well. "lt" and
@@ -3748,7 +3753,7 @@
break;
case 217:
-#line 1562 "pir.y"
+#line 1563 "pir.y"
{
if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%i", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].ival));
@@ -3759,7 +3764,7 @@
break;
case 218:
-#line 1570 "pir.y"
+#line 1571 "pir.y"
{
if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival) + 1], "%T%n", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].dval));
@@ -3771,7 +3776,7 @@
break;
case 219:
-#line 1579 "pir.y"
+#line 1580 "pir.y"
{
if (((yyvsp[(0) - (3)].ival) != NEED_INVERT_OPNAME) && ((yyvsp[(2) - (3)].ival) == OP_GE || (yyvsp[(2) - (3)].ival) == OP_GT))
set_instrf(lexer, opnames[(yyvsp[(2) - (3)].ival)], "%T%s", (yyvsp[(3) - (3)].targ), (yyvsp[(1) - (3)].sval));
@@ -3783,32 +3788,32 @@
break;
case 220:
-#line 1588 "pir.y"
+#line 1589 "pir.y"
{ (yyval.ival) = evaluate_i_i((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 221:
-#line 1590 "pir.y"
+#line 1591 "pir.y"
{ (yyval.ival) = evaluate_i_n((yyvsp[(1) - (3)].ival), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 222:
-#line 1592 "pir.y"
+#line 1593 "pir.y"
{ (yyval.ival) = evaluate_n_i((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival)); ;}
break;
case 223:
-#line 1594 "pir.y"
+#line 1595 "pir.y"
{ (yyval.ival) = evaluate_n_n((yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval)); ;}
break;
case 224:
-#line 1596 "pir.y"
+#line 1597 "pir.y"
{ (yyval.ival) = evaluate_s_s((yyvsp[(1) - (3)].sval), (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].sval)); ;}
break;
case 225:
-#line 1600 "pir.y"
+#line 1601 "pir.y"
{
yypirerror(yyscanner, lexer, "cannot compare string to %s",
(yyvsp[(3) - (3)].ival) == INT_TYPE ? "integer" : "number");
@@ -3816,37 +3821,37 @@
break;
case 226:
-#line 1605 "pir.y"
+#line 1606 "pir.y"
{ yypirerror(yyscanner, lexer, "cannot compare integer to string"); ;}
break;
case 227:
-#line 1607 "pir.y"
+#line 1608 "pir.y"
{ yypirerror(yyscanner, lexer, "cannot compare number to string"); ;}
break;
case 228:
-#line 1611 "pir.y"
+#line 1612 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 229:
-#line 1612 "pir.y"
+#line 1613 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 230:
-#line 1615 "pir.y"
+#line 1616 "pir.y"
{ (yyval.ival) = DONT_INVERT_OPNAME; /* no need to invert */ ;}
break;
case 231:
-#line 1616 "pir.y"
+#line 1617 "pir.y"
{ (yyval.ival) = NEED_INVERT_OPNAME; /* yes, invert opname */ ;}
break;
case 234:
-#line 1624 "pir.y"
+#line 1625 "pir.y"
{
set_instrf(lexer, "branch", "%I", (yyvsp[(2) - (3)].sval));
set_op_labelflag(lexer, BIT(0)); /* bit 0 means: "1 << 0" */
@@ -3855,37 +3860,37 @@
break;
case 235:
-#line 1632 "pir.y"
+#line 1633 "pir.y"
{ declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].symb)); ;}
break;
case 236:
-#line 1636 "pir.y"
+#line 1637 "pir.y"
{ (yyval.symb) = (yyvsp[(1) - (1)].symb); ;}
break;
case 237:
-#line 1638 "pir.y"
+#line 1639 "pir.y"
{ (yyval.symb) = add_local((yyvsp[(1) - (3)].symb), (yyvsp[(3) - (3)].symb)); ;}
break;
case 238:
-#line 1642 "pir.y"
+#line 1643 "pir.y"
{ (yyval.symb) = new_local(lexer, (yyvsp[(1) - (2)].sval), (yyvsp[(2) - (2)].ival)); ;}
break;
case 239:
-#line 1645 "pir.y"
+#line 1646 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 240:
-#line 1646 "pir.y"
+#line 1647 "pir.y"
{ (yyval.ival) = 1; ;}
break;
case 241:
-#line 1650 "pir.y"
+#line 1651 "pir.y"
{ /* if $4 is not a register, it must be a declared symbol */
if (!TEST_FLAG((yyvsp[(4) - (5)].targ)->flags, TARGET_FLAG_IS_REG)) {
@@ -3898,12 +3903,12 @@
break;
case 242:
-#line 1665 "pir.y"
+#line 1666 "pir.y"
{ convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
break;
case 245:
-#line 1677 "pir.y"
+#line 1678 "pir.y"
{ /* $4 contains an invocation object */
set_invocation_args(lexer, (yyvsp[(4) - (8)].invo), (yyvsp[(3) - (8)].argm));
(yyval.invo) = set_invocation_results(lexer, (yyvsp[(4) - (8)].invo), (yyvsp[(6) - (8)].targ));
@@ -3911,72 +3916,72 @@
break;
case 246:
-#line 1684 "pir.y"
+#line 1685 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 247:
-#line 1686 "pir.y"
+#line 1687 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 248:
-#line 1690 "pir.y"
+#line 1691 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 249:
-#line 1692 "pir.y"
+#line 1693 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 250:
-#line 1696 "pir.y"
+#line 1697 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 251:
-#line 1700 "pir.y"
+#line 1701 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
break;
case 252:
-#line 1702 "pir.y"
+#line 1703 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
break;
case 253:
-#line 1705 "pir.y"
+#line 1706 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_METHOD, (yyvsp[(2) - (5)].targ), (yyvsp[(5) - (5)].expr)); ;}
break;
case 254:
-#line 1709 "pir.y"
+#line 1710 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 255:
-#line 1711 "pir.y"
+#line 1712 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
break;
case 256:
-#line 1715 "pir.y"
+#line 1716 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 257:
-#line 1717 "pir.y"
+#line 1718 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 258:
-#line 1721 "pir.y"
+#line 1722 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 259:
-#line 1723 "pir.y"
+#line 1724 "pir.y"
{
if ((yyvsp[(2) - (2)].targ))
(yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].targ));
@@ -3986,32 +3991,32 @@
break;
case 260:
-#line 1732 "pir.y"
+#line 1733 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 261:
-#line 1734 "pir.y"
+#line 1735 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 263:
-#line 1742 "pir.y"
+#line 1743 "pir.y"
{ (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
break;
case 264:
-#line 1744 "pir.y"
+#line 1745 "pir.y"
{ (yyval.invo) = set_invocation_results(lexer, (yyvsp[(3) - (3)].invo), (yyvsp[(1) - (3)].targ)); ;}
break;
case 265:
-#line 1746 "pir.y"
+#line 1747 "pir.y"
{ (yyval.invo) = set_invocation_results(lexer, (yyvsp[(1) - (1)].invo), NULL); ;}
break;
case 268:
-#line 1754 "pir.y"
+#line 1755 "pir.y"
{
/* if $1 is not a register, check whether the symbol was declared */
if (!TEST_FLAG((yyvsp[(1) - (4)].targ)->flags, TARGET_FLAG_IS_REG)) {
@@ -4032,7 +4037,7 @@
break;
case 269:
-#line 1774 "pir.y"
+#line 1775 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (2)].argm));
@@ -4040,12 +4045,12 @@
break;
case 270:
-#line 1781 "pir.y"
+#line 1782 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 271:
-#line 1783 "pir.y"
+#line 1784 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL)
@@ -4056,7 +4061,7 @@
break;
case 272:
-#line 1793 "pir.y"
+#line 1794 "pir.y"
{ /* check that this identifier was declared */
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
@@ -4076,22 +4081,22 @@
break;
case 273:
-#line 1810 "pir.y"
+#line 1811 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival))); ;}
break;
case 274:
-#line 1812 "pir.y"
+#line 1813 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival))); ;}
break;
case 275:
-#line 1814 "pir.y"
+#line 1815 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval))); ;}
break;
case 276:
-#line 1818 "pir.y"
+#line 1819 "pir.y"
{
symbol *sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL)
@@ -4103,74 +4108,74 @@
break;
case 277:
-#line 1827 "pir.y"
+#line 1828 "pir.y"
{ (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 278:
-#line 1832 "pir.y"
+#line 1833 "pir.y"
{
(yyval.targ) = (yyvsp[(2) - (3)].targ);
;}
break;
case 279:
-#line 1838 "pir.y"
+#line 1839 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 280:
-#line 1840 "pir.y"
+#line 1841 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 281:
-#line 1844 "pir.y"
+#line 1845 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 282:
-#line 1846 "pir.y"
+#line 1847 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) - (3)].targ)); ;}
break;
case 283:
-#line 1850 "pir.y"
+#line 1851 "pir.y"
{ (yyval.targ) = set_param_flag(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) - (2)].ival)); ;}
break;
case 284:
-#line 1852 "pir.y"
+#line 1853 "pir.y"
{ (yyval.targ) = set_param_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
break;
case 285:
-#line 1856 "pir.y"
+#line 1857 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 286:
-#line 1858 "pir.y"
+#line 1859 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 287:
-#line 1862 "pir.y"
+#line 1863 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
break;
case 288:
-#line 1864 "pir.y"
+#line 1865 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
break;
case 289:
-#line 1866 "pir.y"
+#line 1867 "pir.y"
{ (yyval.ival) = TARGET_FLAG_SLURPY; ;}
break;
case 290:
-#line 1868 "pir.y"
+#line 1869 "pir.y"
{
(yyval.ival) = TARGET_FLAG_NAMED;
set_param_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4178,12 +4183,12 @@
break;
case 291:
-#line 1878 "pir.y"
+#line 1879 "pir.y"
{ convert_inv_to_instr(lexer, (yyvsp[(1) - (1)].invo)); ;}
break;
case 296:
-#line 1888 "pir.y"
+#line 1889 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4191,7 +4196,7 @@
break;
case 297:
-#line 1893 "pir.y"
+#line 1894 "pir.y"
{ /* was the invocation a method call? then it becomes a method tail
* call, otherwise it's just a normal (sub) tail call.
*/
@@ -4203,7 +4208,7 @@
break;
case 298:
-#line 1904 "pir.y"
+#line 1905 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(2) - (3)].argm));
@@ -4211,47 +4216,47 @@
break;
case 299:
-#line 1911 "pir.y"
+#line 1912 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 300:
-#line 1915 "pir.y"
+#line 1916 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 301:
-#line 1917 "pir.y"
+#line 1918 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 302:
-#line 1921 "pir.y"
+#line 1922 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 303:
-#line 1923 "pir.y"
+#line 1924 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) - (3)].argm)); ;}
break;
case 306:
-#line 1931 "pir.y"
+#line 1932 "pir.y"
{ (yyval.argm) = set_arg_alias(lexer, (yyvsp[(1) - (3)].sval)); ;}
break;
case 307:
-#line 1935 "pir.y"
+#line 1936 "pir.y"
{ (yyval.argm) = set_arg_flag((yyval.argm), (yyvsp[(2) - (2)].ival)); ;}
break;
case 308:
-#line 1939 "pir.y"
+#line 1940 "pir.y"
{ (yyval.argm) = set_curarg(lexer, new_argument(lexer, (yyvsp[(1) - (1)].expr))); ;}
break;
case 309:
-#line 1945 "pir.y"
+#line 1946 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_RETURN);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4259,7 +4264,7 @@
break;
case 310:
-#line 1954 "pir.y"
+#line 1955 "pir.y"
{
(yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args(lexer, (yyval.invo), (yyvsp[(3) - (5)].argm));
@@ -4267,72 +4272,72 @@
break;
case 311:
-#line 1961 "pir.y"
+#line 1962 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 312:
-#line 1963 "pir.y"
+#line 1964 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 313:
-#line 1968 "pir.y"
+#line 1969 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 314:
-#line 1970 "pir.y"
+#line 1971 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 315:
-#line 1975 "pir.y"
+#line 1976 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 316:
-#line 1979 "pir.y"
+#line 1980 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 317:
-#line 1981 "pir.y"
+#line 1982 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 318:
-#line 1985 "pir.y"
+#line 1986 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 319:
-#line 1987 "pir.y"
+#line 1988 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) - (2)].argm)); ;}
break;
case 320:
-#line 1991 "pir.y"
+#line 1992 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 321:
-#line 1996 "pir.y"
+#line 1997 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 322:
-#line 1998 "pir.y"
+#line 1999 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 323:
-#line 2002 "pir.y"
+#line 2003 "pir.y"
{ (yyval.ival) = ARG_FLAG_FLAT; ;}
break;
case 324:
-#line 2004 "pir.y"
+#line 2005 "pir.y"
{
(yyval.ival) = ARG_FLAG_NAMED;
set_arg_alias(lexer, (yyvsp[(2) - (2)].sval));
@@ -4340,62 +4345,62 @@
break;
case 325:
-#line 2011 "pir.y"
+#line 2012 "pir.y"
{ (yyval.sval) = NULL; ;}
break;
case 326:
-#line 2013 "pir.y"
+#line 2014 "pir.y"
{ (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
break;
case 327:
-#line 2017 "pir.y"
+#line 2018 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 329:
-#line 2024 "pir.y"
+#line 2025 "pir.y"
{ store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
break;
case 332:
-#line 2032 "pir.y"
+#line 2033 "pir.y"
{ (yyval.cdec) = (yyvsp[(2) - (2)].cdec); ;}
break;
case 335:
-#line 2040 "pir.y"
+#line 2041 "pir.y"
{ store_global_constant(lexer, (yyvsp[(2) - (2)].cdec)); ;}
break;
case 336:
-#line 2044 "pir.y"
+#line 2045 "pir.y"
{ (yyval.cdec) = new_named_const(lexer, INT_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ival)); ;}
break;
case 337:
-#line 2046 "pir.y"
+#line 2047 "pir.y"
{ (yyval.cdec) = new_named_const(lexer, NUM_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].dval)); ;}
break;
case 338:
-#line 2048 "pir.y"
+#line 2049 "pir.y"
{ (yyval.cdec) = new_named_const(lexer, STRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 339:
-#line 2050 "pir.y"
+#line 2051 "pir.y"
{ (yyval.cdec) = new_named_const(lexer, USTRING_VAL, (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].ustr)); ;}
break;
case 340:
-#line 2054 "pir.y"
+#line 2055 "pir.y"
{ (yyval.cdec) = new_pmc_const(lexer, (yyvsp[(1) - (4)].sval), (yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].cval)); ;}
break;
case 342:
-#line 2059 "pir.y"
+#line 2060 "pir.y"
{ /* this alternative is necessary, otherwise the parser
* just stops when assigning an identifier to a pmc
* const, without an error message. That may be
@@ -4406,97 +4411,97 @@
break;
case 343:
-#line 2071 "pir.y"
+#line 2072 "pir.y"
{ (yyval.expr) = expr_from_target(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 344:
-#line 2072 "pir.y"
+#line 2073 "pir.y"
{ (yyval.expr) = expr_from_const(lexer, (yyvsp[(1) - (1)].cval)); ;}
break;
case 345:
-#line 2076 "pir.y"
+#line 2077 "pir.y"
{ (yyval.cval) = new_const(lexer, INT_VAL, (yyvsp[(1) - (1)].ival)); ;}
break;
case 346:
-#line 2077 "pir.y"
+#line 2078 "pir.y"
{ (yyval.cval) = new_const(lexer, NUM_VAL, (yyvsp[(1) - (1)].dval)); ;}
break;
case 347:
-#line 2078 "pir.y"
+#line 2079 "pir.y"
{ (yyval.cval) = (yyvsp[(1) - (1)].cval); ;}
break;
case 348:
-#line 2081 "pir.y"
+#line 2082 "pir.y"
{ (yyval.cval) = new_const(lexer, STRING_VAL, (yyvsp[(1) - (1)].sval)); ;}
break;
case 349:
-#line 2082 "pir.y"
+#line 2083 "pir.y"
{ (yyval.cval) = new_const(lexer, USTRING_VAL, (yyvsp[(1) - (1)].ustr)); ;}
break;
case 350:
-#line 2085 "pir.y"
+#line 2086 "pir.y"
{ (yyval.ival) = OP_NE; ;}
break;
case 351:
-#line 2086 "pir.y"
+#line 2087 "pir.y"
{ (yyval.ival) = OP_EQ; ;}
break;
case 352:
-#line 2087 "pir.y"
+#line 2088 "pir.y"
{ (yyval.ival) = OP_LT; ;}
break;
case 353:
-#line 2088 "pir.y"
+#line 2089 "pir.y"
{ (yyval.ival) = OP_LE; ;}
break;
case 354:
-#line 2089 "pir.y"
+#line 2090 "pir.y"
{ (yyval.ival) = OP_GE; ;}
break;
case 355:
-#line 2090 "pir.y"
+#line 2091 "pir.y"
{ (yyval.ival) = OP_GT; ;}
break;
case 356:
-#line 2093 "pir.y"
+#line 2094 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 357:
-#line 2094 "pir.y"
+#line 2095 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 358:
-#line 2095 "pir.y"
+#line 2096 "pir.y"
{ (yyval.ival) = PMC_TYPE; ;}
break;
case 359:
-#line 2096 "pir.y"
+#line 2097 "pir.y"
{ (yyval.ival) = STRING_TYPE; ;}
break;
case 360:
-#line 2104 "pir.y"
+#line 2105 "pir.y"
{ set_curtarget(lexer, (yyvsp[(1) - (1)].targ)); ;}
break;
case 362:
-#line 2108 "pir.y"
+#line 2109 "pir.y"
{ /* a symbol must have been declared; check that at this point. */
symbol * sym = find_symbol(lexer, (yyvsp[(1) - (1)].sval));
if (sym == NULL) {
@@ -4511,277 +4516,277 @@
break;
case 363:
-#line 2121 "pir.y"
+#line 2122 "pir.y"
{ (yyval.targ) = new_reg(lexer, PMC_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 364:
-#line 2122 "pir.y"
+#line 2123 "pir.y"
{ (yyval.targ) = new_reg(lexer, NUM_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 365:
-#line 2123 "pir.y"
+#line 2124 "pir.y"
{ (yyval.targ) = new_reg(lexer, INT_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 366:
-#line 2124 "pir.y"
+#line 2125 "pir.y"
{ (yyval.targ) = new_reg(lexer, STRING_TYPE, (yyvsp[(1) - (1)].ival)); ;}
break;
case 369:
-#line 2132 "pir.y"
+#line 2133 "pir.y"
{ (yyval.sval) = "if"; ;}
break;
case 370:
-#line 2133 "pir.y"
+#line 2134 "pir.y"
{ (yyval.sval) = "unless"; ;}
break;
case 371:
-#line 2134 "pir.y"
+#line 2135 "pir.y"
{ (yyval.sval) = "goto"; ;}
break;
case 372:
-#line 2135 "pir.y"
+#line 2136 "pir.y"
{ (yyval.sval) = "int"; ;}
break;
case 373:
-#line 2136 "pir.y"
+#line 2137 "pir.y"
{ (yyval.sval) = "num"; ;}
break;
case 374:
-#line 2137 "pir.y"
+#line 2138 "pir.y"
{ (yyval.sval) = "string"; ;}
break;
case 375:
-#line 2138 "pir.y"
+#line 2139 "pir.y"
{ (yyval.sval) = "pmc"; ;}
break;
case 376:
-#line 2139 "pir.y"
+#line 2140 "pir.y"
{ (yyval.sval) = "null"; ;}
break;
case 377:
-#line 2142 "pir.y"
+#line 2143 "pir.y"
{ (yyval.sval) = "neg"; ;}
break;
case 378:
-#line 2143 "pir.y"
+#line 2144 "pir.y"
{ (yyval.sval) = "not"; ;}
break;
case 379:
-#line 2144 "pir.y"
+#line 2145 "pir.y"
{ (yyval.sval) = "bnot"; ;}
break;
case 380:
-#line 2147 "pir.y"
+#line 2148 "pir.y"
{ (yyval.ival) = OP_ADD; ;}
break;
case 381:
-#line 2148 "pir.y"
+#line 2149 "pir.y"
{ (yyval.ival) = OP_SUB; ;}
break;
case 382:
-#line 2149 "pir.y"
+#line 2150 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 383:
-#line 2150 "pir.y"
+#line 2151 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 384:
-#line 2151 "pir.y"
+#line 2152 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 385:
-#line 2152 "pir.y"
+#line 2153 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 386:
-#line 2153 "pir.y"
+#line 2154 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 387:
-#line 2154 "pir.y"
+#line 2155 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 388:
-#line 2155 "pir.y"
+#line 2156 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 389:
-#line 2156 "pir.y"
+#line 2157 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 390:
-#line 2157 "pir.y"
+#line 2158 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 391:
-#line 2158 "pir.y"
+#line 2159 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 392:
-#line 2159 "pir.y"
+#line 2160 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 393:
-#line 2160 "pir.y"
+#line 2161 "pir.y"
{ (yyval.ival) = OP_OR; ;}
break;
case 394:
-#line 2161 "pir.y"
+#line 2162 "pir.y"
{ (yyval.ival) = OP_AND; ;}
break;
case 395:
-#line 2162 "pir.y"
+#line 2163 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 396:
-#line 2163 "pir.y"
+#line 2164 "pir.y"
{ (yyval.ival) = OP_XOR; ;}
break;
case 397:
-#line 2164 "pir.y"
+#line 2165 "pir.y"
{ (yyval.ival) = OP_ISEQ; ;}
break;
case 398:
-#line 2165 "pir.y"
+#line 2166 "pir.y"
{ (yyval.ival) = OP_ISLE; ;}
break;
case 399:
-#line 2166 "pir.y"
+#line 2167 "pir.y"
{ (yyval.ival) = OP_ISLT; ;}
break;
case 400:
-#line 2167 "pir.y"
+#line 2168 "pir.y"
{ (yyval.ival) = OP_ISGE; ;}
break;
case 401:
-#line 2168 "pir.y"
+#line 2169 "pir.y"
{ (yyval.ival) = OP_ISGT; ;}
break;
case 402:
-#line 2169 "pir.y"
+#line 2170 "pir.y"
{ (yyval.ival) = OP_ISNE; ;}
break;
case 403:
-#line 2175 "pir.y"
+#line 2176 "pir.y"
{ (yyval.ival) = OP_MUL; ;}
break;
case 404:
-#line 2176 "pir.y"
+#line 2177 "pir.y"
{ (yyval.ival) = OP_MOD; ;}
break;
case 405:
-#line 2177 "pir.y"
+#line 2178 "pir.y"
{ (yyval.ival) = OP_POW; ;}
break;
case 406:
-#line 2178 "pir.y"
+#line 2179 "pir.y"
{ (yyval.ival) = OP_DIV; ;}
break;
case 407:
-#line 2179 "pir.y"
+#line 2180 "pir.y"
{ (yyval.ival) = OP_FDIV; ;}
break;
case 408:
-#line 2180 "pir.y"
+#line 2181 "pir.y"
{ (yyval.ival) = OP_BOR; ;}
break;
case 409:
-#line 2181 "pir.y"
+#line 2182 "pir.y"
{ (yyval.ival) = OP_BAND; ;}
break;
case 410:
-#line 2182 "pir.y"
+#line 2183 "pir.y"
{ (yyval.ival) = OP_BXOR; ;}
break;
case 411:
-#line 2183 "pir.y"
+#line 2184 "pir.y"
{ (yyval.ival) = OP_CONCAT; ;}
break;
case 412:
-#line 2184 "pir.y"
+#line 2185 "pir.y"
{ (yyval.ival) = OP_SHR; ;}
break;
case 413:
-#line 2185 "pir.y"
+#line 2186 "pir.y"
{ (yyval.ival) = OP_SHL; ;}
break;
case 414:
-#line 2186 "pir.y"
+#line 2187 "pir.y"
{ (yyval.ival) = OP_LSR; ;}
break;
case 416:
-#line 2207 "pir.y"
+#line 2208 "pir.y"
{ new_subr(lexer, "@start"); ;}
break;
case 425:
-#line 2223 "pir.y"
+#line 2224 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 430:
-#line 2233 "pir.y"
+#line 2234 "pir.y"
{ set_sub_name(lexer, (yyvsp[(3) - (3)].sval)); ;}
break;
case 431:
-#line 2237 "pir.y"
+#line 2238 "pir.y"
{ new_subr(lexer, NULL); ;}
break;
case 432:
-#line 2242 "pir.y"
+#line 2243 "pir.y"
{
if (is_parrot_op(lexer, (yyvsp[(1) - (3)].sval))) {
@@ -4796,7 +4801,7 @@
/* Line 1267 of yacc.c. */
-#line 4800 "pirparser.c"
+#line 4805 "pirparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5010,7 +5015,7 @@
}
-#line 2256 "pir.y"
+#line 2257 "pir.y"