Package gnu.expr
Class PushApply
- All Implemented Interfaces:
SourceLocator,SourceLocator,Locator
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 each LambdaExp set the canFinishCondition field.
This information is used in the following InlineCalls pass,
to determine which calls (and thus other expressions) have the type
neverReturnsType. That in turn is used in the later
ChainLambda 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 -
Method Summary
Modifier and TypeMethodDescriptionprotected ExpressiondefaultValue(Expression r, Void ignored) voidforkNext()voidforkPop()voidforkPush()static voidpushApply(Expression exp, Compilation comp) protected Expressionupdate(Expression exp, Expression r) protected ExpressionvisitApplyExp(ApplyExp exp, Void ignored) protected ExpressionvisitBlockExp(BlockExp exp, Void ignored) protected ExpressionvisitCaseExp(CaseExp exp, Void ignored) protected ExpressionvisitClassExp(ClassExp exp, Void ignored) protected ExpressionvisitExitExp(ExitExp exp, Void ignored) protected ExpressionvisitIfExp(IfExp exp, Void ignored) protected ExpressionvisitLambdaExp(LambdaExp exp, Void ignored) protected ExpressionvisitReferenceExp(ReferenceExp exp, Void ignored) protected ExpressionvisitTryExp(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
-
Constructor Details
-
PushApply
public PushApply()
-
-
Method Details
-
pushApply
-
update
- Overrides:
updatein classExpVisitor<Expression,Void>
-
defaultValue
- Overrides:
defaultValuein classExpVisitor<Expression,Void>
-
visitApplyExp
- Overrides:
visitApplyExpin classExpVisitor<Expression,Void>
-
visitIfExp
- Overrides:
visitIfExpin classExpVisitor<Expression,Void>
-
visitCaseExp
- Overrides:
visitCaseExpin classExpVisitor<Expression,Void>
-
visitTryExp
- Overrides:
visitTryExpin classExpVisitor<Expression,Void>
-
visitBlockExp
- Overrides:
visitBlockExpin classExpVisitor<Expression,Void>
-
visitExitExp
- Overrides:
visitExitExpin classExpVisitor<Expression,Void>
-
visitReferenceExp
- Overrides:
visitReferenceExpin classExpVisitor<Expression,Void>
-
visitClassExp
- Overrides:
visitClassExpin classExpVisitor<Expression,Void>
-
visitLambdaExp
- Overrides:
visitLambdaExpin classExpVisitor<Expression,Void>
-
forkPush
public void forkPush() -
forkNext
public void forkNext() -
forkPop
public void forkPop()
-