gnu.expr
Class FindTailCalls
java.lang.Object
gnu.expr.ExpVisitor<Expression,D>
gnu.expr.ExpExpVisitor<Expression>
gnu.expr.FindTailCalls
- All Implemented Interfaces:
- javax.xml.transform.SourceLocator, org.xml.sax.Locator
public class FindTailCalls
- extends ExpExpVisitor<Expression>
A visitor that checks for tails-calls; also notes read/write/call accesses.
Does setTailCall on ApplyExp's that are tail-calls.
Also setCanRead, setCanCall on Declarations
and setCanRead, setCanCall on LambdaExp when appropriate.
(setCanWrite on Declarations needs to be set before this.)
Note the final part of deciding inlineability has to be done after
FindTailCalls finishes (or at least after we've visited all possible
callers), so it is deferred to FindCapturedvars.visitLambdaExp.
The extra parameter is the returnContinuation
- the expression we
"return to" - i.e. when done eveluating an expression, we're also done
with the returnContinuation
. Normally it is is same
Expression
as we are visiting, but (for example) when visiting the
last expression of a BeginExp
the returnContinuation
is the same as that of the containing BeginExp
.
Method Summary |
static void |
findTailCalls(Expression exp,
Compilation comp)
|
void |
postVisitDecls(ScopeExp exp)
|
protected Expression |
visitApplyExp(ApplyExp exp,
Expression returnContinuation)
|
protected Expression |
visitBeginExp(BeginExp exp,
Expression returnContinuation)
|
protected Expression |
visitBlockExp(BlockExp exp,
Expression returnContinuation)
|
protected Expression |
visitClassExp(ClassExp exp,
Expression returnContinuation)
|
protected Expression |
visitExpression(Expression exp,
Expression returnContinuation)
|
Expression[] |
visitExps(Expression[] exps)
|
protected Expression |
visitFluidLetExp(FluidLetExp exp,
Expression returnContinuation)
|
protected Expression |
visitIfExp(IfExp exp,
Expression returnContinuation)
|
protected Expression |
visitLambdaExp(LambdaExp exp,
Expression returnContinuation)
|
protected Expression |
visitLetExp(LetExp exp,
Expression returnContinuation)
|
protected Expression |
visitReferenceExp(ReferenceExp exp,
Expression returnContinuation)
|
protected Expression |
visitSetExp(SetExp exp,
Expression returnContinuation)
|
protected Expression |
visitSynchronizedExp(SynchronizedExp exp,
Expression returnContinuation)
|
protected Expression |
visitTryExp(TryExp exp,
Expression returnContinuation)
|
Methods inherited from class gnu.expr.ExpVisitor |
error, getColumnNumber, getCompilation, getCurrentLambda, getExitValue, getFileName, getLineNumber, getMessages, getPublicId, getSystemId, isStableSourceLocation, noteError, setColumn, setContext, setFile, setLine, setLine, visit, visitAndUpdate, visitDeclarationType, visitDeclarationTypes, visitDefaultArgs, visitExitExp, visitExps, visitExps, visitLangExp, visitModuleExp, visitObjectExp, visitQuoteExp, visitScopeExp, visitSetExpValue, visitThisExp |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
FindTailCalls
public FindTailCalls()
findTailCalls
public static void findTailCalls(Expression exp,
Compilation comp)
visitExpression
protected Expression visitExpression(Expression exp,
Expression returnContinuation)
- Overrides:
visitExpression
in class ExpVisitor<Expression,Expression>
visitExps
public Expression[] visitExps(Expression[] exps)
visitApplyExp
protected Expression visitApplyExp(ApplyExp exp,
Expression returnContinuation)
- Overrides:
visitApplyExp
in class ExpVisitor<Expression,Expression>
visitBlockExp
protected Expression visitBlockExp(BlockExp exp,
Expression returnContinuation)
- Overrides:
visitBlockExp
in class ExpVisitor<Expression,Expression>
visitBeginExp
protected Expression visitBeginExp(BeginExp exp,
Expression returnContinuation)
- Overrides:
visitBeginExp
in class ExpVisitor<Expression,Expression>
visitFluidLetExp
protected Expression visitFluidLetExp(FluidLetExp exp,
Expression returnContinuation)
- Overrides:
visitFluidLetExp
in class ExpVisitor<Expression,Expression>
visitLetExp
protected Expression visitLetExp(LetExp exp,
Expression returnContinuation)
- Overrides:
visitLetExp
in class ExpVisitor<Expression,Expression>
postVisitDecls
public void postVisitDecls(ScopeExp exp)
visitIfExp
protected Expression visitIfExp(IfExp exp,
Expression returnContinuation)
- Overrides:
visitIfExp
in class ExpVisitor<Expression,Expression>
visitLambdaExp
protected Expression visitLambdaExp(LambdaExp exp,
Expression returnContinuation)
- Overrides:
visitLambdaExp
in class ExpVisitor<Expression,Expression>
visitClassExp
protected Expression visitClassExp(ClassExp exp,
Expression returnContinuation)
- Overrides:
visitClassExp
in class ExpVisitor<Expression,Expression>
visitReferenceExp
protected Expression visitReferenceExp(ReferenceExp exp,
Expression returnContinuation)
- Overrides:
visitReferenceExp
in class ExpVisitor<Expression,Expression>
visitSetExp
protected Expression visitSetExp(SetExp exp,
Expression returnContinuation)
- Overrides:
visitSetExp
in class ExpVisitor<Expression,Expression>
visitTryExp
protected Expression visitTryExp(TryExp exp,
Expression returnContinuation)
- Overrides:
visitTryExp
in class ExpVisitor<Expression,Expression>
visitSynchronizedExp
protected Expression visitSynchronizedExp(SynchronizedExp exp,
Expression returnContinuation)
- Overrides:
visitSynchronizedExp
in class ExpVisitor<Expression,Expression>