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) {

Reply via email to