[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