gnu.expr
Class FindTailCalls

java.lang.Object
  extended by gnu.expr.ExpVisitor<Expression,D>
      extended by gnu.expr.ExpExpVisitor<Expression>
          extended by 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.


Field Summary
 
Fields inherited from class gnu.expr.ExpVisitor
currentLambda, exitValue, messages
 
Constructor Summary
FindTailCalls()
           
 
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.ExpExpVisitor
defaultValue, update
 
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
 

Constructor Detail

FindTailCalls

public FindTailCalls()
Method Detail

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>