Author: kjs
Date: Wed Jul 30 09:37:41 2008
New Revision: 29877
Modified:
trunk/compilers/pirc/new/main.c
trunk/compilers/pirc/new/pir.l
trunk/compilers/pirc/new/pir.y
trunk/compilers/pirc/new/pirlexer.c
trunk/compilers/pirc/new/pirlexer.h
trunk/compilers/pirc/new/pirparser.c
trunk/compilers/pirc/new/pirparser.h
Log:
[pirc/new] use flex' built-in line-number-track-keeping option instead of
custom code to do that.
Modified: trunk/compilers/pirc/new/main.c
==============================================================================
--- trunk/compilers/pirc/new/main.c (original)
+++ trunk/compilers/pirc/new/main.c Wed Jul 30 09:37:41 2008
@@ -185,13 +185,13 @@
*/
int
-yyerror(yyscan_t yyscanner, lexer_state * const lexer, char const * const
message)
+yyerror(yyscan_t yyscanner, lexer_state * const lexer, char const * const
message)
{
char const * const text = yyget_text(yyscanner);
lexer->parse_errors++;
fprintf(stderr, "\nError in file '%s' (line %d)\n%s ",
- lexer->filename, lexer->line_nr, message);
+ lexer->filename, yyget_lineno(yyscanner), message);
/* print current token if it's not a newline (or \r\n on windows) */
/* the following should be fixed; the point is not to print the token if
Modified: trunk/compilers/pirc/new/pir.l
==============================================================================
--- trunk/compilers/pirc/new/pir.l (original)
+++ trunk/compilers/pirc/new/pir.l Wed Jul 30 09:37:41 2008
@@ -164,17 +164,6 @@
}
-/* after each rule execute update_location() */
-#define YY_USER_ACTION do { \
- lexer_state *my_lexer = yyget_extra(yyscanner); \
- update_location(yyscanner, my_lexer); \
- } \
- while(0);
-
-
-
-
-
/*
=item C<new_lexer>
@@ -188,7 +177,6 @@
assert(lexer != NULL);
lexer->filename = filename;
- lexer->line_nr = 1;
lexer->line_pos = 1;
lexer->parse_errors = 0;
@@ -249,6 +237,9 @@
%option nounput
+/* use flex' built-in capability for line counting */
+%option yylineno
+
/* make the scanner re-entrant */
%option reentrant
Modified: trunk/compilers/pirc/new/pir.y
==============================================================================
--- trunk/compilers/pirc/new/pir.y (original)
+++ trunk/compilers/pirc/new/pir.y Wed Jul 30 09:37:41 2008
@@ -19,8 +19,6 @@
TODO:
* rename TK_SYM_?REG to TK_?REG (as there's no longer PASM registers)
- * use a flex-generated line counter in the lexer instead of custom
- code (this is in pir.l).
=cut
Modified: trunk/compilers/pirc/new/pirlexer.c
==============================================================================
--- trunk/compilers/pirc/new/pirlexer.c (original)
+++ trunk/compilers/pirc/new/pirlexer.c Wed Jul 30 09:37:41 2008
@@ -224,7 +224,20 @@
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
- #define YY_LESS_LINENO(n)
+ /* Note: We specifically omit the test for yy_rule_can_match_eol because
it requires
+ * access to the local variable yy_act. Since yyless() is a macro,
it would break
+ * existing scanners that call yyless() from OUTSIDE yylex.
+ * One obvious solution it to make yy_act a global. I tried that,
and saw
+ * a 5% performance hit in a non-yylineno scanner, because yy_act is
+ * normally declared as a register variable-- so it is not worth it.
+ */
+ #define YY_LESS_LINENO(n) \
+ do { \
+ int yyl;\
+ for ( yyl = n; yyl < yyleng; ++yyl )\
+ if ( yytext[yyl] == '\n' )\
+ --yylineno;\
+ }while(0)
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
@@ -776,21 +789,31 @@
384, 384, 384, 384
} ;
+/* Table of booleans, true if rule could match eol. */
+static yyconst flex_int32_t yy_rule_can_match_eol[115] =
+ { 0,
+0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
+
static yyconst flex_int16_t yy_rule_linenum[114] =
{ 0,
- 271, 273, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 290, 291, 292, 293, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 308, 311, 312, 313, 315, 316, 317, 318, 319, 320,
- 321, 322, 323, 324, 325, 327, 328, 329, 330, 331,
- 333, 334, 335, 336, 338, 339, 340, 342, 343, 344,
- 345, 346, 347, 348, 349, 351, 352, 353, 354, 355,
- 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
- 366, 368, 369, 370, 371, 372, 373, 374, 375, 376,
- 377, 378, 379, 381, 382, 383, 384, 385, 386, 387,
+ 262, 264, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 281, 282, 283, 284, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 299, 302, 303, 304, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 318, 319, 320, 321, 322,
+ 324, 325, 326, 327, 329, 330, 331, 333, 334, 335,
+ 336, 337, 338, 339, 340, 342, 343, 344, 345, 346,
+ 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
+ 357, 359, 360, 361, 362, 363, 364, 365, 366, 367,
+ 368, 369, 370, 372, 373, 374, 375, 376, 377, 378,
- 390, 395, 396, 397, 398, 400, 405, 411, 412, 413,
- 414, 415, 420
+ 381, 386, 387, 388, 389, 391, 396, 402, 403, 404,
+ 405, 406, 411
} ;
/* The intent behind this definition is that it'll catch
@@ -967,17 +990,6 @@
}
-/* after each rule execute update_location() */
-#define YY_USER_ACTION do { \
- lexer_state *my_lexer = yyget_extra(yyscanner); \
- update_location(yyscanner, my_lexer); \
- } \
- while(0);
-
-
-
-
-
/*
=item C<new_lexer>
@@ -991,7 +1003,6 @@
assert(lexer != NULL);
lexer->filename = filename;
- lexer->line_nr = 1;
lexer->line_pos = 1;
lexer->parse_errors = 0;
@@ -1017,12 +1028,13 @@
/* make sure yytext is a pointer */
/* slightly more efficient when this option is set; our parser is not
interactive anyway. */
/* define output file */
+/* use flex' built-in capability for line counting */
/* make the scanner re-entrant */
/* needed for bison interaction. I forgot details. */
/* make yywrap() always return true. */
/* always show warnings if something's wrong with our spec. */
/* create a scanner in debug mode */
-#line 1026 "pirlexer.c"
+#line 1038 "pirlexer.c"
#define INITIAL 0
@@ -1318,11 +1330,11 @@
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
/* %% [7.0] user's declarations go here */
-#line 268 "pir.l"
+#line 259 "pir.l"
-#line 1326 "pirlexer.c"
+#line 1338 "pirlexer.c"
yylval = yylval_param;
@@ -1405,6 +1417,18 @@
/* %% [11.0] code for yylineno update goes here */
+ if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
+ {
+ int yyl;
+ for ( yyl = 0; yyl < yyleng; ++yyl )
+ if ( yytext[yyl] == '\n' )
+
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+;
+ }
+
do_action: /* This label is used only to access EOF actions. */
/* %% [12.0] debug code goes here */
@@ -1436,512 +1460,512 @@
case 1:
YY_RULE_SETUP
-#line 271 "pir.l"
+#line 262 "pir.l"
{ /* ignore whitespace */ }
YY_BREAK
case 2:
/* rule 2 can match eol */
YY_RULE_SETUP
-#line 273 "pir.l"
+#line 264 "pir.l"
{ /* a set of continuous newlines yields a single newline token. */
return TK_NL;
}
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 277 "pir.l"
+#line 268 "pir.l"
{ return TK_ASSIGN_USHIFT; }
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 278 "pir.l"
+#line 269 "pir.l"
{ return TK_USHIFT; }
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 279 "pir.l"
+#line 270 "pir.l"
{ return TK_ASSIGN_RSHIFT; }
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 280 "pir.l"
+#line 271 "pir.l"
{ return TK_RSHIFT; }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 281 "pir.l"
+#line 272 "pir.l"
{ return TK_LSHIFT; }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 282 "pir.l"
+#line 273 "pir.l"
{ return TK_ARROW; }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 283 "pir.l"
+#line 274 "pir.l"
{ return TK_EQ; }
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 284 "pir.l"
+#line 275 "pir.l"
{ return TK_NE; }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 285 "pir.l"
+#line 276 "pir.l"
{ return TK_LE; }
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 286 "pir.l"
+#line 277 "pir.l"
{ return TK_GE; }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 287 "pir.l"
+#line 278 "pir.l"
{ return TK_LT; }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 288 "pir.l"
+#line 279 "pir.l"
{ return TK_GT; }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 290 "pir.l"
+#line 281 "pir.l"
{ return TK_FDIV; }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 291 "pir.l"
+#line 282 "pir.l"
{ return TK_AND; }
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 292 "pir.l"
+#line 283 "pir.l"
{ return TK_OR; }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 293 "pir.l"
+#line 284 "pir.l"
{ return TK_XOR; }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 295 "pir.l"
+#line 286 "pir.l"
{ return '+'; }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 296 "pir.l"
+#line 287 "pir.l"
{ return '%'; }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 297 "pir.l"
+#line 288 "pir.l"
{ return '*'; }
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 298 "pir.l"
+#line 289 "pir.l"
{ return '/'; }
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 299 "pir.l"
+#line 290 "pir.l"
{ return '!'; }
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 300 "pir.l"
+#line 291 "pir.l"
{ return '~'; }
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 301 "pir.l"
+#line 292 "pir.l"
{ return '-'; }
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 302 "pir.l"
+#line 293 "pir.l"
{ return '('; }
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 303 "pir.l"
+#line 294 "pir.l"
{ return ')'; }
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 304 "pir.l"
+#line 295 "pir.l"
{ return ','; }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 305 "pir.l"
+#line 296 "pir.l"
{ return '['; }
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 306 "pir.l"
+#line 297 "pir.l"
{ return ']'; }
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 308 "pir.l"
+#line 299 "pir.l"
{ /* if the dot is surrounded by whitespace, it's a concatenation operator */
return TK_CONC;
}
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 311 "pir.l"
+#line 302 "pir.l"
{ return '.'; }
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 312 "pir.l"
+#line 303 "pir.l"
{ return '='; }
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 313 "pir.l"
+#line 304 "pir.l"
{ return ';'; }
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 315 "pir.l"
+#line 306 "pir.l"
{ return TK_ASSIGN_INC; }
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 316 "pir.l"
+#line 307 "pir.l"
{ return TK_ASSIGN_DEC; }
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 317 "pir.l"
+#line 308 "pir.l"
{ return TK_ASSIGN_DIV; }
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 318 "pir.l"
+#line 309 "pir.l"
{ return TK_ASSIGN_MUL; }
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 319 "pir.l"
+#line 310 "pir.l"
{ return TK_ASSIGN_MOD; }
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 320 "pir.l"
+#line 311 "pir.l"
{ return TK_ASSIGN_POW; }
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 321 "pir.l"
+#line 312 "pir.l"
{ return TK_ASSIGN_BOR; }
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 322 "pir.l"
+#line 313 "pir.l"
{ return TK_ASSIGN_BAND; }
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 323 "pir.l"
+#line 314 "pir.l"
{ return TK_ASSIGN_FDIV; }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 324 "pir.l"
+#line 315 "pir.l"
{ return TK_ASSIGN_BNOT; }
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 325 "pir.l"
+#line 316 "pir.l"
{ return TK_ASSIGN_CONC; }
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 327 "pir.l"
+#line 318 "pir.l"
{ return TK_IF; }
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 328 "pir.l"
+#line 319 "pir.l"
{ return TK_GOTO; }
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 329 "pir.l"
+#line 320 "pir.l"
{ return TK_N_OPERATORS; }
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 330 "pir.l"
+#line 321 "pir.l"
{ return TK_UNLESS; }
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 331 "pir.l"
+#line 322 "pir.l"
{ return TK_NULL; }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 333 "pir.l"
+#line 324 "pir.l"
{ return TK_INT; }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 334 "pir.l"
+#line 325 "pir.l"
{ return TK_NUM; }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 335 "pir.l"
+#line 326 "pir.l"
{ return TK_PMC; }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 336 "pir.l"
+#line 327 "pir.l"
{ return TK_STRING; }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 338 "pir.l"
+#line 329 "pir.l"
{ return TK_ARG; }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 339 "pir.l"
+#line 330 "pir.l"
{ return TK_CONST; }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 340 "pir.l"
+#line 331 "pir.l"
{ return TK_END; }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 342 "pir.l"
+#line 333 "pir.l"
{ return TK_GET_RESULTS; }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 343 "pir.l"
+#line 334 "pir.l"
{ return TK_GLOBALCONST; }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 344 "pir.l"
+#line 335 "pir.l"
{ return TK_HLL; }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 345 "pir.l"
+#line 336 "pir.l"
{ return TK_HLL_MAP; }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 346 "pir.l"
+#line 337 "pir.l"
{ return TK_INVOCANT; }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 347 "pir.l"
+#line 338 "pir.l"
{ return TK_LEX; }
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 348 "pir.l"
+#line 339 "pir.l"
{ return TK_LOADLIB; }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 349 "pir.l"
+#line 340 "pir.l"
{ return TK_LOCAL; }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 351 "pir.l"
+#line 342 "pir.l"
{ return TK_METH_CALL; }
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 352 "pir.l"
+#line 343 "pir.l"
{ return TK_NAMESPACE; }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 353 "pir.l"
+#line 344 "pir.l"
{ return TK_NCI_CALL; }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 354 "pir.l"
+#line 345 "pir.l"
{ return TK_PARAM; }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 355 "pir.l"
+#line 346 "pir.l"
{ return TK_BEGIN_CALL; }
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 356 "pir.l"
+#line 347 "pir.l"
{ return TK_BEGIN_RETURN; }
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 357 "pir.l"
+#line 348 "pir.l"
{ return TK_BEGIN_YIELD; }
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 358 "pir.l"
+#line 349 "pir.l"
{ return TK_CALL; }
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 359 "pir.l"
+#line 350 "pir.l"
{ return TK_END_CALL; }
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 360 "pir.l"
+#line 351 "pir.l"
{ return TK_END_RETURN; }
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 361 "pir.l"
+#line 352 "pir.l"
{ return TK_END_YIELD; }
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 362 "pir.l"
+#line 353 "pir.l"
{ return TK_PRAGMA; }
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 363 "pir.l"
+#line 354 "pir.l"
{ return TK_RESULT; }
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 364 "pir.l"
+#line 355 "pir.l"
{ return TK_RETURN; }
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 365 "pir.l"
+#line 356 "pir.l"
{ return TK_SUB; }
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 366 "pir.l"
+#line 357 "pir.l"
{ return TK_YIELD; }
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 368 "pir.l"
+#line 359 "pir.l"
{ return TK_FLAG_ANON; }
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 369 "pir.l"
+#line 360 "pir.l"
{ return TK_FLAG_INIT; }
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 370 "pir.l"
+#line 361 "pir.l"
{ return TK_FLAG_LOAD; }
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 371 "pir.l"
+#line 362 "pir.l"
{ return TK_FLAG_POSTCOMP; }
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 372 "pir.l"
+#line 363 "pir.l"
{ return TK_FLAG_IMMEDIATE; }
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 373 "pir.l"
+#line 364 "pir.l"
{ return TK_FLAG_MAIN; }
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 374 "pir.l"
+#line 365 "pir.l"
{ return TK_FLAG_METHOD; }
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 375 "pir.l"
+#line 366 "pir.l"
{ return TK_FLAG_LEX; }
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 376 "pir.l"
+#line 367 "pir.l"
{ return TK_FLAG_OUTER; }
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 377 "pir.l"
+#line 368 "pir.l"
{ return TK_FLAG_VTABLE; }
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 378 "pir.l"
+#line 369 "pir.l"
{ return TK_FLAG_MULTI; }
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 379 "pir.l"
+#line 370 "pir.l"
{ return TK_FLAG_LEXID; }
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 381 "pir.l"
+#line 372 "pir.l"
{ return TK_FLAG_UNIQUE_REG; }
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 382 "pir.l"
+#line 373 "pir.l"
{ return TK_FLAG_OPTIONAL; }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 383 "pir.l"
+#line 374 "pir.l"
{ return TK_FLAG_OPT_FLAG; }
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 384 "pir.l"
+#line 375 "pir.l"
{ return TK_FLAG_SLURPY; }
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 385 "pir.l"
+#line 376 "pir.l"
{ return TK_FLAG_NAMED; }
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 386 "pir.l"
+#line 377 "pir.l"
{ return TK_FLAG_FLAT; }
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 387 "pir.l"
+#line 378 "pir.l"
{ return TK_FLAG_INVOCANT; }
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 390 "pir.l"
+#line 381 "pir.l"
{ /* copy the string, remove the quotes. */
yylval->sval = dupstrn(yytext + 1, yyleng - 2);
return TK_STRINGC;
@@ -1949,27 +1973,27 @@
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 395 "pir.l"
+#line 386 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_SYM_PREG; }
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 396 "pir.l"
+#line 387 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_SYM_SREG; }
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 397 "pir.l"
+#line 388 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_SYM_NREG; }
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 398 "pir.l"
+#line 389 "pir.l"
{ yylval->ival = atoi(yytext + 2); return TK_SYM_IREG; }
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 400 "pir.l"
+#line 391 "pir.l"
{ /* make the label Id available in the parser. remove the ":" first. */
yylval->sval = dupstrn(yytext, yyleng - 1);
return TK_LABEL;
@@ -1977,7 +2001,7 @@
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 405 "pir.l"
+#line 396 "pir.l"
{ /* make the Id or op available in the parser. */
yylval->sval = dupstr(yytext);
return is_parrot_op(yytext) ? TK_PARROT_OP : TK_IDENT;
@@ -1985,49 +2009,49 @@
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 411 "pir.l"
+#line 402 "pir.l"
{ yylval->dval = atof(yytext); return TK_NUMC; }
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 412 "pir.l"
+#line 403 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 413 "pir.l"
+#line 404 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 414 "pir.l"
+#line 405 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 415 "pir.l"
+#line 406 "pir.l"
{ yylval->ival = atoi(yytext); return TK_INTC; }
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 420 "pir.l"
+#line 411 "pir.l"
{ /* any character not covered in the rules above is an error. */
lexer_state *my_lexer = yyget_extra(yyscanner);
syntax_error(yyscanner, my_lexer, "Unexpected character");
}
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 426 "pir.l"
+#line 417 "pir.l"
{ /* end of file, stop scanning. */
yyterminate();
}
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 430 "pir.l"
+#line 421 "pir.l"
ECHO;
YY_BREAK
-#line 2031 "pirlexer.c"
+#line 2055 "pirlexer.c"
case YY_END_OF_BUFFER:
{
@@ -2464,6 +2488,12 @@
yyg->yy_hold_char = *++yyg->yy_c_buf_p;
/* %% [19.0] update BOL and yylineno */
+ if ( c == '\n' )
+
+ do{ yylineno++;
+ yycolumn=0;
+ }while(0)
+;
return c;
}
@@ -3286,7 +3316,7 @@
/* %ok-for-header */
-#line 430 "pir.l"
+#line 421 "pir.l"
Modified: trunk/compilers/pirc/new/pirlexer.h
==============================================================================
--- trunk/compilers/pirc/new/pirlexer.h (original)
+++ trunk/compilers/pirc/new/pirlexer.h Wed Jul 30 09:37:41 2008
@@ -452,7 +452,7 @@
#undef YY_DECL
#endif
-#line 430 "pir.l"
+#line 421 "pir.l"
#line 459 "pirlexer.h"
Modified: trunk/compilers/pirc/new/pirparser.c
==============================================================================
--- trunk/compilers/pirc/new/pirparser.c (original)
+++ trunk/compilers/pirc/new/pirparser.c Wed Jul 30 09:37:41 2008
@@ -282,6 +282,13 @@
This is a complete rewrite of the parser for the PIR language.
+
+TODO:
+
+ * rename TK_SYM_?REG to TK_?REG (as there's no longer PASM registers)
+ * use a flex-generated line counter in the lexer instead of custom
+ code (this is in pir.l).
+
=cut
*/
@@ -366,7 +373,7 @@
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 82 "pir.y"
+#line 89 "pir.y"
{
double dval;
int ival;
@@ -381,7 +388,7 @@
void *fixme;
}
/* Line 187 of yacc.c. */
-#line 385 "pirparser.c"
+#line 392 "pirparser.c"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
@@ -394,7 +401,7 @@
/* Line 216 of yacc.c. */
-#line 398 "pirparser.c"
+#line 405 "pirparser.c"
#ifdef short
# undef short
@@ -782,34 +789,34 @@
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 329, 329, 334, 335, 338, 339, 342, 343, 344,
- 345, 346, 347, 348, 351, 355, 361, 365, 372, 376,
- 377, 381, 383, 390, 391, 390, 397, 398, 402, 403,
- 407, 409, 411, 413, 415, 417, 419, 421, 423, 425,
- 427, 429, 434, 435, 436, 437, 440, 441, 444, 455,
- 456, 456, 461, 463, 465, 468, 469, 470, 471, 472,
- 473, 474, 475, 476, 477, 478, 479, 480, 483, 492,
- 496, 502, 508, 511, 536, 538, 540, 544, 546, 548,
- 550, 552, 557, 557, 561, 562, 565, 569, 575, 576,
- 580, 581, 584, 588, 590, 594, 601, 608, 609, 613,
- 615, 619, 620, 624, 628, 636, 642, 646, 648, 652,
- 656, 657, 662, 669, 670, 673, 686, 687, 691, 693,
- 697, 701, 703, 705, 711, 712, 719, 720, 724, 726,
- 730, 732, 736, 738, 740, 745, 746, 749, 756, 762,
- 764, 768, 769, 772, 774, 778, 780, 785, 790, 791,
- 795, 797, 801, 810, 811, 815, 817, 819, 821, 823,
- 830, 831, 835, 836, 839, 846, 847, 850, 851, 854,
- 858, 862, 868, 873, 874, 878, 880, 884, 885, 888,
- 894, 902, 910, 919, 920, 925, 927, 932, 937, 938,
- 942, 944, 948, 954, 955, 959, 961, 968, 969, 973,
- 977, 981, 982, 986, 988, 990, 992, 1002, 1003, 1004,
- 1007, 1008, 1011, 1012, 1013, 1016, 1017, 1018, 1019, 1020,
- 1021, 1024, 1025, 1026, 1027, 1030, 1031, 1034, 1035, 1036,
- 1037, 1040, 1041, 1044, 1045, 1046, 1049, 1050, 1051, 1052,
- 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062,
- 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1075,
- 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085,
- 1086, 1087, 1088
+ 0, 336, 336, 341, 342, 345, 346, 349, 350, 351,
+ 352, 353, 354, 355, 358, 362, 368, 372, 379, 383,
+ 384, 388, 390, 397, 398, 397, 404, 405, 409, 410,
+ 414, 416, 418, 420, 422, 424, 426, 428, 430, 432,
+ 434, 436, 441, 442, 443, 444, 447, 448, 451, 462,
+ 463, 463, 468, 470, 472, 475, 476, 477, 478, 479,
+ 480, 481, 482, 483, 484, 485, 486, 487, 490, 499,
+ 503, 509, 515, 518, 543, 545, 547, 551, 553, 555,
+ 557, 559, 564, 564, 568, 569, 572, 576, 582, 583,
+ 587, 588, 591, 595, 597, 601, 608, 615, 616, 620,
+ 622, 626, 627, 631, 635, 643, 649, 653, 655, 659,
+ 663, 664, 669, 676, 677, 680, 693, 694, 698, 700,
+ 704, 708, 710, 712, 718, 719, 726, 727, 731, 733,
+ 737, 739, 743, 745, 747, 752, 753, 756, 763, 769,
+ 771, 775, 776, 779, 781, 785, 787, 792, 797, 798,
+ 802, 804, 808, 817, 818, 822, 824, 826, 828, 830,
+ 837, 838, 842, 843, 846, 853, 854, 857, 858, 861,
+ 865, 869, 875, 880, 881, 885, 887, 891, 892, 895,
+ 901, 909, 917, 926, 927, 932, 934, 939, 944, 945,
+ 949, 951, 955, 961, 962, 966, 968, 975, 976, 980,
+ 984, 988, 989, 993, 995, 997, 999, 1009, 1010, 1011,
+ 1014, 1015, 1018, 1019, 1020, 1023, 1024, 1025, 1026, 1027,
+ 1028, 1031, 1032, 1033, 1034, 1037, 1038, 1041, 1042, 1043,
+ 1044, 1047, 1048, 1051, 1052, 1053, 1056, 1057, 1058, 1059,
+ 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069,
+ 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1082,
+ 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092,
+ 1093, 1094, 1095
};
#endif
@@ -2056,127 +2063,127 @@
switch (yyn)
{
case 14:
-#line 352 "pir.y"
+#line 359 "pir.y"
{ set_pragma(PRAGMA_N_OPERATORS, (yyvsp[(3) - (3)].ival)); ;}
break;
case 15:
-#line 356 "pir.y"
+#line 363 "pir.y"
{ load_library(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 16:
-#line 362 "pir.y"
+#line 369 "pir.y"
{ /*set_hll($2, $4);*/ ;}
break;
case 17:
-#line 366 "pir.y"
+#line 373 "pir.y"
{ set_hll_map((yyvsp[(2) - (4)].sval), (yyvsp[(4) - (4)].sval)); ;}
break;
case 19:
-#line 376 "pir.y"
+#line 383 "pir.y"
{ (yyval.fixme) = NULL; ;}
break;
case 20:
-#line 378 "pir.y"
+#line 385 "pir.y"
{ (yyval.fixme) = (yyvsp[(1) - (1)].fixme); ;}
break;
case 21:
-#line 382 "pir.y"
+#line 389 "pir.y"
{ (yyval.fixme) = (yyvsp[(1) - (1)].sval); ;}
break;
case 22:
-#line 384 "pir.y"
+#line 391 "pir.y"
{ ;}
break;
case 23:
-#line 390 "pir.y"
+#line 397 "pir.y"
{ new_subr(lexer, (yyvsp[(2) - (2)].sval)); ;}
break;
case 24:
-#line 391 "pir.y"
+#line 398 "pir.y"
{ set_sub_flag(lexer, (yyvsp[(4) - (5)].ival)); ;}
break;
case 28:
-#line 402 "pir.y"
+#line 409 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 29:
-#line 404 "pir.y"
+#line 411 "pir.y"
{ (yyval.ival) |= (yyvsp[(2) - (2)].ival); ;}
break;
case 30:
-#line 408 "pir.y"
+#line 415 "pir.y"
{ (yyval.ival) = SUB_FLAG_ANON;;}
break;
case 31:
-#line 410 "pir.y"
+#line 417 "pir.y"
{ (yyval.ival) = SUB_FLAG_INIT; ;}
break;
case 32:
-#line 412 "pir.y"
+#line 419 "pir.y"
{ (yyval.ival) = SUB_FLAG_LOAD; ;}
break;
case 33:
-#line 414 "pir.y"
+#line 421 "pir.y"
{ (yyval.ival) = SUB_FLAG_MAIN; ;}
break;
case 34:
-#line 416 "pir.y"
+#line 423 "pir.y"
{ (yyval.ival) = SUB_FLAG_METHOD; ;}
break;
case 35:
-#line 418 "pir.y"
+#line 425 "pir.y"
{ (yyval.ival) = SUB_FLAG_LEX; ;}
break;
case 36:
-#line 420 "pir.y"
+#line 427 "pir.y"
{ (yyval.ival) = SUB_FLAG_POSTCOMP; ;}
break;
case 37:
-#line 422 "pir.y"
+#line 429 "pir.y"
{ (yyval.ival) = SUB_FLAG_IMMEDIATE; ;}
break;
case 38:
-#line 424 "pir.y"
+#line 431 "pir.y"
{ (yyval.ival) = SUB_FLAG_MULTI; ;}
break;
case 39:
-#line 426 "pir.y"
+#line 433 "pir.y"
{ (yyval.ival) = SUB_FLAG_OUTER; set_sub_outer(lexer, (yyvsp[(3) -
(4)].sval)); ;}
break;
case 40:
-#line 428 "pir.y"
+#line 435 "pir.y"
{ (yyval.ival) = SUB_FLAG_VTABLE; set_sub_vtable(lexer, (yyvsp[(2) -
(2)].sval)); ;}
break;
case 41:
-#line 430 "pir.y"
+#line 437 "pir.y"
{ (yyval.ival) = SUB_FLAG_LEXID; /* do something with this */ ;}
break;
case 48:
-#line 445 "pir.y"
+#line 452 "pir.y"
{ /* set_param_flag($2, $3);
IF_NAMED_PARAM_SET_ALIAS($2, $3);
*/
@@ -2184,22 +2191,22 @@
break;
case 50:
-#line 456 "pir.y"
+#line 463 "pir.y"
{ new_instr(lexer); ;}
break;
case 52:
-#line 462 "pir.y"
+#line 469 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 53:
-#line 464 "pir.y"
+#line 471 "pir.y"
{ set_label(lexer, (yyvsp[(1) - (2)].sval)); ;}
break;
case 68:
-#line 484 "pir.y"
+#line 491 "pir.y"
{ if (lexer->parse_errors > MAX_NUM_ERRORS) {
fprintf(stderr, "Too many errors. Compilation
aborted.\n");
exit(EXIT_FAILURE); /* fix: bail out and free()
all memory */
@@ -2209,108 +2216,108 @@
break;
case 69:
-#line 493 "pir.y"
+#line 500 "pir.y"
{ set_instr(lexer, "null");
add_operand(lexer, expr_from_target((yyvsp[(2) -
(3)].targ)));
;}
break;
case 70:
-#line 497 "pir.y"
+#line 504 "pir.y"
{ set_instr(lexer, "null");
add_operand(lexer, expr_from_target((yyvsp[(1) -
(4)].targ)));
;}
break;
case 71:
-#line 503 "pir.y"
+#line 510 "pir.y"
{ set_instr(lexer, "get_results");
add_operand(lexer, expr_from_target((yyvsp[(2) -
(3)].targ)));
;}
break;
case 73:
-#line 512 "pir.y"
+#line 519 "pir.y"
{ add_first_operand(lexer, expr_from_target((yyvsp[(1) - (3)].targ))); ;}
break;
case 74:
-#line 537 "pir.y"
+#line 544 "pir.y"
{ assign(lexer, RHS_AUGMENT, (yyvsp[(1) - (2)].sval), (yyvsp[(2) -
(2)].expr)); ;}
break;
case 75:
-#line 539 "pir.y"
+#line 546 "pir.y"
{ assign(lexer, RHS_SETKEYED, (yyvsp[(1) - (3)].expr), (yyvsp[(3) -
(3)].expr)); ;}
break;
case 76:
-#line 541 "pir.y"
+#line 548 "pir.y"
{ /* nothing to do */ ;}
break;
case 77:
-#line 545 "pir.y"
+#line 552 "pir.y"
{ assign(lexer, RHS_UNOP, (yyvsp[(1) - (2)].sval), (yyvsp[(2) -
(2)].expr)); ;}
break;
case 78:
-#line 547 "pir.y"
+#line 554 "pir.y"
{ assign(lexer, RHS_SIMPLE, (yyvsp[(1) - (1)].expr)); ;}
break;
case 79:
-#line 549 "pir.y"
+#line 556 "pir.y"
{ assign(lexer, RHS_BINOP, (yyvsp[(2) - (3)].sval), (yyvsp[(1) -
(3)].expr), (yyvsp[(3) - (3)].expr)); ;}
break;
case 80:
-#line 551 "pir.y"
+#line 558 "pir.y"
{ assign(lexer, RHS_GETKEYED, (yyvsp[(1) - (2)].targ), (yyvsp[(2) -
(2)].expr)); ;}
break;
case 81:
-#line 553 "pir.y"
+#line 560 "pir.y"
{ /* nothing to do */ ;}
break;
case 82:
-#line 557 "pir.y"
+#line 564 "pir.y"
{ set_instr(lexer, (yyvsp[(1) - (1)].sval)); ;}
break;
case 87:
-#line 570 "pir.y"
+#line 577 "pir.y"
{ add_operand(lexer, (yyvsp[(1) - (1)].expr)); ;}
break;
case 88:
-#line 575 "pir.y"
+#line 582 "pir.y"
{ /* nothing to do */;}
break;
case 89:
-#line 577 "pir.y"
+#line 584 "pir.y"
{ add_operand(lexer, (yyvsp[(3) - (3)].expr)); ;}
break;
case 92:
-#line 585 "pir.y"
+#line 592 "pir.y"
{ (yyval.expr) = (yyvsp[(2) - (3)].expr); ;}
break;
case 93:
-#line 589 "pir.y"
+#line 596 "pir.y"
{ (yyval.expr) = (yyvsp[(1) - (1)].expr); ;}
break;
case 94:
-#line 591 "pir.y"
+#line 598 "pir.y"
{ (yyval.expr) = add_key((yyvsp[(1) - (3)].expr), (yyvsp[(3) -
(3)].expr)); ;}
break;
case 95:
-#line 595 "pir.y"
+#line 602 "pir.y"
{ /* it was "unless", so "invert" the opcode */
if ((yyvsp[(1) - (5)].ival) > 0) {
invert_instr(lexer);
@@ -2320,7 +2327,7 @@
break;
case 96:
-#line 602 "pir.y"
+#line 609 "pir.y"
{ set_instr(lexer, (yyvsp[(1) - (5)].sval));
add_operand(lexer, (yyvsp[(2) - (5)].expr));
add_operand(lexer, expr_from_ident((yyvsp[(4) -
(5)].sval)));
@@ -2328,34 +2335,34 @@
break;
case 97:
-#line 608 "pir.y"
+#line 615 "pir.y"
{ (yyval.ival) = 0; /* no need to invert */ ;}
break;
case 98:
-#line 609 "pir.y"
+#line 616 "pir.y"
{ (yyval.ival) = 1; /* yes, invert opname */ ;}
break;
case 99:
-#line 614 "pir.y"
+#line 621 "pir.y"
{ (yyval.sval) = "if_null"; ;}
break;
case 100:
-#line 616 "pir.y"
+#line 623 "pir.y"
{ (yyval.sval) = "unless_null"; ;}
break;
case 103:
-#line 625 "pir.y"
+#line 632 "pir.y"
{ set_instr(lexer, "if");
add_operand(lexer, (yyvsp[(1) - (1)].expr));
;}
break;
case 104:
-#line 629 "pir.y"
+#line 636 "pir.y"
{ set_instr(lexer, (yyvsp[(2) - (3)].sval));
add_operand(lexer, (yyvsp[(1) - (3)].expr));
add_operand(lexer, (yyvsp[(3) - (3)].expr));
@@ -2363,49 +2370,49 @@
break;
case 105:
-#line 637 "pir.y"
+#line 644 "pir.y"
{ set_instr(lexer, "branch");
add_operand(lexer, expr_from_ident((yyvsp[(2) -
(3)].sval)));
;}
break;
case 106:
-#line 643 "pir.y"
+#line 650 "pir.y"
{ declare_local(lexer, (yyvsp[(2) - (4)].ival), (yyvsp[(3) - (4)].targ));
;}
break;
case 107:
-#line 647 "pir.y"
+#line 654 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 108:
-#line 649 "pir.y"
+#line 656 "pir.y"
{ (yyval.targ) = add_local((yyvsp[(1) - (3)].targ), (yyvsp[(3) -
(3)].targ)); ;}
break;
case 109:
-#line 653 "pir.y"
+#line 660 "pir.y"
{ (yyval.targ) = new_local((yyvsp[(1) - (2)].sval), (yyvsp[(2) -
(2)].ival)); ;}
break;
case 110:
-#line 656 "pir.y"
+#line 663 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 111:
-#line 657 "pir.y"
+#line 664 "pir.y"
{ (yyval.ival) = 1; ;}
break;
case 112:
-#line 663 "pir.y"
+#line 670 "pir.y"
{ set_lex_flag((yyvsp[(4) - (5)].targ), (yyvsp[(2) - (5)].sval)); ;}
break;
case 115:
-#line 678 "pir.y"
+#line 685 "pir.y"
{ /* $4 contains an invocation object */
set_invocation_args((yyvsp[(4) - (8)].invo),
(yyvsp[(3) - (8)].argm));
set_invocation_results((yyvsp[(4) - (8)].invo),
(yyvsp[(6) - (8)].targ));
@@ -2414,171 +2421,171 @@
break;
case 116:
-#line 686 "pir.y"
+#line 693 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 117:
-#line 688 "pir.y"
+#line 695 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 118:
-#line 692 "pir.y"
+#line 699 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 119:
-#line 694 "pir.y"
+#line 701 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) -
(2)].argm)); ;}
break;
case 120:
-#line 698 "pir.y"
+#line 705 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 121:
-#line 702 "pir.y"
+#line 709 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(2) - (3)].targ),
(yyvsp[(3) - (3)].targ)); ;}
break;
case 122:
-#line 704 "pir.y"
+#line 711 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_NCI, (yyvsp[(2) - (2)].targ)); ;}
break;
case 123:
-#line 707 "pir.y"
+#line 714 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_METH, (yyvsp[(2) - (5)].targ),
(yyvsp[(5) - (5)].targ)); ;}
break;
case 124:
-#line 711 "pir.y"
+#line 718 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 125:
-#line 713 "pir.y"
+#line 720 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (2)].targ); ;}
break;
case 126:
-#line 719 "pir.y"
+#line 726 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 127:
-#line 721 "pir.y"
+#line 728 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 128:
-#line 725 "pir.y"
+#line 732 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 129:
-#line 727 "pir.y"
+#line 734 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (2)].targ), (yyvsp[(2) -
(2)].targ)); ;}
break;
case 130:
-#line 731 "pir.y"
+#line 738 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 131:
-#line 733 "pir.y"
+#line 740 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 132:
-#line 737 "pir.y"
+#line 744 "pir.y"
{ set_invocation_results((yyvsp[(3) - (4)].invo), (yyvsp[(1) -
(4)].targ)); ;}
break;
case 133:
-#line 739 "pir.y"
+#line 746 "pir.y"
{ set_invocation_results((yyvsp[(3) - (4)].invo), (yyvsp[(1) -
(4)].targ)); ;}
break;
case 134:
-#line 741 "pir.y"
+#line 748 "pir.y"
{ set_invocation_results((yyvsp[(1) - (2)].invo), NULL); ;}
break;
case 137:
-#line 750 "pir.y"
+#line 757 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_METH, (yyvsp[(1) - (4)].targ),
(yyvsp[(3) - (4)].targ));
set_invocation_args((yyval.invo), (yyvsp[(4) -
(4)].argm));
;}
break;
case 138:
-#line 757 "pir.y"
+#line 764 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_PCC, (yyvsp[(1) - (2)].targ), NULL);
set_invocation_args((yyval.invo), (yyvsp[(2) -
(2)].argm));
;}
break;
case 139:
-#line 763 "pir.y"
+#line 770 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 140:
-#line 765 "pir.y"
+#line 772 "pir.y"
{ (yyval.targ) = target_from_string((yyvsp[(1) - (1)].sval)); ;}
break;
case 143:
-#line 773 "pir.y"
+#line 780 "pir.y"
{ (yyval.targ) = target_from_ident((yyvsp[(1) - (1)].sval)); ;}
break;
case 144:
-#line 775 "pir.y"
+#line 782 "pir.y"
{ (yyval.targ) = reg(PMC_TYPE, (yyvsp[(1) - (1)].ival), 0); ;}
break;
case 145:
-#line 779 "pir.y"
+#line 786 "pir.y"
{ (yyval.targ) = target_from_string((yyvsp[(1) - (1)].sval)); ;}
break;
case 146:
-#line 781 "pir.y"
+#line 788 "pir.y"
{ (yyval.targ) = reg(STRING_TYPE, (yyvsp[(1) - (1)].ival), 0); ;}
break;
case 147:
-#line 786 "pir.y"
+#line 793 "pir.y"
{ (yyval.targ) = (yyvsp[(2) - (3)].targ); ;}
break;
case 148:
-#line 790 "pir.y"
+#line 797 "pir.y"
{ (yyval.targ) = NULL; ;}
break;
case 149:
-#line 792 "pir.y"
+#line 799 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 150:
-#line 796 "pir.y"
+#line 803 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 151:
-#line 798 "pir.y"
+#line 805 "pir.y"
{ (yyval.targ) = add_target(lexer, (yyvsp[(1) - (3)].targ), (yyvsp[(3) -
(3)].targ)); ;}
break;
case 152:
-#line 802 "pir.y"
+#line 809 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (2)].targ);
set_param_flag((yyvsp[(1) - (2)].targ),
(yyvsp[(2) - (2)].ival));
/* get the :named argument if necessary */
@@ -2587,110 +2594,110 @@
break;
case 153:
-#line 810 "pir.y"
+#line 817 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 154:
-#line 812 "pir.y"
+#line 819 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 155:
-#line 816 "pir.y"
+#line 823 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPTIONAL; ;}
break;
case 156:
-#line 818 "pir.y"
+#line 825 "pir.y"
{ (yyval.ival) = TARGET_FLAG_OPT_FLAG; ;}
break;
case 157:
-#line 820 "pir.y"
+#line 827 "pir.y"
{ (yyval.ival) = TARGET_FLAG_SLURPY; ;}
break;
case 158:
-#line 822 "pir.y"
+#line 829 "pir.y"
{ (yyval.ival) = TARGET_FLAG_UNIQUE_REG; ;}
break;
case 159:
-#line 824 "pir.y"
+#line 831 "pir.y"
{ (yyval.ival) = TARGET_FLAG_NAMED;
STORE_NAMED_ALIAS((yyvsp[(2) - (2)].sval));
;}
break;
case 160:
-#line 830 "pir.y"
+#line 837 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 161:
-#line 832 "pir.y"
+#line 839 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 164:
-#line 840 "pir.y"
+#line 847 "pir.y"
{ (yyval.ival) = TARGET_FLAG_INVOCANT; ;}
break;
case 169:
-#line 855 "pir.y"
+#line 862 "pir.y"
{ (yyval.fixme) = invoke(lexer, CALL_RET);
set_invocation_args((yyval.fixme), (yyvsp[(2) -
(3)].argm));
;}
break;
case 170:
-#line 859 "pir.y"
+#line 866 "pir.y"
{ set_invocation_type((yyvsp[(2) - (3)].invo), CALL_TAIL); ;}
break;
case 171:
-#line 863 "pir.y"
+#line 870 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args((yyval.invo), (yyvsp[(2) -
(3)].argm));
;}
break;
case 172:
-#line 869 "pir.y"
+#line 876 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 173:
-#line 873 "pir.y"
+#line 880 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 174:
-#line 875 "pir.y"
+#line 882 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 175:
-#line 879 "pir.y"
+#line 886 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 176:
-#line 881 "pir.y"
+#line 888 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (3)].argm), (yyvsp[(3) -
(3)].argm)); ;}
break;
case 179:
-#line 889 "pir.y"
+#line 896 "pir.y"
{ (yyval.argm) = new_argument((yyvsp[(3) - (3)].expr));
set_arg_named((yyval.argm), (yyvsp[(1) -
(3)].sval));
;}
break;
case 180:
-#line 895 "pir.y"
+#line 902 "pir.y"
{ (yyval.argm) = new_argument((yyvsp[(1) - (2)].expr));
set_arg_flag((yyval.argm), (yyvsp[(2) -
(2)].ival));
IF_NAMED_ARG_SET_ALIAS((yyval.argm), (yyvsp[(2)
- (2)].ival));
@@ -2698,459 +2705,459 @@
break;
case 181:
-#line 905 "pir.y"
+#line 912 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_RET);
set_invocation_args((yyval.invo), (yyvsp[(3) -
(5)].argm));
;}
break;
case 182:
-#line 913 "pir.y"
+#line 920 "pir.y"
{ (yyval.invo) = invoke(lexer, CALL_YIELD);
set_invocation_args((yyval.invo), (yyvsp[(3) -
(5)].argm));
;}
break;
case 183:
-#line 919 "pir.y"
+#line 926 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 184:
-#line 921 "pir.y"
+#line 928 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 185:
-#line 926 "pir.y"
+#line 933 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 186:
-#line 928 "pir.y"
+#line 935 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) -
(2)].argm)); ;}
break;
case 187:
-#line 933 "pir.y"
+#line 940 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 188:
-#line 937 "pir.y"
+#line 944 "pir.y"
{ (yyval.argm) = NULL; ;}
break;
case 189:
-#line 939 "pir.y"
+#line 946 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 190:
-#line 943 "pir.y"
+#line 950 "pir.y"
{ (yyval.argm) = (yyvsp[(1) - (1)].argm); ;}
break;
case 191:
-#line 945 "pir.y"
+#line 952 "pir.y"
{ (yyval.argm) = add_arg((yyvsp[(1) - (2)].argm), (yyvsp[(2) -
(2)].argm)); ;}
break;
case 192:
-#line 949 "pir.y"
+#line 956 "pir.y"
{ (yyval.argm) = (yyvsp[(2) - (3)].argm); ;}
break;
case 193:
-#line 954 "pir.y"
+#line 961 "pir.y"
{ (yyval.ival) = 0; ;}
break;
case 194:
-#line 956 "pir.y"
+#line 963 "pir.y"
{ SET_FLAG((yyval.ival), (yyvsp[(2) - (2)].ival)); ;}
break;
case 195:
-#line 960 "pir.y"
+#line 967 "pir.y"
{ (yyval.ival) = ARG_FLAG_FLAT; ;}
break;
case 196:
-#line 962 "pir.y"
+#line 969 "pir.y"
{ (yyval.ival) = ARG_FLAG_NAMED;
STORE_NAMED_ALIAS((yyvsp[(2) - (2)].sval));
;}
break;
case 197:
-#line 968 "pir.y"
+#line 975 "pir.y"
{ (yyval.sval) = NULL; ;}
break;
case 198:
-#line 970 "pir.y"
+#line 977 "pir.y"
{ (yyval.sval) = (yyvsp[(1) - (1)].sval); ;}
break;
case 199:
-#line 974 "pir.y"
+#line 981 "pir.y"
{ (yyval.sval) = (yyvsp[(2) - (3)].sval); ;}
break;
case 200:
-#line 978 "pir.y"
+#line 985 "pir.y"
{ define_const(lexer, (yyvsp[(2) - (2)].constval), !GLOBALCONST); ;}
break;
case 202:
-#line 983 "pir.y"
+#line 990 "pir.y"
{ define_const(lexer, (yyvsp[(2) - (3)].constval), GLOBALCONST); ;}
break;
case 203:
-#line 987 "pir.y"
+#line 994 "pir.y"
{ (yyval.constval) = new_const(INT_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].ival)); ;}
break;
case 204:
-#line 989 "pir.y"
+#line 996 "pir.y"
{ (yyval.constval) = new_const(NUM_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].dval)); ;}
break;
case 205:
-#line 991 "pir.y"
+#line 998 "pir.y"
{ (yyval.constval) = new_const(PMC_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].sval)); ;}
break;
case 206:
-#line 993 "pir.y"
+#line 1000 "pir.y"
{ (yyval.constval) = new_const(STRING_TYPE, (yyvsp[(2) - (4)].sval),
(yyvsp[(4) - (4)].sval)); ;}
break;
case 207:
-#line 1002 "pir.y"
+#line 1009 "pir.y"
{ (yyval.expr) = expr_from_const((yyvsp[(1) - (1)].constval)); ;}
break;
case 208:
-#line 1003 "pir.y"
+#line 1010 "pir.y"
{ (yyval.expr) = expr_from_target((yyvsp[(1) - (1)].targ)); ;}
break;
case 209:
-#line 1004 "pir.y"
+#line 1011 "pir.y"
{ (yyval.expr) = expr_from_ident((yyvsp[(1) - (1)].sval)); ;}
break;
case 210:
-#line 1007 "pir.y"
+#line 1014 "pir.y"
{ (yyval.expr) = expr_from_target((yyvsp[(1) - (1)].targ)); ;}
break;
case 211:
-#line 1008 "pir.y"
+#line 1015 "pir.y"
{ (yyval.expr) = expr_from_const((yyvsp[(1) - (1)].constval)); ;}
break;
case 212:
-#line 1011 "pir.y"
+#line 1018 "pir.y"
{ (yyval.constval) = new_const(STRING_TYPE, NULL, (yyvsp[(1) -
(1)].sval)); ;}
break;
case 213:
-#line 1012 "pir.y"
+#line 1019 "pir.y"
{ (yyval.constval) = new_const(INT_TYPE, NULL, (yyvsp[(1) - (1)].ival)); ;}
break;
case 214:
-#line 1013 "pir.y"
+#line 1020 "pir.y"
{ (yyval.constval) = new_const(NUM_TYPE, NULL, (yyvsp[(1) - (1)].dval)); ;}
break;
case 215:
-#line 1016 "pir.y"
+#line 1023 "pir.y"
{ (yyval.sval) = "ne"; ;}
break;
case 216:
-#line 1017 "pir.y"
+#line 1024 "pir.y"
{ (yyval.sval) = "eq"; ;}
break;
case 217:
-#line 1018 "pir.y"
+#line 1025 "pir.y"
{ (yyval.sval) = "lt"; ;}
break;
case 218:
-#line 1019 "pir.y"
+#line 1026 "pir.y"
{ (yyval.sval) = "le"; ;}
break;
case 219:
-#line 1020 "pir.y"
+#line 1027 "pir.y"
{ (yyval.sval) = "ge"; ;}
break;
case 220:
-#line 1021 "pir.y"
+#line 1028 "pir.y"
{ (yyval.sval) = "gt"; ;}
break;
case 221:
-#line 1024 "pir.y"
+#line 1031 "pir.y"
{ (yyval.ival) = INT_TYPE; ;}
break;
case 222:
-#line 1025 "pir.y"
+#line 1032 "pir.y"
{ (yyval.ival) = NUM_TYPE; ;}
break;
case 223:
-#line 1026 "pir.y"
+#line 1033 "pir.y"
{ (yyval.ival) = PMC_TYPE; ;}
break;
case 224:
-#line 1027 "pir.y"
+#line 1034 "pir.y"
{ (yyval.ival) = STRING_TYPE; ;}
break;
case 225:
-#line 1030 "pir.y"
+#line 1037 "pir.y"
{ (yyval.targ) = (yyvsp[(1) - (1)].targ); ;}
break;
case 226:
-#line 1031 "pir.y"
+#line 1038 "pir.y"
{ (yyval.targ) = new_target(UNKNOWN_TYPE, (yyvsp[(1) - (1)].sval)); ;}
break;
case 227:
-#line 1034 "pir.y"
+#line 1041 "pir.y"
{ (yyval.targ) = reg(PMC_TYPE, (yyvsp[(1) - (1)].ival), 0); ;}
break;
case 228:
-#line 1035 "pir.y"
+#line 1042 "pir.y"
{ (yyval.targ) = reg(NUM_TYPE, (yyvsp[(1) - (1)].ival), 0); ;}
break;
case 229:
-#line 1036 "pir.y"
+#line 1043 "pir.y"
{ (yyval.targ) = reg(INT_TYPE, (yyvsp[(1) - (1)].ival), 0); ;}
break;
case 230:
-#line 1037 "pir.y"
+#line 1044 "pir.y"
{ (yyval.targ) = reg(STRING_TYPE, (yyvsp[(1) - (1)].ival), 0); ;}
break;
case 233:
-#line 1044 "pir.y"
+#line 1051 "pir.y"
{ (yyval.sval) = "neg"; ;}
break;
case 234:
-#line 1045 "pir.y"
+#line 1052 "pir.y"
{ (yyval.sval) = "not"; ;}
break;
case 235:
-#line 1046 "pir.y"
+#line 1053 "pir.y"
{ (yyval.sval) = "bnot"; ;}
break;
case 236:
-#line 1049 "pir.y"
+#line 1056 "pir.y"
{ (yyval.sval) = "add"; ;}
break;
case 237:
-#line 1050 "pir.y"
+#line 1057 "pir.y"
{ (yyval.sval) = "sub"; ;}
break;
case 238:
-#line 1051 "pir.y"
+#line 1058 "pir.y"
{ (yyval.sval) = "div"; ;}
break;
case 239:
-#line 1052 "pir.y"
+#line 1059 "pir.y"
{ (yyval.sval) = "mul"; ;}
break;
case 240:
-#line 1053 "pir.y"
+#line 1060 "pir.y"
{ (yyval.sval) = "mod"; ;}
break;
case 241:
-#line 1054 "pir.y"
+#line 1061 "pir.y"
{ (yyval.sval) = "bor"; ;}
break;
case 242:
-#line 1055 "pir.y"
+#line 1062 "pir.y"
{ (yyval.sval) = "band"; ;}
break;
case 243:
-#line 1056 "pir.y"
+#line 1063 "pir.y"
{ (yyval.sval) = "bxor"; ;}
break;
case 244:
-#line 1057 "pir.y"
+#line 1064 "pir.y"
{ (yyval.sval) = "pow"; ;}
break;
case 245:
-#line 1058 "pir.y"
+#line 1065 "pir.y"
{ (yyval.sval) = "concat"; ;}
break;
case 246:
-#line 1059 "pir.y"
+#line 1066 "pir.y"
{ (yyval.sval) = "lsr"; ;}
break;
case 247:
-#line 1060 "pir.y"
+#line 1067 "pir.y"
{ (yyval.sval) = "shr"; ;}
break;
case 248:
-#line 1061 "pir.y"
+#line 1068 "pir.y"
{ (yyval.sval) = "shl"; ;}
break;
case 249:
-#line 1062 "pir.y"
+#line 1069 "pir.y"
{ (yyval.sval) = "or"; ;}
break;
case 250:
-#line 1063 "pir.y"
+#line 1070 "pir.y"
{ (yyval.sval) = "and"; ;}
break;
case 251:
-#line 1064 "pir.y"
+#line 1071 "pir.y"
{ (yyval.sval) = "fdiv"; ;}
break;
case 252:
-#line 1065 "pir.y"
+#line 1072 "pir.y"
{ (yyval.sval) = "xor"; ;}
break;
case 253:
-#line 1066 "pir.y"
+#line 1073 "pir.y"
{ (yyval.sval) = "iseq"; ;}
break;
case 254:
-#line 1067 "pir.y"
+#line 1074 "pir.y"
{ (yyval.sval) = "isle"; ;}
break;
case 255:
-#line 1068 "pir.y"
+#line 1075 "pir.y"
{ (yyval.sval) = "islt"; ;}
break;
case 256:
-#line 1069 "pir.y"
+#line 1076 "pir.y"
{ (yyval.sval) = "isge"; ;}
break;
case 257:
-#line 1070 "pir.y"
+#line 1077 "pir.y"
{ (yyval.sval) = "isgt"; ;}
break;
case 258:
-#line 1071 "pir.y"
+#line 1078 "pir.y"
{ (yyval.sval) = "isne"; ;}
break;
case 259:
-#line 1075 "pir.y"
+#line 1082 "pir.y"
{ (yyval.sval) = "add"; ;}
break;
case 260:
-#line 1076 "pir.y"
+#line 1083 "pir.y"
{ (yyval.sval) = "sub"; ;}
break;
case 261:
-#line 1077 "pir.y"
+#line 1084 "pir.y"
{ (yyval.sval) = "mul"; ;}
break;
case 262:
-#line 1078 "pir.y"
+#line 1085 "pir.y"
{ (yyval.sval) = "mod"; ;}
break;
case 263:
-#line 1079 "pir.y"
+#line 1086 "pir.y"
{ (yyval.sval) = "pow"; ;}
break;
case 264:
-#line 1080 "pir.y"
+#line 1087 "pir.y"
{ (yyval.sval) = "div"; ;}
break;
case 265:
-#line 1081 "pir.y"
+#line 1088 "pir.y"
{ (yyval.sval) = "fdiv"; ;}
break;
case 266:
-#line 1082 "pir.y"
+#line 1089 "pir.y"
{ (yyval.sval) = "bor"; ;}
break;
case 267:
-#line 1083 "pir.y"
+#line 1090 "pir.y"
{ (yyval.sval) = "band" ;}
break;
case 268:
-#line 1084 "pir.y"
+#line 1091 "pir.y"
{ (yyval.sval) = "bxor"; ;}
break;
case 269:
-#line 1085 "pir.y"
+#line 1092 "pir.y"
{ (yyval.sval) = "concat"; ;}
break;
case 270:
-#line 1086 "pir.y"
+#line 1093 "pir.y"
{ (yyval.sval) = "shr"; ;}
break;
case 271:
-#line 1087 "pir.y"
+#line 1094 "pir.y"
{ (yyval.sval) = "shl"; ;}
break;
case 272:
-#line 1088 "pir.y"
+#line 1095 "pir.y"
{ (yyval.sval) = "lsr"; ;}
break;
/* Line 1267 of yacc.c. */
-#line 3154 "pirparser.c"
+#line 3161 "pirparser.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3364,7 +3371,7 @@
}
-#line 1090 "pir.y"
+#line 1097 "pir.y"
Modified: trunk/compilers/pirc/new/pirparser.h
==============================================================================
--- trunk/compilers/pirc/new/pirparser.h (original)
+++ trunk/compilers/pirc/new/pirparser.h Wed Jul 30 09:37:41 2008
@@ -238,7 +238,7 @@
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
-#line 82 "pir.y"
+#line 89 "pir.y"
{
double dval;
int ival;