org.codehaus.groovy.classgen
Class Key
Constructor Summary |
Key(String name, def params)
|
Method Summary |
void |
addGeneratedClosureConstructorCall(ConstructorCallExpression call)
|
boolean |
addInnerClass(ClassNode innerClass)
|
void |
addVariableNames(Expression expression, List list)
|
static int |
argumentSize(Expression arguments)
|
boolean |
argumentsUseStack(Expression arguments)
which case the arguments are evaluated first, stored in the
variable stack and then reloaded to make a method call
|
static boolean |
containsSpreadExpression(Expression arguments)
|
ClassNode |
createClosureClass(ClosureExpression expression)
|
void |
createInterfaceSyntheticStaticFields()
|
Expression |
createReturnLHSExpression(Expression expression)
For assignment expressions, return a safe expression for the LHS we can use
to return the value
|
Expression |
createReusableExpression(Expression expression)
|
void |
createSyntheticStaticFields()
|
void |
despreadList(List expressions, boolean wrap)
|
void |
doConvertAndCast(ClassNode type, Expression expression, boolean ignoreAutoboxing, boolean forceCast, boolean coerce)
Casts to the given type unless it can be determined that the cast is unnecessary
|
void |
doConvertAndCast(ClassNode type)
|
void |
doConvertAndCast(ClassNode type, boolean coerce)
|
boolean |
emptyArguments(Expression arguments)
|
boolean |
equalParameterTypes(def p1, def p2)
|
boolean |
equals(Object obj)
|
void |
evaluateBinaryExpression(String method, BinaryExpression expression)
|
void |
evaluateBinaryExpression(MethodCaller compareMethod, BinaryExpression expression)
|
void |
evaluateBinaryExpressionWithAssignment(String method, BinaryExpression expression)
|
void |
evaluateCompareTo(BinaryExpression expression)
|
void |
evaluateEqual(BinaryExpression expression)
|
void |
evaluateExpression(Expression expression)
|
void |
evaluateInstanceof(BinaryExpression expression)
|
void |
evaluateLogicalAndExpression(BinaryExpression expression)
|
void |
evaluateLogicalOrExpression(BinaryExpression expression)
|
void |
evaluatePostfixMethod(String method, Expression expression)
|
void |
evaluatePrefixMethod(String method, Expression expression)
|
void |
execMethodAndStoreForSubscriptOperator(String method, Expression expression)
|
void |
generateMopCalls(LinkedList mopCalls, boolean useThis)
generates a Meta Object Protocoll method, that is used to call a non public
method, or to make a call to super.
|
AnnotationVisitor |
getAnnotationVisitor(AnnotatedNode targetNode, AnnotationNode an, Object visitor)
|
int |
getBytecodeVersion()
|
def |
getClosureSharedVariables(ClosureExpression ce)
|
CompileUnit |
getCompileUnit()
|
ClassNode |
getExpressionType(Expression expression)
then this method returns the type - otherwise null
|
ClassNode |
getLHSType(Expression leftExpression)
Deduces the type name required for some casting
|
static String |
getMopMethodName(MethodNode method, boolean useThis)
creates a MOP method name from a method
|
ClassNode |
getOutermostClass()
|
static String |
getStaticFieldName(ClassNode type)
|
int |
hashCode()
|
boolean |
isComparisonExpression(Expression expression)
|
boolean |
isFieldOrVariable(String name)
|
boolean |
isGroovyObject(Expression objectExpression)
|
boolean |
isHolderVariable(Expression expression)
|
boolean |
isInClosure()
|
boolean |
isInClosureConstructor()
|
boolean |
isInScriptBody()
local variables but are properties
|
boolean |
isInnerClass()
|
static boolean |
isMopMethod(String methodName)
method to determine if a method is a MOP method.
|
boolean |
isNonStaticField(Expression expression)
|
boolean |
isPopRequired(Expression expression)
that must be popped
|
boolean |
isStaticContext()
|
boolean |
isStaticInvocation(MethodCallExpression call)
|
boolean |
isStaticMethod()
|
static boolean |
isSuperExpression(Expression expression)
|
static boolean |
isThisExpression(Expression expression)
|
static boolean |
isThisOrSuper(Expression expression)
|
boolean |
isValidTypeForCast(ClassNode type)
|
boolean |
isVargs(def p)
|
void |
load(Expression exp)
|
void |
loadDynamicName(Expression name)
|
void |
loadInstanceField(FieldExpression fldExp)
RHS instance field. should move most of the code in the BytecodeHelper
|
void |
loadStaticField(FieldExpression fldExp)
|
void |
loadThis()
|
void |
loadThisOrOwner()
Loads either this object or if we're inside a closure then load the top level owner
|
void |
loadWrapper(Expression argument)
|
void |
makeCall(Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
|
void |
makeCall(ClassExpression sender, Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
|
static String |
makeFieldClassName(ClassNode type)
|
void |
makeInvokeMethodCall(MethodCallExpression call, boolean useSuper, MethodCallerMultiAdapter adapter)
|
void |
onLineNumber(ASTNode statement, String message)
|
void |
processClassVariable(String name)
|
void |
processFieldAccess(String name, FieldNode field, int steps)
|
void |
processStackVariable(Variable variable)
|
void |
removeInitialValues(def params)
this method is called for local variables shared between scopes.
|
List |
sortConstructors(ConstructorCallExpression call, ClassNode callNode)
|
void |
storeStaticField(FieldExpression expression)
|
void |
storeThisInstanceField(FieldExpression expression)
|
void |
throwException(String s)
|
static boolean |
usesSuper(MethodCallExpression call)
|
static boolean |
usesSuper(PropertyExpression pe)
|
void |
visitAndAutoboxBoolean(Expression expression)
|
void |
visitAnnotationAttributes(AnnotationNode an, AnnotationVisitor av)
Generate the annotation attributes.
|
void |
visitAnnotations(AnnotatedNode node)
Note: ignore it.
|
void |
visitAnnotations(AnnotatedNode targetNode, Object visitor)
|
void |
visitArgumentlistExpression(ArgumentListExpression ale)
|
void |
visitArrayAttributes(AnnotationNode an, Map arrayAttr, AnnotationVisitor av)
|
void |
visitArrayExpression(ArrayExpression expression)
|
void |
visitAssertStatement(AssertStatement statement)
|
void |
visitAttributeExpression(AttributeExpression expression)
|
void |
visitAttributeOrProperty(PropertyExpression expression, MethodCallerMultiAdapter adapter)
|
void |
visitBinaryExpression(BinaryExpression expression)
|
void |
visitBitwiseNegationExpression(BitwiseNegationExpression expression)
|
void |
visitBlockStatement(BlockStatement block)
|
void |
visitBooleanExpression(BooleanExpression expression)
return a primitive boolean value of the BooleanExpresion.
|
void |
visitBreakStatement(BreakStatement statement)
|
void |
visitBytecodeSequence(BytecodeSequence bytecodeSequence)
|
void |
visitCaseStatement(CaseStatement statement)
|
void |
visitCaseStatement(CaseStatement statement, int switchVariableIndex, Label thisLabel, Label nextLabel)
|
void |
visitCastExpression(CastExpression expression)
|
void |
visitClassExpression(ClassExpression expression)
load class object on stack
|
void |
visitClosureExpression(ClosureExpression expression)
|
void |
visitClosureListExpression(ClosureListExpression expression)
|
void |
visitConstantExpression(ConstantExpression expression)
Generate byte code for constants
|
void |
visitConstructor(ConstructorNode node)
|
void |
visitConstructorCallExpression(ConstructorCallExpression call)
|
void |
visitConstructorOrMethod(MethodNode node, boolean isConstructor)
|
void |
visitContinueStatement(ContinueStatement statement)
|
void |
visitDeclarationExpression(DeclarationExpression expression)
|
void |
visitDoWhileLoop(DoWhileStatement loop)
|
void |
visitExpressionOrStatement(Object o)
|
void |
visitExpressionStatement(ExpressionStatement statement)
|
void |
visitField(FieldNode fieldNode)
|
void |
visitFieldExpression(FieldExpression expression)
|
void |
visitForLoop(ForStatement loop)
|
void |
visitForLoopWithClosureList(ForStatement loop)
|
void |
visitGStringExpression(GStringExpression expression)
|
void |
visitIfElse(IfStatement ifElse)
|
void |
visitListExpression(ListExpression expression)
|
void |
visitMapEntryExpression(MapEntryExpression expression)
|
void |
visitMapExpression(MapExpression expression)
|
void |
visitMethod(MethodNode node)
|
void |
visitMethodCallExpression(MethodCallExpression call)
|
void |
visitMethodPointerExpression(MethodPointerExpression expression)
|
void |
visitNotExpression(NotExpression expression)
|
void |
visitOuterFieldExpression(FieldExpression expression, ClassNode outerClassNode, int steps, boolean first)
|
void |
visitParameterAnnotations(Parameter parameter, int paramNumber, MethodVisitor mv)
|
void |
visitPostfixExpression(PostfixExpression expression)
|
void |
visitPrefixExpression(PrefixExpression expression)
|
void |
visitProperty(PropertyNode statement)
|
void |
visitPropertyExpression(PropertyExpression expression)
|
void |
visitRangeExpression(RangeExpression expression)
|
void |
visitRegexExpression(RegexExpression expression)
|
void |
visitReturnStatement(ReturnStatement statement)
|
void |
visitSpecialConstructorCall(ConstructorCallExpression call)
|
void |
visitSpreadExpression(SpreadExpression expression)
|
void |
visitSpreadMapExpression(SpreadMapExpression expression)
|
void |
visitStatement(Statement statement)
|
void |
visitStaticMethodCallExpression(StaticMethodCallExpression call)
|
void |
visitSwitch(SwitchStatement statement)
|
void |
visitSynchronizedStatement(SynchronizedStatement statement)
|
void |
visitTernaryExpression(TernaryExpression expression)
|
void |
visitThrowStatement(ThrowStatement statement)
|
void |
visitTryCatchFinally(TryCatchStatement statement)
|
void |
visitTupleExpression(TupleExpression expression)
|
void |
visitTupleExpression(TupleExpression expression, boolean useWrapper)
|
void |
visitUnaryMinusExpression(UnaryMinusExpression expression)
|
void |
visitUnaryPlusExpression(UnaryPlusExpression expression)
|
void |
visitVariableExpression(VariableExpression expression)
Visits a bare (unqualified) variable expression.
|
void |
visitWhileLoop(WhileStatement loop)
|
Key
public Key(String name, def params)
-
addGeneratedClosureConstructorCall
void addGeneratedClosureConstructorCall(ConstructorCallExpression call)
-
addInnerClass
boolean addInnerClass(ClassNode innerClass)
-
addVariableNames
void addVariableNames(Expression expression, List list)
-
argumentSize
static int argumentSize(Expression arguments)
-
argumentsUseStack
boolean argumentsUseStack(Expression arguments)
-
- return:
- true if the given argument expression requires the stack, in
which case the arguments are evaluated first, stored in the
variable stack and then reloaded to make a method call
containsSpreadExpression
static boolean containsSpreadExpression(Expression arguments)
-
createClosureClass
ClassNode createClosureClass(ClosureExpression expression)
-
createInterfaceSyntheticStaticFields
void createInterfaceSyntheticStaticFields()
-
createReturnLHSExpression
Expression createReturnLHSExpression(Expression expression)
- For assignment expressions, return a safe expression for the LHS we can use
to return the value
createReusableExpression
Expression createReusableExpression(Expression expression)
-
createSyntheticStaticFields
void createSyntheticStaticFields()
-
despreadList
void despreadList(List expressions, boolean wrap)
-
doConvertAndCast
void doConvertAndCast(ClassNode type, Expression expression, boolean ignoreAutoboxing, boolean forceCast, boolean coerce)
- Casts to the given type unless it can be determined that the cast is unnecessary
doConvertAndCast
void doConvertAndCast(ClassNode type)
-
doConvertAndCast
void doConvertAndCast(ClassNode type, boolean coerce)
-
emptyArguments
boolean emptyArguments(Expression arguments)
-
equalParameterTypes
boolean equalParameterTypes(def p1, def p2)
-
equals
public boolean equals(Object obj)
-
evaluateBinaryExpression
void evaluateBinaryExpression(String method, BinaryExpression expression)
-
evaluateBinaryExpression
void evaluateBinaryExpression(MethodCaller compareMethod, BinaryExpression expression)
-
evaluateBinaryExpressionWithAssignment
void evaluateBinaryExpressionWithAssignment(String method, BinaryExpression expression)
-
evaluateCompareTo
void evaluateCompareTo(BinaryExpression expression)
-
evaluateEqual
void evaluateEqual(BinaryExpression expression)
-
evaluateExpression
void evaluateExpression(Expression expression)
-
- param:
- expression
evaluateInstanceof
void evaluateInstanceof(BinaryExpression expression)
-
evaluateLogicalAndExpression
void evaluateLogicalAndExpression(BinaryExpression expression)
-
evaluateLogicalOrExpression
void evaluateLogicalOrExpression(BinaryExpression expression)
-
evaluatePostfixMethod
void evaluatePostfixMethod(String method, Expression expression)
-
evaluatePrefixMethod
void evaluatePrefixMethod(String method, Expression expression)
-
execMethodAndStoreForSubscriptOperator
void execMethodAndStoreForSubscriptOperator(String method, Expression expression)
-
generateMopCalls
void generateMopCalls(LinkedList mopCalls, boolean useThis)
- generates a Meta Object Protocoll method, that is used to call a non public
method, or to make a call to super.
- param:
- mopCalls list of methods a mop call method should be generated for
- param:
- useThis true if "this" should be used for the naming
getAnnotationVisitor
AnnotationVisitor getAnnotationVisitor(AnnotatedNode targetNode, AnnotationNode an, Object visitor)
-
getBytecodeVersion
int getBytecodeVersion()
-
getClosureSharedVariables
def getClosureSharedVariables(ClosureExpression ce)
-
getCompileUnit
CompileUnit getCompileUnit()
-
getExpressionType
ClassNode getExpressionType(Expression expression)
-
- return:
- if the type of the expression can be determined at compile time
then this method returns the type - otherwise null
getLHSType
ClassNode getLHSType(Expression leftExpression)
- Deduces the type name required for some casting
- return:
- the type of the given (LHS) expression or null if it is java.lang.Object or it cannot be deduced
getMopMethodName
public static String getMopMethodName(MethodNode method, boolean useThis)
- creates a MOP method name from a method
- param:
- method the method to be called by the mop method
- param:
- useThis if true, then it is a call on "this", "super" else
- return:
- the mop method name
getOutermostClass
ClassNode getOutermostClass()
-
getStaticFieldName
static String getStaticFieldName(ClassNode type)
-
hashCode
public int hashCode()
-
isComparisonExpression
boolean isComparisonExpression(Expression expression)
-
isFieldOrVariable
boolean isFieldOrVariable(String name)
-
- return:
- true if the given name is a local variable or a field
isGroovyObject
boolean isGroovyObject(Expression objectExpression)
-
isHolderVariable
boolean isHolderVariable(Expression expression)
-
isInClosure
boolean isInClosure()
-
isInClosureConstructor
boolean isInClosureConstructor()
-
isInScriptBody
boolean isInScriptBody()
-
- return:
- true if we are in a script body, where all variables declared are no longer
local variables but are properties
isInnerClass
boolean isInnerClass()
-
isMopMethod
public static boolean isMopMethod(String methodName)
- method to determine if a method is a MOP method. This is done by the
method name. If the name starts with "this$" or "super$", then it is
a MOP method
- param:
- methodName name of the method to test
- return:
- true if the method is a MOP method
isNonStaticField
boolean isNonStaticField(Expression expression)
-
- return:
- true if the given expression represents a non-static field
isPopRequired
boolean isPopRequired(Expression expression)
-
- return:
- true if this expression will have left a value on the stack
that must be popped
isStaticContext
boolean isStaticContext()
-
isStaticInvocation
boolean isStaticInvocation(MethodCallExpression call)
-
isStaticMethod
boolean isStaticMethod()
-
isSuperExpression
static boolean isSuperExpression(Expression expression)
-
isThisExpression
static boolean isThisExpression(Expression expression)
-
isThisOrSuper
static boolean isThisOrSuper(Expression expression)
-
isValidTypeForCast
boolean isValidTypeForCast(ClassNode type)
-
isVargs
boolean isVargs(def p)
-
load
void load(Expression exp)
-
loadDynamicName
void loadDynamicName(Expression name)
-
loadInstanceField
public void loadInstanceField(FieldExpression fldExp)
- RHS instance field. should move most of the code in the BytecodeHelper
- param:
- fldExp
loadStaticField
public void loadStaticField(FieldExpression fldExp)
-
- param:
- fldExp
loadThis
void loadThis()
-
loadThisOrOwner
void loadThisOrOwner()
- Loads either this object or if we're inside a closure then load the top level owner
loadWrapper
void loadWrapper(Expression argument)
-
makeCall
void makeCall(Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
-
makeCall
void makeCall(ClassExpression sender, Expression receiver, Expression message, Expression arguments, MethodCallerMultiAdapter adapter, boolean safe, boolean spreadSafe, boolean implicitThis)
-
makeFieldClassName
static String makeFieldClassName(ClassNode type)
-
makeInvokeMethodCall
void makeInvokeMethodCall(MethodCallExpression call, boolean useSuper, MethodCallerMultiAdapter adapter)
-
onLineNumber
void onLineNumber(ASTNode statement, String message)
-
processClassVariable
void processClassVariable(String name)
-
processFieldAccess
void processFieldAccess(String name, FieldNode field, int steps)
-
processStackVariable
void processStackVariable(Variable variable)
-
removeInitialValues
void removeInitialValues(def params)
- this method is called for local variables shared between scopes.
These variables must not have init values because these would
then in later steps be used to create multiple versions of the
same method, in this case the constructor. A closure should not
have more than one constructor!
sortConstructors
List sortConstructors(ConstructorCallExpression call, ClassNode callNode)
-
storeStaticField
public void storeStaticField(FieldExpression expression)
-
storeThisInstanceField
public void storeThisInstanceField(FieldExpression expression)
-
throwException
void throwException(String s)
-
usesSuper
public static boolean usesSuper(MethodCallExpression call)
-
usesSuper
public static boolean usesSuper(PropertyExpression pe)
-
visitAndAutoboxBoolean
void visitAndAutoboxBoolean(Expression expression)
-
visitAnnotationAttributes
void visitAnnotationAttributes(AnnotationNode an, AnnotationVisitor av)
- Generate the annotation attributes.
visitAnnotations
public void visitAnnotations(AnnotatedNode node)
- Note: ignore it. Annotation generation needs the current visitor.
visitAnnotations
void visitAnnotations(AnnotatedNode targetNode, Object visitor)
-
visitArgumentlistExpression
public void visitArgumentlistExpression(ArgumentListExpression ale)
-
visitArrayAttributes
void visitArrayAttributes(AnnotationNode an, Map arrayAttr, AnnotationVisitor av)
-
visitArrayExpression
public void visitArrayExpression(ArrayExpression expression)
-
visitAssertStatement
public void visitAssertStatement(AssertStatement statement)
-
visitAttributeExpression
public void visitAttributeExpression(AttributeExpression expression)
-
visitAttributeOrProperty
void visitAttributeOrProperty(PropertyExpression expression, MethodCallerMultiAdapter adapter)
-
visitBinaryExpression
public void visitBinaryExpression(BinaryExpression expression)
-
visitBitwiseNegationExpression
public void visitBitwiseNegationExpression(BitwiseNegationExpression expression)
-
visitBlockStatement
public void visitBlockStatement(BlockStatement block)
-
visitBooleanExpression
public void visitBooleanExpression(BooleanExpression expression)
- return a primitive boolean value of the BooleanExpresion.
- param:
- expression
visitBreakStatement
public void visitBreakStatement(BreakStatement statement)
-
visitBytecodeSequence
public void visitBytecodeSequence(BytecodeSequence bytecodeSequence)
-
visitCaseStatement
public void visitCaseStatement(CaseStatement statement)
-
visitCaseStatement
public void visitCaseStatement(CaseStatement statement, int switchVariableIndex, Label thisLabel, Label nextLabel)
-
visitCastExpression
public void visitCastExpression(CastExpression expression)
-
visitClassExpression
public void visitClassExpression(ClassExpression expression)
- load class object on stack
visitClosureExpression
public void visitClosureExpression(ClosureExpression expression)
-
visitClosureListExpression
public void visitClosureListExpression(ClosureListExpression expression)
-
visitConstantExpression
public void visitConstantExpression(ConstantExpression expression)
- Generate byte code for constants
- see:
- Class field types
visitConstructor
public void visitConstructor(ConstructorNode node)
-
visitConstructorCallExpression
public void visitConstructorCallExpression(ConstructorCallExpression call)
-
visitConstructorOrMethod
void visitConstructorOrMethod(MethodNode node, boolean isConstructor)
-
visitContinueStatement
public void visitContinueStatement(ContinueStatement statement)
-
visitDeclarationExpression
public void visitDeclarationExpression(DeclarationExpression expression)
-
visitDoWhileLoop
public void visitDoWhileLoop(DoWhileStatement loop)
-
visitExpressionOrStatement
void visitExpressionOrStatement(Object o)
-
visitExpressionStatement
public void visitExpressionStatement(ExpressionStatement statement)
-
visitField
public void visitField(FieldNode fieldNode)
-
visitFieldExpression
public void visitFieldExpression(FieldExpression expression)
-
visitForLoop
public void visitForLoop(ForStatement loop)
-
visitForLoopWithClosureList
void visitForLoopWithClosureList(ForStatement loop)
-
visitGStringExpression
public void visitGStringExpression(GStringExpression expression)
-
visitIfElse
public void visitIfElse(IfStatement ifElse)
-
visitListExpression
public void visitListExpression(ListExpression expression)
-
visitMapEntryExpression
public void visitMapEntryExpression(MapEntryExpression expression)
-
visitMapExpression
public void visitMapExpression(MapExpression expression)
-
visitMethod
public void visitMethod(MethodNode node)
-
visitMethodCallExpression
public void visitMethodCallExpression(MethodCallExpression call)
-
visitMethodPointerExpression
public void visitMethodPointerExpression(MethodPointerExpression expression)
-
visitNotExpression
public void visitNotExpression(NotExpression expression)
-
visitOuterFieldExpression
void visitOuterFieldExpression(FieldExpression expression, ClassNode outerClassNode, int steps, boolean first)
-
visitParameterAnnotations
void visitParameterAnnotations(Parameter parameter, int paramNumber, MethodVisitor mv)
-
visitPostfixExpression
public void visitPostfixExpression(PostfixExpression expression)
-
visitPrefixExpression
public void visitPrefixExpression(PrefixExpression expression)
-
visitProperty
public void visitProperty(PropertyNode statement)
-
visitPropertyExpression
public void visitPropertyExpression(PropertyExpression expression)
-
visitRangeExpression
public void visitRangeExpression(RangeExpression expression)
-
visitRegexExpression
public void visitRegexExpression(RegexExpression expression)
-
visitReturnStatement
public void visitReturnStatement(ReturnStatement statement)
-
visitSpecialConstructorCall
void visitSpecialConstructorCall(ConstructorCallExpression call)
-
visitSpreadExpression
public void visitSpreadExpression(SpreadExpression expression)
-
visitSpreadMapExpression
public void visitSpreadMapExpression(SpreadMapExpression expression)
-
visitStatement
void visitStatement(Statement statement)
-
visitStaticMethodCallExpression
public void visitStaticMethodCallExpression(StaticMethodCallExpression call)
-
visitSwitch
public void visitSwitch(SwitchStatement statement)
-
visitSynchronizedStatement
public void visitSynchronizedStatement(SynchronizedStatement statement)
-
visitTernaryExpression
public void visitTernaryExpression(TernaryExpression expression)
-
visitThrowStatement
public void visitThrowStatement(ThrowStatement statement)
-
visitTryCatchFinally
public void visitTryCatchFinally(TryCatchStatement statement)
-
visitTupleExpression
public void visitTupleExpression(TupleExpression expression)
-
visitTupleExpression
void visitTupleExpression(TupleExpression expression, boolean useWrapper)
-
visitUnaryMinusExpression
public void visitUnaryMinusExpression(UnaryMinusExpression expression)
-
visitUnaryPlusExpression
public void visitUnaryPlusExpression(UnaryPlusExpression expression)
-
visitVariableExpression
public void visitVariableExpression(VariableExpression expression)
- Visits a bare (unqualified) variable expression.
visitWhileLoop
public void visitWhileLoop(WhileStatement loop)
-