public class CompileStack
extends Object
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:
| Modifiers | Name | Description |
|---|---|---|
static class |
CompileStack.BlockRecorder |
|
protected static class |
CompileStack.LabelRange |
| Constructor and description |
|---|
CompileStack(WriterController controller) |
| Type Params | Return Type | Name and description |
|---|---|---|
|
public void |
addExceptionBlock(org.objectweb.asm.Label start, org.objectweb.asm.Label end, org.objectweb.asm.Label goal, String sig) |
|
public void |
applyBlockRecorder() |
|
public void |
applyFinallyBlocks(org.objectweb.asm.Label label, boolean isBreakLabel) |
|
public void |
clear()Clears the state of the class. |
|
public boolean |
containsVariable(String name)
|
|
public org.objectweb.asm.Label |
createLocalLabel(String name)Creates or returns the label for the given name. |
|
public int |
defineTemporaryVariable(Variable var, boolean store)Creates a temporary variable. |
|
public int |
defineTemporaryVariable(String name, boolean store)Creates a temporary variable. |
|
public int |
defineTemporaryVariable(String name, ClassNode type, boolean store)Creates a temporary variable. |
|
public BytecodeVariable |
defineVariable(Variable v, boolean initFromStack)Defines a new Variable using an AST variable. |
|
public BytecodeVariable |
defineVariable(Variable v, ClassNode variableType, boolean initFromStack) |
|
public org.objectweb.asm.Label |
getBreakLabel() |
|
public org.objectweb.asm.Label |
getContinueLabel() |
|
public org.objectweb.asm.Label |
getLabel(String name)Returns the label for the given name. |
|
public org.objectweb.asm.Label |
getNamedBreakLabel(String name)
|
|
public org.objectweb.asm.Label |
getNamedContinueLabel(String name)
|
|
public VariableScope |
getScope() |
|
public BytecodeVariable |
getVariable(String variableName) |
|
public BytecodeVariable |
getVariable(String variableName, boolean mustExist)Returns a normal variable. |
|
public boolean |
hasBlockRecorder() |
|
public void |
init(VariableScope scope, Parameter[] parameters)initializes this class for a MethodNode. |
|
public boolean |
isImplicitThis() |
|
public boolean |
isInSpecialConstructorCall() |
|
public boolean |
isLHS() |
|
public void |
pop() |
|
public void |
popBlockRecorderVisit(CompileStack.BlockRecorder finallyBlock) |
|
public void |
popImplicitThis() |
|
public void |
popLHS() |
|
public void |
pushBlockRecorder(CompileStack.BlockRecorder recorder) |
|
public void |
pushBlockRecorderVisit(CompileStack.BlockRecorder finallyBlock) |
|
public void |
pushBooleanExpression()Because a boolean Expression may not be evaluated completely it is important to keep the registers clean. |
|
public org.objectweb.asm.Label |
pushBreakable(List<String> labelNames)Creates a new break label and an element for the state stack so pop has to be called later. |
|
public void |
pushImplicitThis(boolean implicitThis) |
|
public void |
pushInSpecialConstructorCall() |
|
public void |
pushLHS(boolean lhs) |
|
public void |
pushLoop(VariableScope scope, List<String> labelNames)Should be called when descending into a loop that defines also a scope. |
|
public void |
pushLoop(VariableScope scope, String labelName)Should be called when descending into a loop that defines also a scope. |
|
public void |
pushLoop(List<String> labelNames)Should be called when descending into a loop that does not define a scope Creates a element for the state stack so pop has to be called later. |
|
public void |
pushLoop(String labelName)Should be called when descending into a loop that does not define a scope. |
|
public void |
pushState() |
|
public org.objectweb.asm.Label |
pushSwitch()Creates a new break label and an element for the state stack so pop has to be called later. |
|
public void |
pushVariableScope(VariableScope scope)Causes the state-stack to add an element and sets the given scope as new current variable scope. |
|
public void |
removeVar(int variableIndex)Indicates that the specified temporary variable is no longer used. |
|
public void |
writeExceptionTable(CompileStack.BlockRecorder block, org.objectweb.asm.Label goal, String sig) |
Clears the state of the class. This method should be called after a MethodNode is visited. Note that a call to init will fail if clear is not called before
name - the name of the variable of interestCreates or returns the label for the given name.
Creates a temporary variable.
var - specifies name and typestore - defines if the toplevel argument of the stack should be storedCreates a temporary variable.
name - defines type and namestore - defines if the top-level argument of the stack should be storedCreates a temporary variable.
name - the variable nametype - the variable typestore - indicates if the top-level argument of the stack should be storedDefines a new Variable using an AST variable.
initFromStack - if true the last element of the
stack will be used to initialize
the new variable. If false null
will be used.Returns the label for the given name.
break label for name
continue label for nameReturns a normal variable.
If 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.
variableName - name of the variablemustExist - throw exception if variable does not existmustExist not true)initializes this class for a MethodNode. This method will automatically define variables for the method parameters and will create references if needed. The created variables can be accessed by calling getVariable().
Because a boolean Expression may not be evaluated completely it is important to keep the registers clean.
Creates a new break label and an element for the state stack so pop has to be called later.
Should be called when descending into a loop that defines also a scope. Calls pushVariableScope and prepares labels for a loop structure. Creates an element for the state stack so pop has to be called later
Should be called when descending into a loop that defines also a scope. Calls pushVariableScope and prepares labels for a loop structure. Creates a element for the state stack so pop has to be called later.
Should be called when descending into a loop that does not define a scope Creates a element for the state stack so pop has to be called later.
Should be called when descending into a loop that does not define a scope. Creates a element for the state stack so pop has to be called later.
Creates a new break label and an element for the state stack so pop has to be called later.
Causes the state-stack to add an element and sets the given scope as new current variable scope. Creates an element for the state stack so pop has to be called later
Indicates that the specified temporary variable is no longer used.
Copyright © 2003-2026 The Apache Software Foundation. All rights reserved.