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 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
-
Constructor Details
-
PushApply
public PushApply()
-
-
Method Details
-
pushApply
-
update
- Overrides:
update
in classExpVisitor<Expression,
Void>
-
defaultValue
- Overrides:
defaultValue
in classExpVisitor<Expression,
Void>
-
visitApplyExp
- Overrides:
visitApplyExp
in classExpVisitor<Expression,
Void>
-
visitIfExp
- Overrides:
visitIfExp
in classExpVisitor<Expression,
Void>
-
visitCaseExp
- Overrides:
visitCaseExp
in classExpVisitor<Expression,
Void>
-
visitTryExp
- Overrides:
visitTryExp
in classExpVisitor<Expression,
Void>
-
visitBlockExp
- Overrides:
visitBlockExp
in classExpVisitor<Expression,
Void>
-
visitExitExp
- Overrides:
visitExitExp
in classExpVisitor<Expression,
Void>
-
visitReferenceExp
- Overrides:
visitReferenceExp
in classExpVisitor<Expression,
Void>
-
visitClassExp
- Overrides:
visitClassExp
in classExpVisitor<Expression,
Void>
-
visitLambdaExp
- Overrides:
visitLambdaExp
in classExpVisitor<Expression,
Void>
-
forkPush
public void forkPush() -
forkNext
public void forkNext() -
forkPop
public void forkPop()
-