[svn:parrot] r41299 - trunk/compilers/imcc

NotFound at svn.parrot.org NotFound at svn.parrot.org
Wed Sep 16 17:00:37 UTC 2009


Author: NotFound
Date: Wed Sep 16 17:00:36 2009
New Revision: 41299
URL: https://trac.parrot.org/parrot/changeset/41299

Log:
[imcc] use a copy of macro name, attempt to fix RT #60926

Modified:
   trunk/compilers/imcc/imcc.l
   trunk/compilers/imcc/imclexer.c

Modified: trunk/compilers/imcc/imcc.l
==============================================================================
--- trunk/compilers/imcc/imcc.l	Wed Sep 16 16:59:31 2009	(r41298)
+++ trunk/compilers/imcc/imcc.l	Wed Sep 16 17:00:36 2009	(r41299)
@@ -519,9 +519,10 @@
     }
 
 <emit,INITIAL>{DOT}{LETTER}{LETTERDIGIT}* {
-        char   * const macro_name = yytext + 1;
-
-        if (!expand_macro(interp, macro_name, yyscanner)) {
+        char   * const macro_name = mem_sys_strdup(yytext + 1);
+        int failed = expand_macro(interp, macro_name, yyscanner);
+        mem_sys_free(macro_name);
+	if (! failed) {
             yyless(1);
             return DOT;
         }

Modified: trunk/compilers/imcc/imclexer.c
==============================================================================
--- trunk/compilers/imcc/imclexer.c	Wed Sep 16 16:59:31 2009	(r41298)
+++ trunk/compilers/imcc/imclexer.c	Wed Sep 16 17:00:36 2009	(r41299)
@@ -3618,9 +3618,10 @@
 YY_RULE_SETUP
 #line 521 "compilers/imcc/imcc.l"
 {
-        char   * const macro_name = yytext + 1;
-
-        if (!expand_macro(interp, macro_name, yyscanner)) {
+        char   * const macro_name = mem_sys_strdup(yytext + 1);
+        int failed = expand_macro(interp, macro_name, yyscanner);
+        mem_sys_free(macro_name);
+	if (! failed) {
             yyless(1);
             return DOT;
         }
@@ -3628,32 +3629,32 @@
 	YY_BREAK
 case 117:
 YY_RULE_SETUP
-#line 532 "compilers/imcc/imcc.l"
+#line 533 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, FLOATC);
 	YY_BREAK
 case 118:
 YY_RULE_SETUP
-#line 533 "compilers/imcc/imcc.l"
+#line 534 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 119:
 YY_RULE_SETUP
-#line 534 "compilers/imcc/imcc.l"
+#line 535 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 120:
 YY_RULE_SETUP
-#line 535 "compilers/imcc/imcc.l"
+#line 536 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 121:
 YY_RULE_SETUP
-#line 536 "compilers/imcc/imcc.l"
+#line 537 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, INTC);
 	YY_BREAK
 case 122:
 YY_RULE_SETUP
-#line 538 "compilers/imcc/imcc.l"
+#line 539 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
@@ -3666,7 +3667,7 @@
 	YY_BREAK
 case 123:
 YY_RULE_SETUP
-#line 548 "compilers/imcc/imcc.l"
+#line 549 "compilers/imcc/imcc.l"
 {
         valp->s = mem_sys_strdup(yytext);
 
@@ -3676,7 +3677,7 @@
 	YY_BREAK
 case 124:
 YY_RULE_SETUP
-#line 555 "compilers/imcc/imcc.l"
+#line 556 "compilers/imcc/imcc.l"
 {
         macro_frame_t *frame;
 
@@ -3707,7 +3708,7 @@
 	YY_BREAK
 case 125:
 YY_RULE_SETUP
-#line 583 "compilers/imcc/imcc.l"
+#line 584 "compilers/imcc/imcc.l"
 {
         /* charset:"..." */
         valp->s = mem_sys_strdup(yytext);
@@ -3718,7 +3719,7 @@
 	YY_BREAK
 case 126:
 YY_RULE_SETUP
-#line 591 "compilers/imcc/imcc.l"
+#line 592 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3729,7 +3730,7 @@
 	YY_BREAK
 case 127:
 YY_RULE_SETUP
-#line 599 "compilers/imcc/imcc.l"
+#line 600 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3740,7 +3741,7 @@
 	YY_BREAK
 case 128:
 YY_RULE_SETUP
-#line 607 "compilers/imcc/imcc.l"
+#line 608 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3751,7 +3752,7 @@
 	YY_BREAK
 case 129:
 YY_RULE_SETUP
-#line 615 "compilers/imcc/imcc.l"
+#line 616 "compilers/imcc/imcc.l"
 {
         if (valp) (valp)->s = yytext;
         if (IMCC_INFO(interp)->state->pasm_file)
@@ -3762,7 +3763,7 @@
 	YY_BREAK
 case 130:
 YY_RULE_SETUP
-#line 623 "compilers/imcc/imcc.l"
+#line 624 "compilers/imcc/imcc.l"
 {
         IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
             "'%s' is not a valid register name", yytext);
@@ -3770,7 +3771,7 @@
 	YY_BREAK
 case 131:
 YY_RULE_SETUP
-#line 628 "compilers/imcc/imcc.l"
+#line 629 "compilers/imcc/imcc.l"
 {
         if (IMCC_INFO(interp)->state->pasm_file == 0)
             IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR,
@@ -3784,7 +3785,7 @@
 	YY_BREAK
 case 132:
 YY_RULE_SETUP
-#line 639 "compilers/imcc/imcc.l"
+#line 640 "compilers/imcc/imcc.l"
 {
         if (!IMCC_INFO(interp)->is_def) {
             SymReg *r = find_sym(interp, yytext);
@@ -3815,19 +3816,19 @@
 	YY_BREAK
 case 133:
 YY_RULE_SETUP
-#line 668 "compilers/imcc/imcc.l"
+#line 669 "compilers/imcc/imcc.l"
 /* skip */;
 	YY_BREAK
 case 134:
 YY_RULE_SETUP
-#line 670 "compilers/imcc/imcc.l"
+#line 671 "compilers/imcc/imcc.l"
 {
         /* catch all except for state macro */
         return yytext[0];
     }
 	YY_BREAK
 case YY_STATE_EOF(emit):
-#line 675 "compilers/imcc/imcc.l"
+#line 676 "compilers/imcc/imcc.l"
 {
         BEGIN(INITIAL);
 
@@ -3840,18 +3841,18 @@
     }
 	YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 686 "compilers/imcc/imcc.l"
+#line 687 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 135:
 YY_RULE_SETUP
-#line 688 "compilers/imcc/imcc.l"
+#line 689 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ENDM);
 	YY_BREAK
 case 136:
 /* rule 136 can match eol */
 YY_RULE_SETUP
-#line 690 "compilers/imcc/imcc.l"
+#line 691 "compilers/imcc/imcc.l"
 {
         IMCC_INFO(interp)->line++;
         DUP_AND_RET(valp, '\n');
@@ -3859,12 +3860,12 @@
 	YY_BREAK
 case 137:
 YY_RULE_SETUP
-#line 695 "compilers/imcc/imcc.l"
+#line 696 "compilers/imcc/imcc.l"
 return LABEL;
 	YY_BREAK
 case 138:
 YY_RULE_SETUP
-#line 697 "compilers/imcc/imcc.l"
+#line 698 "compilers/imcc/imcc.l"
 {
 
         if (yylex(valp,yyscanner,interp) != LABEL)
@@ -3891,7 +3892,7 @@
 	YY_BREAK
 case 139:
 YY_RULE_SETUP
-#line 721 "compilers/imcc/imcc.l"
+#line 722 "compilers/imcc/imcc.l"
 {
         if (valp) {
             const size_t len = strlen(IMCC_INFO(interp)->cur_macro_name) + yyleng + 12;
@@ -3910,49 +3911,49 @@
 	YY_BREAK
 case 140:
 YY_RULE_SETUP
-#line 737 "compilers/imcc/imcc.l"
+#line 738 "compilers/imcc/imcc.l"
 /* skip leading ws */;
 	YY_BREAK
 case 141:
 YY_RULE_SETUP
-#line 738 "compilers/imcc/imcc.l"
+#line 739 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, ' ');
 	YY_BREAK
 case 142:
 YY_RULE_SETUP
-#line 739 "compilers/imcc/imcc.l"
+#line 740 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 143:
 YY_RULE_SETUP
-#line 740 "compilers/imcc/imcc.l"
+#line 741 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, REG);
 	YY_BREAK
 case 144:
 YY_RULE_SETUP
-#line 741 "compilers/imcc/imcc.l"
+#line 742 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, IDENTIFIER);
 	YY_BREAK
 case 145:
 YY_RULE_SETUP
-#line 742 "compilers/imcc/imcc.l"
+#line 743 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, MACRO);
 	YY_BREAK
 case 146:
 YY_RULE_SETUP
-#line 743 "compilers/imcc/imcc.l"
+#line 744 "compilers/imcc/imcc.l"
 DUP_AND_RET(valp, yytext[0]);
 	YY_BREAK
 case YY_STATE_EOF(macro):
-#line 744 "compilers/imcc/imcc.l"
+#line 745 "compilers/imcc/imcc.l"
 yyterminate();
 	YY_BREAK
 case 147:
 YY_RULE_SETUP
-#line 746 "compilers/imcc/imcc.l"
+#line 747 "compilers/imcc/imcc.l"
 ECHO;
 	YY_BREAK
-#line 3956 "compilers/imcc/imclexer.c"
+#line 3957 "compilers/imcc/imclexer.c"
 case YY_STATE_EOF(pod):
 case YY_STATE_EOF(cmt1):
 case YY_STATE_EOF(cmt2):
@@ -5154,7 +5155,7 @@
 
 #define YYTABLES_NAME "yytables"
 
-#line 746 "compilers/imcc/imcc.l"
+#line 747 "compilers/imcc/imcc.l"
 
 
 


More information about the parrot-commits mailing list