[svn:parrot] r39772 - in trunk: compilers/imcc src

NotFound at svn.parrot.org NotFound at svn.parrot.org
Thu Jun 25 16:46:43 UTC 2009


Author: NotFound
Date: Thu Jun 25 16:46:42 2009
New Revision: 39772
URL: https://trac.parrot.org/parrot/changeset/39772

Log:
[cage] always str_dup and always mem_sys_free imcc state->file, should fix some leaks, TT #35

Modified:
   trunk/compilers/imcc/imc.c
   trunk/compilers/imcc/imc.h
   trunk/compilers/imcc/imcc.l
   trunk/compilers/imcc/imclexer.c
   trunk/compilers/imcc/main.c
   trunk/compilers/imcc/parser_util.c
   trunk/src/parrot_debugger.c

Modified: trunk/compilers/imcc/imc.c
==============================================================================
--- trunk/compilers/imcc/imc.c	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/compilers/imcc/imc.c	Thu Jun 25 16:46:42 2009	(r39772)
@@ -143,6 +143,11 @@
     clear_globals(interp);
     mem_sys_free(IMCC_INFO(interp)->ghash.data);
     IMCC_INFO(interp)->ghash.data = NULL;
+
+    if (IMCC_INFO(interp)->state) {
+        free(IMCC_INFO(interp)->state->file);
+        IMCC_INFO(interp)->state->file = NULL;
+    }
 }
 
 

Modified: trunk/compilers/imcc/imc.h
==============================================================================
--- trunk/compilers/imcc/imc.h	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/compilers/imcc/imc.h	Thu Jun 25 16:46:42 2009	(r39772)
@@ -527,7 +527,6 @@
     Interp                *interp;
     char                  *file;
     FILE                  *handle;
-    int                    file_needs_free; /* is *file malloced? */
     int                    line;
     int                    pasm_file;       /* pasm_file mode of this frame */
 };

Modified: trunk/compilers/imcc/imcc.l
==============================================================================
--- trunk/compilers/imcc/imcc.l	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/compilers/imcc/imcc.l	Thu Jun 25 16:46:42 2009	(r39772)
@@ -232,7 +232,6 @@
         yy_push_state(cmt3, yyscanner);
 
         IMCC_INFO(interp)->frames->s.file = str_dup(yytext);
-        IMCC_INFO(interp)->frames->s.file_needs_free = 1;
         IMCC_INFO(interp)->cur_unit->file = str_dup(yytext);
 
         return FILECOMMENT;
@@ -788,13 +787,8 @@
 
     if (IMCC_INFO(interp)->frames) {
         tmp->s.pasm_file = IMCC_INFO(interp)->frames->s.pasm_file;
-
-        if (IMCC_INFO(interp)->frames->s.file_needs_free)
-            tmp->s.file            = str_dup(IMCC_INFO(interp)->frames->s.file);
-        else
-            tmp->s.file            = IMCC_INFO(interp)->frames->s.file;
-
-        tmp->s.file_needs_free = IMCC_INFO(interp)->frames->s.file_needs_free;
+        if (IMCC_INFO(interp)->frames->s.file)
+            tmp->s.file = str_dup(IMCC_INFO(interp)->frames->s.file);
     }
 
     tmp->s.interp = interp;
@@ -833,13 +827,7 @@
     } else
         ret = frame->s.line;
 
-    /* RT #42383 if frame->s.file was allocated free it */
-    /* Update: This should do it! */
-    if (frame->s.file_needs_free) {
-        DECL_CONST_CAST;
-        mem_sys_free(PARROT_const_cast(char *,frame->s.file));
-        frame->s.file_needs_free = 0;
-    }
+    mem_sys_free(frame->s.file);
     mem_sys_free(frame);
 
     if (buffer != NULL)
@@ -1162,12 +1150,10 @@
 
         /* remember macro name for error reporting
          * first free any filename allocated in new_frame() */
-        if (frame->s.file && frame->s.file_needs_free)
+        if (frame->s.file)
             mem_sys_free(frame->s.file);
 
-        /* RT #42384 check that all the .file text is malloced / freed */
         frame->s.file            = str_dup(name);
-        frame->s.file_needs_free = 1;
 
         /* whitespace can be safely ignored */
         do {
@@ -1258,8 +1244,7 @@
         IMCC_fataly(interp, EXCEPTION_EXTERNAL_ERROR, strerror(errno));
 
     mem_sys_free(s);
-    frame->s.file            = file_name;
-    frame->s.file_needs_free = 0;
+    frame->s.file            = str_dup(file_name);
     frame->s.handle          = file;
     ext                      = strrchr(file_name, '.');
 
@@ -1432,7 +1417,6 @@
 set_filename(PARROT_INTERP, char * const filename)
 {
     IMCC_INFO(interp)->frames->s.file = filename;
-    IMCC_INFO(interp)->frames->s.file_needs_free = 1;
 
     /* in case .line is used outside a .sub, then this
      * can't be done; hence the check.

Modified: trunk/compilers/imcc/imclexer.c
==============================================================================
--- trunk/compilers/imcc/imclexer.c	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/compilers/imcc/imclexer.c	Thu Jun 25 16:46:42 2009	(r39772)
@@ -2908,7 +2908,6 @@
         yy_push_state(cmt3, yyscanner);
 
         IMCC_INFO(interp)->frames->s.file = str_dup(yytext);
-        IMCC_INFO(interp)->frames->s.file_needs_free = 1;
         IMCC_INFO(interp)->cur_unit->file = str_dup(yytext);
 
         return FILECOMMENT;
@@ -2916,7 +2915,7 @@
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 241 "compilers/imcc/imcc.l"
+#line 240 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         yy_push_state(cmt4, yyscanner);
@@ -2924,17 +2923,17 @@
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 246 "compilers/imcc/imcc.l"
+#line 245 "compilers/imcc/imcc.l"
 { yy_push_state(cmt2, yyscanner); }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 248 "compilers/imcc/imcc.l"
+#line 247 "compilers/imcc/imcc.l"
 { yy_push_state(cmt1, yyscanner);  }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 250 "compilers/imcc/imcc.l"
+#line 249 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line = atoi(yytext);
         yy_pop_state(yyscanner);
@@ -2945,7 +2944,7 @@
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
-#line 257 "compilers/imcc/imcc.l"
+#line 256 "compilers/imcc/imcc.l"
 {
         yy_pop_state(yyscanner);
         IMCC_INFO(interp)->line++;
@@ -2954,7 +2953,7 @@
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
-#line 262 "compilers/imcc/imcc.l"
+#line 261 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
@@ -2967,7 +2966,7 @@
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 272 "compilers/imcc/imcc.l"
+#line 271 "compilers/imcc/imcc.l"
 {
         yy_push_state(cmt5, yyscanner);
     }
@@ -2975,7 +2974,7 @@
 case 12:
 /* rule 12 can match eol */
 YY_RULE_SETUP
-#line 276 "compilers/imcc/imcc.l"
+#line 275 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->expect_pasm == 2)
             BEGIN(INITIAL);
@@ -2991,7 +2990,7 @@
 case 13:
 /* rule 13 can match eol */
 YY_RULE_SETUP
-#line 289 "compilers/imcc/imcc.l"
+#line 288 "compilers/imcc/imcc.l"
 {
     /* this is a stand-alone =cut, but we're
      * not in POD mode, so just ignore.
@@ -3000,7 +2999,7 @@
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 295 "compilers/imcc/imcc.l"
+#line 294 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->in_pod = 1;
         yy_push_state(pod, yyscanner);
@@ -3009,7 +3008,7 @@
 case 15:
 /* rule 15 can match eol */
 YY_RULE_SETUP
-#line 300 "compilers/imcc/imcc.l"
+#line 299 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->in_pod = 0;
         yy_pop_state(yyscanner);
@@ -3018,473 +3017,473 @@
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 306 "compilers/imcc/imcc.l"
+#line 305 "compilers/imcc/imcc.l"
 { /*ignore*/ }
 	YY_BREAK
 case 17:
 /* rule 17 can match eol */
 YY_RULE_SETUP
-#line 308 "compilers/imcc/imcc.l"
+#line 307 "compilers/imcc/imcc.l"
 { IMCC_INFO(interp)->line++; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 310 "compilers/imcc/imcc.l"
+#line 309 "compilers/imcc/imcc.l"
 return TK_LINE;
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 311 "compilers/imcc/imcc.l"
+#line 310 "compilers/imcc/imcc.l"
 return TK_FILE;
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 312 "compilers/imcc/imcc.l"
+#line 311 "compilers/imcc/imcc.l"
 return ANNOTATE;
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 313 "compilers/imcc/imcc.l"
+#line 312 "compilers/imcc/imcc.l"
 return LEXICAL;
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 314 "compilers/imcc/imcc.l"
+#line 313 "compilers/imcc/imcc.l"
 return ARG;
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 315 "compilers/imcc/imcc.l"
+#line 314 "compilers/imcc/imcc.l"
 return SUB;
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 316 "compilers/imcc/imcc.l"
+#line 315 "compilers/imcc/imcc.l"
 return ESUB;
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 317 "compilers/imcc/imcc.l"
+#line 316 "compilers/imcc/imcc.l"
 return PCC_BEGIN;
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 318 "compilers/imcc/imcc.l"
+#line 317 "compilers/imcc/imcc.l"
 return PCC_END;
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 319 "compilers/imcc/imcc.l"
+#line 318 "compilers/imcc/imcc.l"
 return PCC_CALL;
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 320 "compilers/imcc/imcc.l"
+#line 319 "compilers/imcc/imcc.l"
 return NCI_CALL;
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 321 "compilers/imcc/imcc.l"
+#line 320 "compilers/imcc/imcc.l"
 return METH_CALL;
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 322 "compilers/imcc/imcc.l"
+#line 321 "compilers/imcc/imcc.l"
 return INVOCANT;
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 323 "compilers/imcc/imcc.l"
+#line 322 "compilers/imcc/imcc.l"
 return PCC_SUB;
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 324 "compilers/imcc/imcc.l"
+#line 323 "compilers/imcc/imcc.l"
 return PCC_BEGIN_RETURN;
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 325 "compilers/imcc/imcc.l"
+#line 324 "compilers/imcc/imcc.l"
 return PCC_END_RETURN;
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 326 "compilers/imcc/imcc.l"
+#line 325 "compilers/imcc/imcc.l"
 return PCC_BEGIN_YIELD;
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 327 "compilers/imcc/imcc.l"
+#line 326 "compilers/imcc/imcc.l"
 return PCC_END_YIELD;
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 329 "compilers/imcc/imcc.l"
+#line 328 "compilers/imcc/imcc.l"
 return METHOD;
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 330 "compilers/imcc/imcc.l"
+#line 329 "compilers/imcc/imcc.l"
 return MULTI;
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 331 "compilers/imcc/imcc.l"
+#line 330 "compilers/imcc/imcc.l"
 return MAIN;
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 332 "compilers/imcc/imcc.l"
+#line 331 "compilers/imcc/imcc.l"
 return LOAD;
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 333 "compilers/imcc/imcc.l"
+#line 332 "compilers/imcc/imcc.l"
 return INIT;
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 334 "compilers/imcc/imcc.l"
+#line 333 "compilers/imcc/imcc.l"
 return IMMEDIATE;
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 335 "compilers/imcc/imcc.l"
+#line 334 "compilers/imcc/imcc.l"
 return POSTCOMP;
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 336 "compilers/imcc/imcc.l"
+#line 335 "compilers/imcc/imcc.l"
 return ANON;
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 337 "compilers/imcc/imcc.l"
+#line 336 "compilers/imcc/imcc.l"
 return OUTER;
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 338 "compilers/imcc/imcc.l"
+#line 337 "compilers/imcc/imcc.l"
 return NEED_LEX;
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 339 "compilers/imcc/imcc.l"
+#line 338 "compilers/imcc/imcc.l"
 return VTABLE_METHOD;
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 340 "compilers/imcc/imcc.l"
+#line 339 "compilers/imcc/imcc.l"
 return NS_ENTRY;
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 341 "compilers/imcc/imcc.l"
+#line 340 "compilers/imcc/imcc.l"
 return UNIQUE_REG;
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 342 "compilers/imcc/imcc.l"
+#line 341 "compilers/imcc/imcc.l"
 return SUB_INSTANCE_OF;
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 343 "compilers/imcc/imcc.l"
+#line 342 "compilers/imcc/imcc.l"
 return SUBID;
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 345 "compilers/imcc/imcc.l"
+#line 344 "compilers/imcc/imcc.l"
 return RESULT;
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 346 "compilers/imcc/imcc.l"
+#line 345 "compilers/imcc/imcc.l"
 return GET_RESULTS;
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 347 "compilers/imcc/imcc.l"
+#line 346 "compilers/imcc/imcc.l"
 return YIELDT;
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 348 "compilers/imcc/imcc.l"
+#line 347 "compilers/imcc/imcc.l"
 return SET_YIELD;
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 349 "compilers/imcc/imcc.l"
+#line 348 "compilers/imcc/imcc.l"
 return RETURN;
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 350 "compilers/imcc/imcc.l"
+#line 349 "compilers/imcc/imcc.l"
 return SET_RETURN;
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 351 "compilers/imcc/imcc.l"
+#line 350 "compilers/imcc/imcc.l"
 return TAILCALL;
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 352 "compilers/imcc/imcc.l"
+#line 351 "compilers/imcc/imcc.l"
 return LOADLIB;
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 354 "compilers/imcc/imcc.l"
+#line 353 "compilers/imcc/imcc.l"
 return ADV_FLAT;
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 355 "compilers/imcc/imcc.l"
+#line 354 "compilers/imcc/imcc.l"
 return ADV_SLURPY;
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 356 "compilers/imcc/imcc.l"
+#line 355 "compilers/imcc/imcc.l"
 return ADV_OPTIONAL;
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 357 "compilers/imcc/imcc.l"
+#line 356 "compilers/imcc/imcc.l"
 return ADV_OPT_FLAG;
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 358 "compilers/imcc/imcc.l"
+#line 357 "compilers/imcc/imcc.l"
 return ADV_NAMED;
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 359 "compilers/imcc/imcc.l"
+#line 358 "compilers/imcc/imcc.l"
 return ADV_ARROW;
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 360 "compilers/imcc/imcc.l"
+#line 359 "compilers/imcc/imcc.l"
 return ADV_INVOCANT;
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 362 "compilers/imcc/imcc.l"
+#line 361 "compilers/imcc/imcc.l"
 return NAMESPACE;
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 363 "compilers/imcc/imcc.l"
+#line 362 "compilers/imcc/imcc.l"
 return HLL;
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 365 "compilers/imcc/imcc.l"
+#line 364 "compilers/imcc/imcc.l"
 return LOCAL;
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 366 "compilers/imcc/imcc.l"
+#line 365 "compilers/imcc/imcc.l"
 return CONST;
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 367 "compilers/imcc/imcc.l"
+#line 366 "compilers/imcc/imcc.l"
 return GLOBAL_CONST;
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 368 "compilers/imcc/imcc.l"
+#line 367 "compilers/imcc/imcc.l"
 return PARAM;
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 369 "compilers/imcc/imcc.l"
+#line 368 "compilers/imcc/imcc.l"
 return GOTO;
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 370 "compilers/imcc/imcc.l"
+#line 369 "compilers/imcc/imcc.l"
 return IF;
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 371 "compilers/imcc/imcc.l"
+#line 370 "compilers/imcc/imcc.l"
 return UNLESS;
 	YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 372 "compilers/imcc/imcc.l"
+#line 371 "compilers/imcc/imcc.l"
 return PNULL;
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 373 "compilers/imcc/imcc.l"
+#line 372 "compilers/imcc/imcc.l"
 return INTV;
 	YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 374 "compilers/imcc/imcc.l"
+#line 373 "compilers/imcc/imcc.l"
 return FLOATV;
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 376 "compilers/imcc/imcc.l"
+#line 375 "compilers/imcc/imcc.l"
 return PMCV;
 	YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 377 "compilers/imcc/imcc.l"
+#line 376 "compilers/imcc/imcc.l"
 return STRINGV;
 	YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 378 "compilers/imcc/imcc.l"
+#line 377 "compilers/imcc/imcc.l"
 return SHIFT_LEFT;
 	YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 379 "compilers/imcc/imcc.l"
+#line 378 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT;
 	YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 380 "compilers/imcc/imcc.l"
+#line 379 "compilers/imcc/imcc.l"
 return SHIFT_RIGHT_U;
 	YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 381 "compilers/imcc/imcc.l"
+#line 380 "compilers/imcc/imcc.l"
 return LOG_AND;
 	YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 382 "compilers/imcc/imcc.l"
+#line 381 "compilers/imcc/imcc.l"
 return LOG_OR;
 	YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 383 "compilers/imcc/imcc.l"
+#line 382 "compilers/imcc/imcc.l"
 return LOG_XOR;
 	YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 384 "compilers/imcc/imcc.l"
+#line 383 "compilers/imcc/imcc.l"
 return RELOP_LT;
 	YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 385 "compilers/imcc/imcc.l"
+#line 384 "compilers/imcc/imcc.l"
 return RELOP_LTE;
 	YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 386 "compilers/imcc/imcc.l"
+#line 385 "compilers/imcc/imcc.l"
 return RELOP_GT;
 	YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 387 "compilers/imcc/imcc.l"
+#line 386 "compilers/imcc/imcc.l"
 return RELOP_GTE;
 	YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 388 "compilers/imcc/imcc.l"
+#line 387 "compilers/imcc/imcc.l"
 return RELOP_EQ;
 	YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 389 "compilers/imcc/imcc.l"
+#line 388 "compilers/imcc/imcc.l"
 return RELOP_NE;
 	YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 390 "compilers/imcc/imcc.l"
+#line 389 "compilers/imcc/imcc.l"
 return POW;
 	YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 392 "compilers/imcc/imcc.l"
+#line 391 "compilers/imcc/imcc.l"
 return CONCAT;
 	YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 393 "compilers/imcc/imcc.l"
+#line 392 "compilers/imcc/imcc.l"
 return DOT;
 	YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 395 "compilers/imcc/imcc.l"
+#line 394 "compilers/imcc/imcc.l"
 return PLUS_ASSIGN;
 	YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 396 "compilers/imcc/imcc.l"
+#line 395 "compilers/imcc/imcc.l"
 return MINUS_ASSIGN;
 	YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 397 "compilers/imcc/imcc.l"
+#line 396 "compilers/imcc/imcc.l"
 return MUL_ASSIGN;
 	YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 398 "compilers/imcc/imcc.l"
+#line 397 "compilers/imcc/imcc.l"
 return DIV_ASSIGN;
 	YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 399 "compilers/imcc/imcc.l"
+#line 398 "compilers/imcc/imcc.l"
 return MOD_ASSIGN;
 	YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 400 "compilers/imcc/imcc.l"
+#line 399 "compilers/imcc/imcc.l"
 return FDIV;
 	YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 401 "compilers/imcc/imcc.l"
+#line 400 "compilers/imcc/imcc.l"
 return FDIV_ASSIGN;
 	YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 402 "compilers/imcc/imcc.l"
+#line 401 "compilers/imcc/imcc.l"
 return BAND_ASSIGN;
 	YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 403 "compilers/imcc/imcc.l"
+#line 402 "compilers/imcc/imcc.l"
 return BOR_ASSIGN;
 	YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 404 "compilers/imcc/imcc.l"
+#line 403 "compilers/imcc/imcc.l"
 return BXOR_ASSIGN;
 	YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 405 "compilers/imcc/imcc.l"
+#line 404 "compilers/imcc/imcc.l"
 return SHR_ASSIGN;
 	YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 406 "compilers/imcc/imcc.l"
+#line 405 "compilers/imcc/imcc.l"
 return SHL_ASSIGN;
 	YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 407 "compilers/imcc/imcc.l"
+#line 406 "compilers/imcc/imcc.l"
 return SHR_U_ASSIGN;
 	YY_BREAK
 case 108:
 YY_RULE_SETUP
-#line 408 "compilers/imcc/imcc.l"
+#line 407 "compilers/imcc/imcc.l"
 return CONCAT_ASSIGN;
 	YY_BREAK
 case 109:
 YY_RULE_SETUP
-#line 410 "compilers/imcc/imcc.l"
+#line 409 "compilers/imcc/imcc.l"
 {
         char *macro_name   = NULL;
         int   start_cond   = YY_START;
@@ -3530,14 +3529,14 @@
 	YY_BREAK
 case 110:
 YY_RULE_SETUP
-#line 453 "compilers/imcc/imcc.l"
+#line 452 "compilers/imcc/imcc.l"
 {
         return read_macro(valp, interp, yyscanner);
     }
 	YY_BREAK
 case 111:
 YY_RULE_SETUP
-#line 457 "compilers/imcc/imcc.l"
+#line 456 "compilers/imcc/imcc.l"
 {
         const int c = yylex(valp,yyscanner,interp);
 
@@ -3552,7 +3551,7 @@
 	YY_BREAK
 case 112:
 YY_RULE_SETUP
-#line 469 "compilers/imcc/imcc.l"
+#line 468 "compilers/imcc/imcc.l"
 {
         if (valp) {
             char *label;
@@ -3577,7 +3576,7 @@
 	YY_BREAK
 case 113:
 YY_RULE_SETUP
-#line 491 "compilers/imcc/imcc.l"
+#line 490 "compilers/imcc/imcc.l"
 {
 
         if (valp) {
@@ -3602,12 +3601,12 @@
 	YY_BREAK
 case 114:
 YY_RULE_SETUP
-#line 513 "compilers/imcc/imcc.l"
+#line 512 "compilers/imcc/imcc.l"
 return COMMA;
 	YY_BREAK
 case 115:
 YY_RULE_SETUP
-#line 515 "compilers/imcc/imcc.l"
+#line 514 "compilers/imcc/imcc.l"
 {
         /* trim last ':' */
         YYCHOP();
@@ -3620,7 +3619,7 @@
 	YY_BREAK
 case 116:
 YY_RULE_SETUP
-#line 525 "compilers/imcc/imcc.l"
+#line 524 "compilers/imcc/imcc.l"
 {
         char   * const macro_name = yytext + 1;
 
@@ -3632,32 +3631,32 @@
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 535 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 537 "compilers/imcc/imcc.l"
+#line 536 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 538 "compilers/imcc/imcc.l"
+#line 537 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 539 "compilers/imcc/imcc.l"
+#line 538 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 540 "compilers/imcc/imcc.l"
+#line 539 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 542 "compilers/imcc/imcc.l"
+#line 541 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3670,7 +3669,7 @@
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 552 "compilers/imcc/imcc.l"
+#line 551 "compilers/imcc/imcc.l"
 {
         valp->s = str_dup(yytext);
 
@@ -3680,7 +3679,7 @@
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 559 "compilers/imcc/imcc.l"
+#line 558 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3711,7 +3710,7 @@
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 587 "compilers/imcc/imcc.l"
+#line 586 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = str_dup(yytext);
@@ -3722,7 +3721,7 @@
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 595 "compilers/imcc/imcc.l"
+#line 594 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3733,7 +3732,7 @@
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 603 "compilers/imcc/imcc.l"
+#line 602 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3744,7 +3743,7 @@
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 611 "compilers/imcc/imcc.l"
+#line 610 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3755,7 +3754,7 @@
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 619 "compilers/imcc/imcc.l"
+#line 618 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3766,7 +3765,7 @@
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 627 "compilers/imcc/imcc.l"
+#line 626 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
@@ -3774,7 +3773,7 @@
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 632 "compilers/imcc/imcc.l"
+#line 631 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3788,7 +3787,7 @@
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 643 "compilers/imcc/imcc.l"
+#line 642 "compilers/imcc/imcc.l"
 {
         if (!pesky_global__is_def) {
             SymReg *r = find_sym(interp, yytext);
@@ -3819,19 +3818,19 @@
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 672 "compilers/imcc/imcc.l"
+#line 671 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 674 "compilers/imcc/imcc.l"
+#line 673 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 679 "compilers/imcc/imcc.l"
+#line 678 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3844,18 +3843,18 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 690 "compilers/imcc/imcc.l"
+#line 689 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 692 "compilers/imcc/imcc.l"
+#line 691 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ENDM);
 	YY_BREAK
 case 136:
 /* rule 136 can match eol */
 YY_RULE_SETUP
-#line 694 "compilers/imcc/imcc.l"
+#line 693 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
@@ -3863,12 +3862,12 @@
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 699 "compilers/imcc/imcc.l"
+#line 698 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 701 "compilers/imcc/imcc.l"
+#line 700 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3895,7 +3894,7 @@
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 725 "compilers/imcc/imcc.l"
+#line 724 "compilers/imcc/imcc.l"
 {
         if (valp) {
             const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 12;
@@ -3914,49 +3913,49 @@
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 741 "compilers/imcc/imcc.l"
+#line 740 "compilers/imcc/imcc.l"
 /* skip leading ws */;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 742 "compilers/imcc/imcc.l"
+#line 741 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 743 "compilers/imcc/imcc.l"
+#line 742 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 744 "compilers/imcc/imcc.l"
+#line 743 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 745 "compilers/imcc/imcc.l"
+#line 744 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 746 "compilers/imcc/imcc.l"
+#line 745 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, MACRO);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 747 "compilers/imcc/imcc.l"
+#line 746 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 748 "compilers/imcc/imcc.l"
+#line 747 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 750 "compilers/imcc/imcc.l"
+#line 749 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 3960 "compilers/imcc/imclexer.c"
+#line 3959 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -5158,7 +5157,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 750 "compilers/imcc/imcc.l"
+#line 749 "compilers/imcc/imcc.l"
 
 
 
@@ -5201,13 +5200,8 @@
 
     if (IMCC_INFO(interp)->frames) {
         tmp->s.pasm_file = IMCC_INFO(interp)->frames->s.pasm_file;
-
-        if (IMCC_INFO(interp)->frames->s.file_needs_free)
-            tmp->s.file            = str_dup(IMCC_INFO(interp)->frames->s.file);
-        else
-            tmp->s.file            = IMCC_INFO(interp)->frames->s.file;
-
-        tmp->s.file_needs_free = IMCC_INFO(interp)->frames->s.file_needs_free;
+        if (IMCC_INFO(interp)->frames->s.file)
+            tmp->s.file = str_dup(IMCC_INFO(interp)->frames->s.file);
     }
 
     tmp->s.interp = interp;
@@ -5246,13 +5240,7 @@
     } else
         ret = frame->s.line;
 
-    /* RT #42383 if frame->s.file was allocated free it */
-    /* Update: This should do it! */
-    if (frame->s.file_needs_free) {
-        DECL_CONST_CAST;
-        mem_sys_free(PARROT_const_cast(char *,frame->s.file));
-        frame->s.file_needs_free = 0;
-    }
+    mem_sys_free(frame->s.file);
     mem_sys_free(frame);
 
     if (buffer != NULL)
@@ -5575,12 +5563,10 @@
 
         /* remember macro name for error reporting
          * first free any filename allocated in new_frame() */
-        if (frame->s.file && frame->s.file_needs_free)
+        if (frame->s.file)
             mem_sys_free(frame->s.file);
 
-        /* RT #42384 check that all the .file text is malloced / freed */
         frame->s.file            = str_dup(name);
-        frame->s.file_needs_free = 1;
 
         /* whitespace can be safely ignored */
         do {
@@ -5671,8 +5657,7 @@
         IMCC_fataly(interp, EXCEPTION_EXTERNAL_ERROR, strerror(errno));
 
     mem_sys_free(s);
-    frame->s.file            = file_name;
-    frame->s.file_needs_free = 0;
+    frame->s.file            = str_dup(file_name);
     frame->s.handle          = file;
     ext                      = strrchr(file_name, '.');
 
@@ -5843,7 +5828,6 @@
 set_filename(PARROT_INTERP, char * const filename)
 {
     IMCC_INFO(interp)->frames->s.file = filename;
-    IMCC_INFO(interp)->frames->s.file_needs_free = 1;
 
     /* in case .line is used outside a .sub, then this
      * can't be done; hence the check.

Modified: trunk/compilers/imcc/main.c
==============================================================================
--- trunk/compilers/imcc/main.c	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/compilers/imcc/main.c	Thu Jun 25 16:46:42 2009	(r39772)
@@ -955,7 +955,7 @@
     Parrot_pbc_load(interp, pf);
 
     IMCC_push_parser_state(interp);
-    IMCC_INFO(interp)->state->file = strdup(sourcefile);
+    IMCC_INFO(interp)->state->file = str_dup(sourcefile);
 
     emit_open(interp, per_pbc, per_pbc ? NULL : (void*)output_file);
 

Modified: trunk/compilers/imcc/parser_util.c
==============================================================================
--- trunk/compilers/imcc/parser_util.c	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/compilers/imcc/parser_util.c	Thu Jun 25 16:46:42 2009	(r39772)
@@ -677,7 +677,7 @@
         IMCC_INFO(interp)->state->next = NULL;
 
     IMCC_INFO(interp)->state->pasm_file = pasm_file;
-    IMCC_INFO(interp)->state->file      = name;
+    IMCC_INFO(interp)->state->file      = str_dup(name);
     IMCC_INFO(interp)->expect_pasm      = 0;
 
     compile_string(interp, s, yyscanner);
@@ -941,7 +941,7 @@
     IMCC_push_parser_state(interp);
     {
         /* Store a copy, in order to know how to free it later */
-        char *copyname = strdup(fullname);
+        char *copyname = str_dup(fullname);
         IMCC_INFO(interp)->state->file = copyname;
         ext                            = strrchr(copyname, '.');
     }

Modified: trunk/src/parrot_debugger.c
==============================================================================
--- trunk/src/parrot_debugger.c	Thu Jun 25 16:22:18 2009	(r39771)
+++ trunk/src/parrot_debugger.c	Thu Jun 25 16:46:42 2009	(r39772)
@@ -184,7 +184,7 @@
             Parrot_pbc_load(interp, pf);
 
             IMCC_push_parser_state(interp);
-            IMCC_INFO(interp)->state->file = strdup(filename);
+            IMCC_INFO(interp)->state->file = str_dup(filename);
 
             if (!(imc_yyin_set(fopen(filename, "r"), yyscanner)))    {
                 IMCC_fatal_standalone(interp, EXCEPTION_PIO_ERROR,


More information about the parrot-commits mailing list