Package gnu.expr
Class PushApply
- java.lang.Object
-
- gnu.expr.ExpVisitor<Expression,Void>
-
- gnu.expr.PushApply
-
- All Implemented Interfaces:
SourceLocator
,SourceLocator
,Locator
public class PushApply extends ExpVisitor<Expression,Void>
Re-arranges ApplyExp where the function is a LetExp or BeginExp. Optimizes((let (...) body) . args)
to (let (...) (body . args)). Optimizes ((begin ... last) . args) to (begin ... (last . args)). This helps optimize Scheme "named let" (and some other forms) by making it more likely the application will be to a known procedure. Optimizes(if (let (...) body) e1 [e2])
to(let (...) (if body e1 [e2]))
. Optimizes(if (begin ... last) e1 [e2])
to(begin ... (if last e1 [e2]))
. These optimizations have to be done after Declarations are bound. Also, for eachLambdaExp
set thecanFinishCondition
field. This information is used in the followingInlineCalls
pass, to determine which calls (and thus other expressions) have the typeneverReturnsType
. That in turn is used in the laterChainLambda
pass to warn about unreachable code.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface gnu.text.SourceLocator
SourceLocator.Simple
-
-
Field Summary
-
Fields inherited from class gnu.expr.ExpVisitor
currentLambda, exitValue, messages
-
-
Constructor Summary
Constructors Constructor Description PushApply()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Expression
defaultValue(Expression r, Void ignored)
void
forkNext()
void
forkPop()
void
forkPush()
static void
pushApply(Expression exp, Compilation comp)
protected Expression
update(Expression exp, Expression r)
protected Expression
visitApplyExp(ApplyExp exp, Void ignored)
protected Expression
visitBlockExp(BlockExp exp, Void ignored)
protected Expression
visitCaseExp(CaseExp exp, Void ignored)
protected Expression
visitClassExp(ClassExp exp, Void ignored)
protected Expression
visitExitExp(ExitExp exp, Void ignored)
protected Expression
visitIfExp(IfExp exp, Void ignored)
protected Expression
visitLambdaExp(LambdaExp exp, Void ignored)
protected Expression
visitReferenceExp(ReferenceExp exp, Void ignored)
protected Expression
visitTryExp(TryExp exp, Void ignored)
-
Methods inherited from class gnu.expr.ExpVisitor
error, getColumnNumber, getCompilation, getCurrentLambda, getEndColumn, getEndLine, getExitValue, getFileName, getLanguage, getLineNumber, getMessages, getPublicId, getStartColumn, getStartLine, getSystemId, isStableSourceLocation, noteError, setColumn, setContext, setFile, setLine, setLine, visit, visit, visitAndUpdate, visitBeginExp, visitDeclarationType, visitDeclarationTypes, visitDefaultArgs, visitExpression, visitExps, visitExps, visitFluidLetExp, visitLangExp, visitLetExp, visitModuleExp, visitObjectExp, visitQuoteExp, visitScopeExp, visitSetExp, visitSynchronizedExp, visitThisExp
-
-
-
-
Method Detail
-
pushApply
public static void pushApply(Expression exp, Compilation comp)
-
update
protected Expression update(Expression exp, Expression r)
- Overrides:
update
in classExpVisitor<Expression,Void>
-
defaultValue
protected Expression defaultValue(Expression r, Void ignored)
- Overrides:
defaultValue
in classExpVisitor<Expression,Void>
-
visitApplyExp
protected Expression visitApplyExp(ApplyExp exp, Void ignored)
- Overrides:
visitApplyExp
in classExpVisitor<Expression,Void>
-
visitIfExp
protected Expression visitIfExp(IfExp exp, Void ignored)
- Overrides:
visitIfExp
in classExpVisitor<Expression,Void>
-
visitCaseExp
protected Expression visitCaseExp(CaseExp exp, Void ignored)
- Overrides:
visitCaseExp
in classExpVisitor<Expression,Void>
-
visitTryExp
protected Expression visitTryExp(TryExp exp, Void ignored)
- Overrides:
visitTryExp
in classExpVisitor<Expression,Void>
-
visitBlockExp
protected Expression visitBlockExp(BlockExp exp, Void ignored)
- Overrides:
visitBlockExp
in classExpVisitor<Expression,Void>
-
visitExitExp
protected Expression visitExitExp(ExitExp exp, Void ignored)
- Overrides:
visitExitExp
in classExpVisitor<Expression,Void>
-
visitReferenceExp
protected Expression visitReferenceExp(ReferenceExp exp, Void ignored)
- Overrides:
visitReferenceExp
in classExpVisitor<Expression,Void>
-
visitClassExp
protected Expression visitClassExp(ClassExp exp, Void ignored)
- Overrides:
visitClassExp
in classExpVisitor<Expression,Void>
-
visitLambdaExp
protected Expression visitLambdaExp(LambdaExp exp, Void ignored)
- Overrides:
visitLambdaExp
in classExpVisitor<Expression,Void>
-
forkPush
public void forkPush()
-
forkNext
public void forkNext()
-
forkPop
public void forkPop()
-
-