Author: leo
Date: Wed Feb 22 02:56:20 2006
New Revision: 11700
Modified:
trunk/compilers/imcc/imc.h
trunk/compilers/imcc/imcc.l
trunk/compilers/imcc/imclexer.c
trunk/compilers/imcc/parser_util.c
Log:
Memory leaks - compiler
* compile_string (called by eval aka compreg/compile) didn't free
the parser state, this is fixed
Modified: trunk/compilers/imcc/imc.h
==============================================================================
--- trunk/compilers/imcc/imc.h (original)
+++ trunk/compilers/imcc/imc.h Wed Feb 22 02:56:20 2006
@@ -158,6 +158,7 @@ typedef enum _AsmState {
} AsmState;
PARROT_API void IMCC_push_parser_state(Interp*);
+PARROT_API void IMCC_pop_parser_state(Interp*);
typedef struct _imc_info_t {
struct _imc_info_t *prev;
Modified: trunk/compilers/imcc/imcc.l
==============================================================================
--- trunk/compilers/imcc/imcc.l (original)
+++ trunk/compilers/imcc/imcc.l Wed Feb 22 02:56:20 2006
@@ -992,6 +992,12 @@ pop_parser_state(Interp* interp)
}
void
+IMCC_pop_parser_state(Interp* interp)
+{
+ pop_parser_state(interp);
+}
+
+void
compile_file(Interp *interp, FILE *file)
{
YY_BUFFER_STATE buffer;
Modified: trunk/compilers/imcc/imclexer.c
==============================================================================
--- trunk/compilers/imcc/imclexer.c (original)
+++ trunk/compilers/imcc/imclexer.c Wed Feb 22 02:56:20 2006
@@ -1,4 +1,4 @@
-#line 2 "compilers\\imcc\\imclexer.c"
+#line 2 "compilers/imcc/imclexer.c"
/* A lexical scanner generated by flex */
/* Scanner skeleton version:
@@ -2835,9 +2835,9 @@ static char *yy_last_accepting_cpos;
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "compilers\\imcc\\imcc.l"
+#line 1 "compilers/imcc/imcc.l"
#define INITIAL 0
-#line 2 "compilers\\imcc\\imcc.l"
+#line 2 "compilers/imcc/imcc.l"
/*
* imcc.l
*
@@ -2941,7 +2941,7 @@ static char *heredoc_content;
#define heredoc2 10
-#line 2945 "compilers\\imcc\\imclexer.c"
+#line 2945 "compilers/imcc/imclexer.c"
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -3095,7 +3095,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
-#line 125 "compilers\\imcc\\imcc.l"
+#line 125 "compilers/imcc/imcc.l"
/* for emacs "*/
if (expect_pasm == 1 && !in_pod) {
@@ -3112,7 +3112,7 @@ YY_DECL
return 0;
}
-#line 3116 "compilers\\imcc\\imclexer.c"
+#line 3116 "compilers/imcc/imclexer.c"
if ( yy_init )
{
@@ -3198,7 +3198,7 @@ do_action: /* This label is used only to
case 1:
YY_RULE_SETUP
-#line 141 "compilers\\imcc\\imcc.l"
+#line 141 "compilers/imcc/imcc.l"
{
frames->heredoc_rest = str_dup(yytext);
BEGIN(heredoc2);
@@ -3206,7 +3206,7 @@ YY_RULE_SETUP
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 146 "compilers\\imcc\\imcc.l"
+#line 146 "compilers/imcc/imcc.l"
{
/* heredocs have highest priority
* arrange them befor all wildcard state matches
@@ -3222,7 +3222,7 @@ YY_RULE_SETUP
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 159 "compilers\\imcc\\imcc.l"
+#line 159 "compilers/imcc/imcc.l"
{
/* Are we at the end of the heredoc? */
if (strcmp(heredoc_end, yytext) == 0)
@@ -3250,7 +3250,7 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 185 "compilers\\imcc\\imcc.l"
+#line 185 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt2);
valp->t = atoi(yytext+6);
return LINECOMMENT;
@@ -3258,7 +3258,7 @@ YY_RULE_SETUP
YY_BREAK
case 5:
YY_RULE_SETUP
-#line 189 "compilers\\imcc\\imcc.l"
+#line 189 "compilers/imcc/imcc.l"
{ BEGIN(cmt3);
valp->s = str_dup(yytext);
return FILECOMMENT;
@@ -3266,22 +3266,22 @@ YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
-#line 193 "compilers\\imcc\\imcc.l"
+#line 193 "compilers/imcc/imcc.l"
{ BEGIN(cmt4); }
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 195 "compilers\\imcc\\imcc.l"
+#line 195 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt2); }
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 196 "compilers\\imcc\\imcc.l"
+#line 196 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt1); }
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 197 "compilers\\imcc\\imcc.l"
+#line 197 "compilers/imcc/imcc.l"
{
valp->t = atoi(yytext);
BEGIN(cmt4);
@@ -3290,12 +3290,12 @@ YY_RULE_SETUP
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 202 "compilers\\imcc\\imcc.l"
+#line 202 "compilers/imcc/imcc.l"
{ BEGIN(prev_state) ; line++; }
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 204 "compilers\\imcc\\imcc.l"
+#line 204 "compilers/imcc/imcc.l"
{
if (expect_pasm == 2)
BEGIN(INITIAL);
@@ -3306,12 +3306,12 @@ YY_RULE_SETUP
YY_BREAK
case 12:
YY_RULE_SETUP
-#line 212 "compilers\\imcc\\imcc.l"
+#line 212 "compilers/imcc/imcc.l"
{ prev_state = YYSTATE; BEGIN(cmt5); }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 213 "compilers\\imcc\\imcc.l"
+#line 213 "compilers/imcc/imcc.l"
{
if (expect_pasm == 2)
BEGIN(INITIAL);
@@ -3324,7 +3324,7 @@ YY_RULE_SETUP
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 223 "compilers\\imcc\\imcc.l"
+#line 223 "compilers/imcc/imcc.l"
{
BEGIN(emit);
return(EMIT);
@@ -3332,7 +3332,7 @@ YY_RULE_SETUP
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 228 "compilers\\imcc\\imcc.l"
+#line 228 "compilers/imcc/imcc.l"
{
BEGIN(INITIAL);
return EOM;
@@ -3340,7 +3340,7 @@ YY_RULE_SETUP
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 233 "compilers\\imcc\\imcc.l"
+#line 233 "compilers/imcc/imcc.l"
{
valp->s = str_dup(yytext);
return REG;
@@ -3348,525 +3348,525 @@ YY_RULE_SETUP
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 238 "compilers\\imcc\\imcc.l"
+#line 238 "compilers/imcc/imcc.l"
{ in_pod = 1; yy_push_state(pod); }
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 239 "compilers\\imcc\\imcc.l"
+#line 239 "compilers/imcc/imcc.l"
{ in_pod = 0; yy_pop_state(); ++line; }
YY_BREAK
case 19:
YY_RULE_SETUP
-#line 240 "compilers\\imcc\\imcc.l"
+#line 240 "compilers/imcc/imcc.l"
{ /*ignore*/ }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 241 "compilers\\imcc\\imcc.l"
+#line 241 "compilers/imcc/imcc.l"
{ ++line; }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 243 "compilers\\imcc\\imcc.l"
+#line 243 "compilers/imcc/imcc.l"
return(LOCAL);
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 244 "compilers\\imcc\\imcc.l"
+#line 244 "compilers/imcc/imcc.l"
return(LEXICAL);
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 245 "compilers\\imcc\\imcc.l"
+#line 245 "compilers/imcc/imcc.l"
return(ARG);
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 246 "compilers\\imcc\\imcc.l"
+#line 246 "compilers/imcc/imcc.l"
return(SUB);
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 247 "compilers\\imcc\\imcc.l"
+#line 247 "compilers/imcc/imcc.l"
return(ESUB);
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 248 "compilers\\imcc\\imcc.l"
+#line 248 "compilers/imcc/imcc.l"
return(PCC_BEGIN);
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 249 "compilers\\imcc\\imcc.l"
+#line 249 "compilers/imcc/imcc.l"
return(PCC_END);
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 250 "compilers\\imcc\\imcc.l"
+#line 250 "compilers/imcc/imcc.l"
return(PCC_CALL);
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 251 "compilers\\imcc\\imcc.l"
+#line 251 "compilers/imcc/imcc.l"
return(NCI_CALL);
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 252 "compilers\\imcc\\imcc.l"
+#line 252 "compilers/imcc/imcc.l"
return(METH_CALL);
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 253 "compilers\\imcc\\imcc.l"
+#line 253 "compilers/imcc/imcc.l"
return(INVOCANT);
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 254 "compilers\\imcc\\imcc.l"
+#line 254 "compilers/imcc/imcc.l"
return(PCC_SUB);
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 255 "compilers\\imcc\\imcc.l"
+#line 255 "compilers/imcc/imcc.l"
return(PCC_BEGIN_RETURN);
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 256 "compilers\\imcc\\imcc.l"
+#line 256 "compilers/imcc/imcc.l"
return(PCC_END_RETURN);
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 257 "compilers\\imcc\\imcc.l"
+#line 257 "compilers/imcc/imcc.l"
return(PCC_BEGIN_YIELD);
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 258 "compilers\\imcc\\imcc.l"
+#line 258 "compilers/imcc/imcc.l"
return(PCC_END_YIELD);
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 260 "compilers\\imcc\\imcc.l"
+#line 260 "compilers/imcc/imcc.l"
return(METHOD); /* old compat cruft -
the canonical colon names are below */
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 262 "compilers\\imcc\\imcc.l"
+#line 262 "compilers/imcc/imcc.l"
return(MULTI);
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 263 "compilers\\imcc\\imcc.l"
+#line 263 "compilers/imcc/imcc.l"
return(MAIN);
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 264 "compilers\\imcc\\imcc.l"
+#line 264 "compilers/imcc/imcc.l"
return(LOAD);
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 265 "compilers\\imcc\\imcc.l"
+#line 265 "compilers/imcc/imcc.l"
return(IMMEDIATE);
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 266 "compilers\\imcc\\imcc.l"
+#line 266 "compilers/imcc/imcc.l"
return(POSTCOMP);
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 267 "compilers\\imcc\\imcc.l"
+#line 267 "compilers/imcc/imcc.l"
return(ANON);
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 269 "compilers\\imcc\\imcc.l"
+#line 269 "compilers/imcc/imcc.l"
return(METHOD);
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 270 "compilers\\imcc\\imcc.l"
+#line 270 "compilers/imcc/imcc.l"
return(MULTI);
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 271 "compilers\\imcc\\imcc.l"
+#line 271 "compilers/imcc/imcc.l"
return(MAIN);
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 272 "compilers\\imcc\\imcc.l"
+#line 272 "compilers/imcc/imcc.l"
return(LOAD);
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 273 "compilers\\imcc\\imcc.l"
+#line 273 "compilers/imcc/imcc.l"
return(IMMEDIATE);
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 274 "compilers\\imcc\\imcc.l"
+#line 274 "compilers/imcc/imcc.l"
return(POSTCOMP);
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 275 "compilers\\imcc\\imcc.l"
+#line 275 "compilers/imcc/imcc.l"
return(ANON);
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 276 "compilers\\imcc\\imcc.l"
+#line 276 "compilers/imcc/imcc.l"
return(OUTER);
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 277 "compilers\\imcc\\imcc.l"
+#line 277 "compilers/imcc/imcc.l"
return(NEED_LEX);
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 278 "compilers\\imcc\\imcc.l"
+#line 278 "compilers/imcc/imcc.l"
return(UNIQUE_REG);
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 280 "compilers\\imcc\\imcc.l"
+#line 280 "compilers/imcc/imcc.l"
return(RESULT);
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 281 "compilers\\imcc\\imcc.l"
+#line 281 "compilers/imcc/imcc.l"
return(GET_RESULTS);
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 282 "compilers\\imcc\\imcc.l"
+#line 282 "compilers/imcc/imcc.l"
return(YIELDT);
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 283 "compilers\\imcc\\imcc.l"
+#line 283 "compilers/imcc/imcc.l"
return(RETURN);
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 285 "compilers\\imcc\\imcc.l"
+#line 285 "compilers/imcc/imcc.l"
return(ADV_FLAT);
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 286 "compilers\\imcc\\imcc.l"
+#line 286 "compilers/imcc/imcc.l"
return(ADV_SLURPY);
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 287 "compilers\\imcc\\imcc.l"
+#line 287 "compilers/imcc/imcc.l"
return(ADV_OPTIONAL);
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 288 "compilers\\imcc\\imcc.l"
+#line 288 "compilers/imcc/imcc.l"
return(ADV_OPT_FLAG);
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 289 "compilers\\imcc\\imcc.l"
+#line 289 "compilers/imcc/imcc.l"
return(ADV_NAMED);
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 290 "compilers\\imcc\\imcc.l"
+#line 290 "compilers/imcc/imcc.l"
return(ADV_ARROW);
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 292 "compilers\\imcc\\imcc.l"
+#line 292 "compilers/imcc/imcc.l"
return(NAMESPACE);
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 293 "compilers\\imcc\\imcc.l"
+#line 293 "compilers/imcc/imcc.l"
return(HLL);
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 294 "compilers\\imcc\\imcc.l"
+#line 294 "compilers/imcc/imcc.l"
return(HLL_MAP);
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 295 "compilers\\imcc\\imcc.l"
+#line 295 "compilers/imcc/imcc.l"
return(ENDNAMESPACE);
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 296 "compilers\\imcc\\imcc.l"
+#line 296 "compilers/imcc/imcc.l"
return(LOCAL);
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 297 "compilers\\imcc\\imcc.l"
+#line 297 "compilers/imcc/imcc.l"
return(GLOBAL);
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 298 "compilers\\imcc\\imcc.l"
+#line 298 "compilers/imcc/imcc.l"
return(CONST);
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 299 "compilers\\imcc\\imcc.l"
+#line 299 "compilers/imcc/imcc.l"
return(GLOBAL_CONST);
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 300 "compilers\\imcc\\imcc.l"
+#line 300 "compilers/imcc/imcc.l"
return(PARAM);
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 301 "compilers\\imcc\\imcc.l"
+#line 301 "compilers/imcc/imcc.l"
return(PRAGMA);
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 302 "compilers\\imcc\\imcc.l"
+#line 302 "compilers/imcc/imcc.l"
return(N_OPERATORS);
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 303 "compilers\\imcc\\imcc.l"
+#line 303 "compilers/imcc/imcc.l"
return(GOTO);
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 304 "compilers\\imcc\\imcc.l"
+#line 304 "compilers/imcc/imcc.l"
return(IF);
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 305 "compilers\\imcc\\imcc.l"
+#line 305 "compilers/imcc/imcc.l"
return(UNLESS);
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 306 "compilers\\imcc\\imcc.l"
+#line 306 "compilers/imcc/imcc.l"
return(PNULL);
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 307 "compilers\\imcc\\imcc.l"
+#line 307 "compilers/imcc/imcc.l"
return(INTV);
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 308 "compilers\\imcc\\imcc.l"
+#line 308 "compilers/imcc/imcc.l"
return(FLOATV);
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 309 "compilers\\imcc\\imcc.l"
+#line 309 "compilers/imcc/imcc.l"
return(FLOATV);
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 310 "compilers\\imcc\\imcc.l"
+#line 310 "compilers/imcc/imcc.l"
return(NEW);
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 311 "compilers\\imcc\\imcc.l"
+#line 311 "compilers/imcc/imcc.l"
return(ADDR);
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 312 "compilers\\imcc\\imcc.l"
+#line 312 "compilers/imcc/imcc.l"
return(GLOBALOP);
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 313 "compilers\\imcc\\imcc.l"
+#line 313 "compilers/imcc/imcc.l"
return(OBJECTV);
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 314 "compilers\\imcc\\imcc.l"
+#line 314 "compilers/imcc/imcc.l"
return(PMCV);
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 315 "compilers\\imcc\\imcc.l"
+#line 315 "compilers/imcc/imcc.l"
return(STRINGV);
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 316 "compilers\\imcc\\imcc.l"
+#line 316 "compilers/imcc/imcc.l"
return(SHIFT_LEFT);
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 317 "compilers\\imcc\\imcc.l"
+#line 317 "compilers/imcc/imcc.l"
return(SHIFT_RIGHT);
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 318 "compilers\\imcc\\imcc.l"
+#line 318 "compilers/imcc/imcc.l"
return(SHIFT_RIGHT_U);
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 319 "compilers\\imcc\\imcc.l"
+#line 319 "compilers/imcc/imcc.l"
return(LOG_AND);
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 320 "compilers\\imcc\\imcc.l"
+#line 320 "compilers/imcc/imcc.l"
return(LOG_OR);
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 321 "compilers\\imcc\\imcc.l"
+#line 321 "compilers/imcc/imcc.l"
return(LOG_XOR);
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 322 "compilers\\imcc\\imcc.l"
+#line 322 "compilers/imcc/imcc.l"
return(RELOP_LT);
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 323 "compilers\\imcc\\imcc.l"
+#line 323 "compilers/imcc/imcc.l"
return(RELOP_LTE);
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 324 "compilers\\imcc\\imcc.l"
+#line 324 "compilers/imcc/imcc.l"
return(RELOP_GT);
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 325 "compilers\\imcc\\imcc.l"
+#line 325 "compilers/imcc/imcc.l"
return(RELOP_GTE);
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 326 "compilers\\imcc\\imcc.l"
+#line 326 "compilers/imcc/imcc.l"
return(RELOP_EQ);
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 327 "compilers\\imcc\\imcc.l"
+#line 327 "compilers/imcc/imcc.l"
return(RELOP_NE);
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 328 "compilers\\imcc\\imcc.l"
+#line 328 "compilers/imcc/imcc.l"
return(POW);
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 329 "compilers\\imcc\\imcc.l"
+#line 329 "compilers/imcc/imcc.l"
return(POINTY);
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 330 "compilers\\imcc\\imcc.l"
+#line 330 "compilers/imcc/imcc.l"
return(CONCAT);
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 331 "compilers\\imcc\\imcc.l"
+#line 331 "compilers/imcc/imcc.l"
return(DOT);
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 332 "compilers\\imcc\\imcc.l"
+#line 332 "compilers/imcc/imcc.l"
return(DOTDOT);
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 333 "compilers\\imcc\\imcc.l"
+#line 333 "compilers/imcc/imcc.l"
return(PLUS_ASSIGN);
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 334 "compilers\\imcc\\imcc.l"
+#line 334 "compilers/imcc/imcc.l"
return(MINUS_ASSIGN);
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 335 "compilers\\imcc\\imcc.l"
+#line 335 "compilers/imcc/imcc.l"
return(MUL_ASSIGN);
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 336 "compilers\\imcc\\imcc.l"
+#line 336 "compilers/imcc/imcc.l"
return(DIV_ASSIGN);
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 337 "compilers\\imcc\\imcc.l"
+#line 337 "compilers/imcc/imcc.l"
return(MOD_ASSIGN);
YY_BREAK
case 110:
YY_RULE_SETUP
-#line 338 "compilers\\imcc\\imcc.l"
+#line 338 "compilers/imcc/imcc.l"
return(FDIV);
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 339 "compilers\\imcc\\imcc.l"
+#line 339 "compilers/imcc/imcc.l"
return(FDIV_ASSIGN);
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 340 "compilers\\imcc\\imcc.l"
+#line 340 "compilers/imcc/imcc.l"
return(BAND_ASSIGN);
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 341 "compilers\\imcc\\imcc.l"
+#line 341 "compilers/imcc/imcc.l"
return(BOR_ASSIGN);
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 342 "compilers\\imcc\\imcc.l"
+#line 342 "compilers/imcc/imcc.l"
return(BXOR_ASSIGN);
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 343 "compilers\\imcc\\imcc.l"
+#line 343 "compilers/imcc/imcc.l"
return(SHR_ASSIGN);
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 344 "compilers\\imcc\\imcc.l"
+#line 344 "compilers/imcc/imcc.l"
return(SHL_ASSIGN);
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 345 "compilers\\imcc\\imcc.l"
+#line 345 "compilers/imcc/imcc.l"
return(SHR_U_ASSIGN);
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 346 "compilers\\imcc\\imcc.l"
+#line 346 "compilers/imcc/imcc.l"
return(CONCAT_ASSIGN);
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 348 "compilers\\imcc\\imcc.l"
+#line 348 "compilers/imcc/imcc.l"
{
return read_macro(valp, interp);
}
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 352 "compilers\\imcc\\imcc.l"
+#line 352 "compilers/imcc/imcc.l"
{
int c;
char *name;
@@ -3897,7 +3897,7 @@ YY_RULE_SETUP
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 380 "compilers\\imcc\\imcc.l"
+#line 380 "compilers/imcc/imcc.l"
{
int c;
@@ -3910,7 +3910,7 @@ YY_RULE_SETUP
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 390 "compilers\\imcc\\imcc.l"
+#line 390 "compilers/imcc/imcc.l"
{
char *label;
@@ -3931,7 +3931,7 @@ YY_RULE_SETUP
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 408 "compilers\\imcc\\imcc.l"
+#line 408 "compilers/imcc/imcc.l"
{
char *label;
@@ -3953,12 +3953,12 @@ YY_RULE_SETUP
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 427 "compilers\\imcc\\imcc.l"
+#line 427 "compilers/imcc/imcc.l"
return(COMMA);
YY_BREAK
case 125:
YY_RULE_SETUP
-#line 429 "compilers\\imcc\\imcc.l"
+#line 429 "compilers/imcc/imcc.l"
{
YYCHOP(); /* trim last ':' */
DUP_AND_RET(valp,LABEL);
@@ -3966,7 +3966,7 @@ YY_RULE_SETUP
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 434 "compilers\\imcc\\imcc.l"
+#line 434 "compilers/imcc/imcc.l"
{
int type = pmc_type(interp, string_from_cstring(interp, yytext+1, 0));
@@ -3984,7 +3984,7 @@ YY_RULE_SETUP
YY_BREAK
case 127:
YY_RULE_SETUP
-#line 449 "compilers\\imcc\\imcc.l"
+#line 449 "compilers/imcc/imcc.l"
{
if (!is_def) {
SymReg *r = find_sym(interp, yytext);
@@ -4009,32 +4009,32 @@ YY_RULE_SETUP
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 471 "compilers\\imcc\\imcc.l"
+#line 471 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, FLOATC);
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 472 "compilers\\imcc\\imcc.l"
+#line 472 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 473 "compilers\\imcc\\imcc.l"
+#line 473 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 474 "compilers\\imcc\\imcc.l"
+#line 474 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 475 "compilers\\imcc\\imcc.l"
+#line 475 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, INTC);
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 477 "compilers\\imcc\\imcc.l"
+#line 477 "compilers/imcc/imcc.l"
{
valp->s = str_dup(yytext);
valp->s[strlen(valp->s) - 1] = '\0'; /* trailing 'L' */
@@ -4043,7 +4043,7 @@ YY_RULE_SETUP
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 483 "compilers\\imcc\\imcc.l"
+#line 483 "compilers/imcc/imcc.l"
{
valp->s = str_dup(yytext);
return(STRINGC); /* XXX delete quotes, -> emit, pbc */
@@ -4051,7 +4051,7 @@ YY_RULE_SETUP
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 488 "compilers\\imcc\\imcc.l"
+#line 488 "compilers/imcc/imcc.l"
{
struct macro_frame_t *frame;
/* Save the string we want to mark the end of the heredoc and snip
@@ -4076,7 +4076,7 @@ YY_RULE_SETUP
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 510 "compilers\\imcc\\imcc.l"
+#line 510 "compilers/imcc/imcc.l"
{
valp->s = str_dup(yytext); /* charset:"..." */
/* this is actually not unicode but a string with a charset */
@@ -4085,39 +4085,39 @@ YY_RULE_SETUP
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 517 "compilers\\imcc\\imcc.l"
+#line 517 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, IREG);
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 518 "compilers\\imcc\\imcc.l"
+#line 518 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, NREG);
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 519 "compilers\\imcc\\imcc.l"
+#line 519 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, SREG);
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 520 "compilers\\imcc\\imcc.l"
+#line 520 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, PREG);
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 522 "compilers\\imcc\\imcc.l"
+#line 522 "compilers/imcc/imcc.l"
/* skip */;
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 524 "compilers\\imcc\\imcc.l"
+#line 524 "compilers/imcc/imcc.l"
{
/* catch all except for state macro */
return yytext[0];
}
YY_BREAK
case YY_STATE_EOF(emit):
-#line 529 "compilers\\imcc\\imcc.l"
+#line 529 "compilers/imcc/imcc.l"
{
BEGIN (INITIAL);
if (frames->s.pasm_file) {
@@ -4128,17 +4128,17 @@ case YY_STATE_EOF(emit):
}
YY_BREAK
case YY_STATE_EOF(INITIAL):
-#line 538 "compilers\\imcc\\imcc.l"
+#line 538 "compilers/imcc/imcc.l"
yyterminate();
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 540 "compilers\\imcc\\imcc.l"
+#line 540 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ENDM);
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 542 "compilers\\imcc\\imcc.l"
+#line 542 "compilers/imcc/imcc.l"
{
line++;
DUP_AND_RET(valp, '\n');
@@ -4146,12 +4146,12 @@ YY_RULE_SETUP
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 547 "compilers\\imcc\\imcc.l"
+#line 547 "compilers/imcc/imcc.l"
return LABEL;
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 548 "compilers\\imcc\\imcc.l"
+#line 548 "compilers/imcc/imcc.l"
{
char *label;
char *name = macros[num_macros].name;
@@ -4173,7 +4173,7 @@ YY_RULE_SETUP
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 567 "compilers\\imcc\\imcc.l"
+#line 567 "compilers/imcc/imcc.l"
{
char *label;
char *name = macros[num_macros].name;
@@ -4190,39 +4190,39 @@ YY_RULE_SETUP
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 581 "compilers\\imcc\\imcc.l"
+#line 581 "compilers/imcc/imcc.l"
/* skip leading ws */;
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 582 "compilers\\imcc\\imcc.l"
+#line 582 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, ' ');
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 583 "compilers\\imcc\\imcc.l"
+#line 583 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, IDENTIFIER);
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 584 "compilers\\imcc\\imcc.l"
+#line 584 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, MACRO);
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 585 "compilers\\imcc\\imcc.l"
+#line 585 "compilers/imcc/imcc.l"
DUP_AND_RET(valp, yytext[0]);
YY_BREAK
case YY_STATE_EOF(macro):
-#line 586 "compilers\\imcc\\imcc.l"
+#line 586 "compilers/imcc/imcc.l"
yyterminate();
YY_BREAK
case 153:
YY_RULE_SETUP
-#line 588 "compilers\\imcc\\imcc.l"
+#line 588 "compilers/imcc/imcc.l"
ECHO;
YY_BREAK
-#line 4226 "compilers\\imcc\\imclexer.c"
+#line 4226 "compilers/imcc/imclexer.c"
case YY_STATE_EOF(pod):
case YY_STATE_EOF(cmt1):
case YY_STATE_EOF(cmt2):
@@ -5117,7 +5117,7 @@ int main()
return 0;
}
#endif
-#line 588 "compilers\\imcc\\imcc.l"
+#line 588 "compilers/imcc/imcc.l"
#ifdef yywrap
@@ -5525,6 +5525,12 @@ pop_parser_state(Interp* interp)
}
void
+IMCC_pop_parser_state(Interp* interp)
+{
+ pop_parser_state(interp);
+}
+
+void
compile_file(Interp *interp, FILE *file)
{
YY_BUFFER_STATE buffer;
Modified: trunk/compilers/imcc/parser_util.c
==============================================================================
--- trunk/compilers/imcc/parser_util.c (original)
+++ trunk/compilers/imcc/parser_util.c Wed Feb 22 02:56:20 2006
@@ -605,6 +605,7 @@ imcc_compile(Parrot_Interp interp, const
PMC *sub;
parrot_sub_t sub_data;
struct _imc_info_t *imc_info = NULL;
+ struct parser_state_t *next;
union {
const void * __c_ptr;
void * __ptr;
@@ -636,6 +637,7 @@ imcc_compile(Parrot_Interp interp, const
}
}
IMCC_push_parser_state(interp);
+ next = IMCC_INFO(interp)->state->next;
if (imc_info)
IMCC_INFO(interp)->state->next = NULL;
IMCC_INFO(interp)->state->pasm_file = pasm_file;
@@ -644,6 +646,16 @@ imcc_compile(Parrot_Interp interp, const
compile_string(interp, const_cast(s));
+ /*
+ * compile_string NULLifies frames->next, so that yywrap
+ * doesn't try to continue compiling the previous buffer
+ * This OTOH prevents pop_parser-state ->
+ *
+ * set next here and pop
+ */
+ IMCC_INFO(interp)->state->next = next;
+ IMCC_pop_parser_state(interp);
+
sub = pmc_new(interp, enum_class_Eval);
PackFile_fixup_subs(interp, PBC_MAIN, sub);
if (old_cs) {