|
Groovy 1.7.0 | |||||||
FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.codehaus.groovy.classgen.CompileStack
class CompileStack extends Object
This class is a helper for AsmClassGenerator. It manages different aspects of the code of a code block like handling labels, defining variables, and scopes. After a MethodNode is visited clear should be called, for initialization the method init should be used.
Some Notes:
Nested Class Summary | |
---|---|
class |
CompileStack.StateStackElement
|
Constructor Summary | |
CompileStack()
|
Method Summary | |
---|---|
void
|
applyFinallyBlocks(Label label, boolean isBreakLabel)
|
void
|
applyFinallyBlocks()
|
void
|
clear()
Clears the state of the class. |
boolean
|
containsVariable(String name)
|
Label
|
createLocalLabel(String name)
creates a new named label |
int
|
defineTemporaryVariable(def var, boolean store)
creates a temporary variable. |
int
|
defineTemporaryVariable(String name, boolean store)
creates a temporary variable. |
int
|
defineTemporaryVariable(String name, ClassNode node, boolean store)
creates a temporary variable. |
Variable
|
defineVariable(def v, boolean initFromStack)
Defines a new Variable using an AST variable. |
Label
|
getBreakLabel()
|
Label
|
getContinueLabel()
|
Label
|
getLabel(String name)
Returns the label for the given name |
protected Label
|
getNamedBreakLabel(String name)
Used for |
protected Label
|
getNamedContinueLabel(String name)
Used for |
VariableScope
|
getScope()
|
Variable
|
getVariable(String variableName)
|
Variable
|
getVariable(String variableName, boolean mustExist)
Returns a normal variable. |
boolean
|
hasFinallyBlocks()
|
protected void
|
init(VariableScope el, Parameter[] parameters, MethodVisitor mv, ClassNode cn)
initializes this class for a MethodNode. |
void
|
pop()
|
void
|
popFinallyBlock()
|
void
|
popFinallyBlockVisit(Runnable block)
|
protected void
|
pushBooleanExpression()
because a boolean Expression may not be evaluated completly it is important to keep the registers clean |
void
|
pushFinallyBlock(Runnable block)
|
void
|
pushFinallyBlockVisit(Runnable block)
|
protected void
|
pushLoop(VariableScope el, String labelName)
Should be called when decending into a loop that defines also a scope. |
protected void
|
pushLoop(String labelName)
Should be called when decending into a loop that does not define a scope. |
protected void
|
pushState()
|
protected Label
|
pushSwitch()
Creates a new break label and a element for the state stack so pop has to be called later |
protected void
|
pushVariableScope(VariableScope el)
Causes the statestack to add an element and sets the given scope as new current variable scope. |
void
|
removeVar(int tempIndex)
|
Methods inherited from class Object | |
---|---|
wait, wait, wait, hashCode, getClass, equals, toString, notify, notifyAll |
Constructor Detail |
---|
CompileStack()
Method Detail |
---|
public void applyFinallyBlocks(Label label, boolean isBreakLabel)
public void applyFinallyBlocks()
public void clear()
public boolean containsVariable(String name)
public Label createLocalLabel(String name)
public int defineTemporaryVariable(def var, boolean store)
public int defineTemporaryVariable(String name, boolean store)
public int defineTemporaryVariable(String name, ClassNode node, boolean store)
public Variable defineVariable(def v, boolean initFromStack)
public Label getBreakLabel()
public Label getContinueLabel()
public Label getLabel(String name)
protected Label getNamedBreakLabel(String name)
break foo
inside a loop to end the
execution of the marked loop. This method will return the
break label of the loop if there is one found for the name.
If not, the current break label is returned.
protected Label getNamedContinueLabel(String name)
continue foo
inside a loop to continue
the execution of the marked loop. This method will return
the break label of the loop if there is one found for the
name. If not, getLabel is used.
public VariableScope getScope()
public Variable getVariable(String variableName)
public Variable getVariable(String variableName, boolean mustExist)
mustExist
is true and the normal variable doesn't exist,
then this method will throw a GroovyBugError. It is not the intention of
this method to let this happen! And the exception should not be used for
flow control - it is just acting as an assertion. If the exception is thrown
then it indicates a bug in the class using CompileStack.
This method can also not be used to return a temporary variable.
Temporary variables are not normal variables.
mustExist
not true)
public boolean hasFinallyBlocks()
protected void init(VariableScope el, Parameter[] parameters, MethodVisitor mv, ClassNode cn)
public void pop()
public void popFinallyBlock()
public void popFinallyBlockVisit(Runnable block)
protected void pushBooleanExpression()
public void pushFinallyBlock(Runnable block)
public void pushFinallyBlockVisit(Runnable block)
protected void pushLoop(VariableScope el, String labelName)
protected void pushLoop(String labelName)
protected void pushState()
protected Label pushSwitch()
protected void pushVariableScope(VariableScope el)
public void removeVar(int tempIndex)
Copyright © 2003-2009 The Codehaus. All rights reserved.