cvsuser 05/02/27 08:13:27
Modified: . ABI_CHANGES
imcc pcc.c
Log:
check_tail_call
1. Removes the arbitrary check_tail_call() restriction to the final
position.
2. Fixes a bug in testing for the implicit 'null I0; null I3;
returncc' sequence -- it's 'returncc', not 'invoke'. Those instructions
are still emitted after the 'tailcall'; I wasn't sure how to remove them
without leaking memory.
3. Additionally, fixes a subtle typo in ABI_CHANGES (look closely!)
Courtesy of Bob Rogers <[EMAIL PROTECTED]>
Revision Changes Path
1.3 +1 -1 parrot/ABI_CHANGES
Index: ABI_CHANGES
===================================================================
RCS file: /cvs/public/parrot/ABI_CHANGES,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ABI_CHANGES 27 Nov 2004 13:19:21 -0000 1.2
+++ ABI_CHANGES 27 Feb 2005 16:13:26 -0000 1.3
@@ -41,4 +41,4 @@
2004.11.15 leo
The variables P0, P1, P2, S0 aren't visible in the called subroutine
-anymore. See docs/ppds/pdd03_calling_conventions.pod.
+anymore. See docs/pdds/pdd03_calling_conventions.pod.
1.87 +3 -3 parrot/imcc/pcc.c
Index: pcc.c
===================================================================
RCS file: /cvs/public/parrot/imcc/pcc.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -r1.86 -r1.87
--- pcc.c 15 Jan 2005 21:04:58 -0000 1.86
+++ pcc.c 27 Feb 2005 16:13:27 -0000 1.87
@@ -580,8 +580,8 @@
if (!tmp)
return 0;
if (tmp->opnum == -1 && (tmp->type & ITPCCSUB) &&
- (tmp->type & ITLABEL) && !tmp->next) {
- ret_ins = tmp;
+ (tmp->type & ITLABEL)) {
+ ret_ins = tmp;
IMCC_debug(interp, DEBUG_OPT1, "check tail call %I \n", ins);
}
/*
@@ -605,7 +605,7 @@
}
else
return 0;
- if (strcmp(tmp->op, "invoke"))
+ if (strcmp(tmp->op, "returncc"))
return 0;
IMCC_debug(interp, DEBUG_OPT1, "check tail call %I \n", tmp);
nrets = 0;