Class ASMByteCodeVisitor
java.lang.Object
org.glassfish.pfl.dynamic.codegen.impl.TreeWalker
org.glassfish.pfl.dynamic.codegen.impl.ASMByteCodeVisitor
- All Implemented Interfaces:
Visitor
Visitor that is used to generate byte code for a class.
SetupVisitor must be called first before this
visitor can be called.
This visitor is also responsible for setting up the bytecode versions of Variables, since we always define variables before we reference them.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ByteCodeUtility
private org.objectweb.asm.ClassWriter
private boolean
private PrintStream
Fields inherited from class org.glassfish.pfl.dynamic.codegen.impl.TreeWalker
context
-
Constructor Summary
ConstructorsConstructorDescriptionASMByteCodeVisitor
(TreeWalkerContext context, org.objectweb.asm.ClassWriter cw) ASMByteCodeVisitor
(TreeWalkerContext context, org.objectweb.asm.ClassWriter cw, boolean debug, PrintStream ps) -
Method Summary
Modifier and TypeMethodDescriptionvoid
void
void
private void
callFinallyBlocks
(Node arg) void
void
boolean
void
void
boolean
private void
private ClassGeneratorImpl
findClassGenerator
(Node arg) private MethodGenerator
findMethodGenerator
(Node arg) private <T> T
private void
boolean
void
boolean
void
boolean
void
void
void
void
(package private) static MyLabel
void
private void
popIfNeeded
(Statement lastStatement) void
void
void
void
void
void
void
postCaseBranch
(CaseBranch arg) void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
void
postStatement
(Statement arg) void
void
void
void
void
void
void
void
void
void
void
postVariable
(Variable arg) void
void
boolean
boolean
boolean
boolean
boolean
boolean
boolean
preCaseBranch
(CaseBranch arg) boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
preStatement
(Statement arg) boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
preVariable
(Variable param) boolean
boolean
private void
recordVariable
(Variable var) void
void
void
boolean
boolean
void
void
tryStatementBeforeBlock
(TryStatement arg, Type type, Variable var, BlockStatement block) boolean
void
Methods inherited from class org.glassfish.pfl.dynamic.codegen.impl.TreeWalker
arrayIndexExpressionBeforeExpr, methodGeneratorAfterArguments, postFieldGenerator, visitArrayIndexExpression, visitArrayLengthExpression, visitAssignmentStatement, visitBinaryOperatorExpression, visitBlockStatement, visitBreakStatement, visitCaseBranch, visitCastExpression, visitClassGenerator, visitConstantExpression, visitDefinitionStatement, visitExpression, visitFieldGenerator, visitIfExpression, visitIfStatement, visitInstofExpression, visitMethodGenerator, visitNewArrExpression, visitNewObjExpression, visitNode, visitNonStaticCallExpression, visitNonStaticFieldAccessExpression, visitReturnStatement, visitStatement, visitStaticCallExpression, visitStaticFieldAccessExpression, visitSuperCallExpression, visitSuperObjExpression, visitSwitchStatement, visitThisExpression, visitThisObjExpression, visitThrowStatement, visitTryStatement, visitUnaryOperatorExpression, visitVariable, visitVoidExpression, visitWhileStatement
-
Field Details
-
cw
private org.objectweb.asm.ClassWriter cw -
bcu
-
debug
private boolean debug -
ps
-
-
Constructor Details
-
ASMByteCodeVisitor
-
ASMByteCodeVisitor
public ASMByteCodeVisitor(TreeWalkerContext context, org.objectweb.asm.ClassWriter cw, boolean debug, PrintStream ps)
-
-
Method Details
-
findNode
-
findMethodGenerator
-
findClassGenerator
-
nextLabel
-
preNode
- Overrides:
preNode
in classTreeWalker
-
postNode
- Overrides:
postNode
in classTreeWalker
-
preClassGenerator
- Overrides:
preClassGenerator
in classTreeWalker
-
classGeneratorBeforeFields
- Overrides:
classGeneratorBeforeFields
in classTreeWalker
-
classGeneratorBeforeInitializer
- Overrides:
classGeneratorBeforeInitializer
in classTreeWalker
-
classGeneratorBeforeMethod
- Overrides:
classGeneratorBeforeMethod
in classTreeWalker
-
classGeneratorBeforeConstructor
- Overrides:
classGeneratorBeforeConstructor
in classTreeWalker
-
postClassGenerator
- Overrides:
postClassGenerator
in classTreeWalker
-
preFieldGenerator
- Overrides:
preFieldGenerator
in classTreeWalker
-
preMethodGenerator
- Overrides:
preMethodGenerator
in classTreeWalker
-
methodGeneratorBeforeArguments
- Overrides:
methodGeneratorBeforeArguments
in classTreeWalker
-
postMethodGenerator
- Overrides:
postMethodGenerator
in classTreeWalker
-
preStatement
- Overrides:
preStatement
in classTreeWalker
-
postStatement
- Overrides:
postStatement
in classTreeWalker
-
preThrowStatement
- Overrides:
preThrowStatement
in classTreeWalker
-
postThrowStatement
- Overrides:
postThrowStatement
in classTreeWalker
-
preAssignmentStatement
- Overrides:
preAssignmentStatement
in classTreeWalker
-
assignmentStatementBeforeLeftSide
- Overrides:
assignmentStatementBeforeLeftSide
in classTreeWalker
-
postAssignmentStatement
- Overrides:
postAssignmentStatement
in classTreeWalker
-
preBlockStatement
- Overrides:
preBlockStatement
in classTreeWalker
-
blockStatementBeforeBodyStatement
- Overrides:
blockStatementBeforeBodyStatement
in classTreeWalker
-
postBlockStatement
- Overrides:
postBlockStatement
in classTreeWalker
-
popIfNeeded
-
preCaseBranch
- Overrides:
preCaseBranch
in classTreeWalker
-
caseBranchBeforeBodyStatement
- Overrides:
caseBranchBeforeBodyStatement
in classTreeWalker
-
postCaseBranch
- Overrides:
postCaseBranch
in classTreeWalker
-
preDefinitionStatement
- Overrides:
preDefinitionStatement
in classTreeWalker
-
definitionStatementBeforeExpr
- Overrides:
definitionStatementBeforeExpr
in classTreeWalker
-
postDefinitionStatement
- Overrides:
postDefinitionStatement
in classTreeWalker
-
preIfStatement
- Overrides:
preIfStatement
in classTreeWalker
-
ifStatementBeforeTruePart
- Overrides:
ifStatementBeforeTruePart
in classTreeWalker
-
ifStatementBeforeFalsePart
- Overrides:
ifStatementBeforeFalsePart
in classTreeWalker
-
postIfStatement
- Overrides:
postIfStatement
in classTreeWalker
-
emitJsrToFinallyBlock
-
callFinallyBlocks
-
preBreakStatement
- Overrides:
preBreakStatement
in classTreeWalker
-
postBreakStatement
- Overrides:
postBreakStatement
in classTreeWalker
-
preReturnStatement
- Overrides:
preReturnStatement
in classTreeWalker
-
postReturnStatement
- Overrides:
postReturnStatement
in classTreeWalker
-
preSwitchStatement
- Overrides:
preSwitchStatement
in classTreeWalker
-
switchStatementBeforeCaseBranches
- Overrides:
switchStatementBeforeCaseBranches
in classTreeWalker
-
switchStatementBeforeDefault
- Overrides:
switchStatementBeforeDefault
in classTreeWalker
-
postSwitchStatement
- Overrides:
postSwitchStatement
in classTreeWalker
-
preTryStatement
- Overrides:
preTryStatement
in classTreeWalker
-
tryStatementBeforeBlock
public void tryStatementBeforeBlock(TryStatement arg, Type type, Variable var, BlockStatement block) - Overrides:
tryStatementBeforeBlock
in classTreeWalker
-
finishLastBlock
-
tryStatementBeforeFinalPart
- Overrides:
tryStatementBeforeFinalPart
in classTreeWalker
-
postTryStatement
- Overrides:
postTryStatement
in classTreeWalker
-
preWhileStatement
- Overrides:
preWhileStatement
in classTreeWalker
-
whileStatementBeforeBody
- Overrides:
whileStatementBeforeBody
in classTreeWalker
-
postWhileStatement
- Overrides:
postWhileStatement
in classTreeWalker
-
preExpression
- Overrides:
preExpression
in classTreeWalker
-
postExpression
- Overrides:
postExpression
in classTreeWalker
-
recordVariable
-
preVariable
- Overrides:
preVariable
in classTreeWalker
-
postVariable
- Overrides:
postVariable
in classTreeWalker
-
preConstantExpression
- Overrides:
preConstantExpression
in classTreeWalker
-
postConstantExpression
- Overrides:
postConstantExpression
in classTreeWalker
-
preVoidExpression
- Overrides:
preVoidExpression
in classTreeWalker
-
postVoidExpression
- Overrides:
postVoidExpression
in classTreeWalker
-
preThisExpression
- Overrides:
preThisExpression
in classTreeWalker
-
postThisExpression
- Overrides:
postThisExpression
in classTreeWalker
-
preUnaryOperatorExpression
- Overrides:
preUnaryOperatorExpression
in classTreeWalker
-
postUnaryOperatorExpression
- Overrides:
postUnaryOperatorExpression
in classTreeWalker
-
preBinaryOperatorExpression
- Overrides:
preBinaryOperatorExpression
in classTreeWalker
-
binaryOperatorExpressionBeforeRight
- Overrides:
binaryOperatorExpressionBeforeRight
in classTreeWalker
-
postBinaryOperatorExpression
- Overrides:
postBinaryOperatorExpression
in classTreeWalker
-
preCastExpression
- Overrides:
preCastExpression
in classTreeWalker
-
postCastExpression
- Overrides:
postCastExpression
in classTreeWalker
-
preInstofExpression
- Overrides:
preInstofExpression
in classTreeWalker
-
postInstofExpression
- Overrides:
postInstofExpression
in classTreeWalker
-
preStaticCallExpression
- Overrides:
preStaticCallExpression
in classTreeWalker
-
staticCallExpressionBeforeArg
- Overrides:
staticCallExpressionBeforeArg
in classTreeWalker
-
postStaticCallExpression
- Overrides:
postStaticCallExpression
in classTreeWalker
-
preNonStaticCallExpression
- Overrides:
preNonStaticCallExpression
in classTreeWalker
-
nonStaticCallExpressionBeforeArg
- Overrides:
nonStaticCallExpressionBeforeArg
in classTreeWalker
-
postNonStaticCallExpression
- Overrides:
postNonStaticCallExpression
in classTreeWalker
-
preNewObjExpression
- Overrides:
preNewObjExpression
in classTreeWalker
-
newObjExpressionBeforeArg
- Overrides:
newObjExpressionBeforeArg
in classTreeWalker
-
postNewObjExpression
- Overrides:
postNewObjExpression
in classTreeWalker
-
preNewArrExpression
- Overrides:
preNewArrExpression
in classTreeWalker
-
newArrExpressionAfterSize
- Overrides:
newArrExpressionAfterSize
in classTreeWalker
-
newArrExpressionBeforeExpression
- Overrides:
newArrExpressionBeforeExpression
in classTreeWalker
-
newArrExpressionAfterExpression
- Overrides:
newArrExpressionAfterExpression
in classTreeWalker
-
postNewArrExpression
- Overrides:
postNewArrExpression
in classTreeWalker
-
preSuperCallExpression
- Overrides:
preSuperCallExpression
in classTreeWalker
-
superCallExpressionBeforeArg
- Overrides:
superCallExpressionBeforeArg
in classTreeWalker
-
postSuperCallExpression
- Overrides:
postSuperCallExpression
in classTreeWalker
-
preSuperObjExpression
- Overrides:
preSuperObjExpression
in classTreeWalker
-
superObjExpressionBeforeArg
- Overrides:
superObjExpressionBeforeArg
in classTreeWalker
-
postSuperObjExpression
- Overrides:
postSuperObjExpression
in classTreeWalker
-
preThisObjExpression
- Overrides:
preThisObjExpression
in classTreeWalker
-
thisObjExpressionBeforeArg
- Overrides:
thisObjExpressionBeforeArg
in classTreeWalker
-
postThisObjExpression
- Overrides:
postThisObjExpression
in classTreeWalker
-
preNonStaticFieldAccessExpression
public boolean preNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) - Overrides:
preNonStaticFieldAccessExpression
in classTreeWalker
-
postNonStaticFieldAccessExpression
public void postNonStaticFieldAccessExpression(ExpressionFactory.NonStaticFieldAccessExpression arg) - Overrides:
postNonStaticFieldAccessExpression
in classTreeWalker
-
preStaticFieldAccessExpression
- Overrides:
preStaticFieldAccessExpression
in classTreeWalker
-
postStaticFieldAccessExpression
- Overrides:
postStaticFieldAccessExpression
in classTreeWalker
-
preArrayIndexExpression
- Overrides:
preArrayIndexExpression
in classTreeWalker
-
postArrayIndexExpression
- Overrides:
postArrayIndexExpression
in classTreeWalker
-
preArrayLengthExpression
- Overrides:
preArrayLengthExpression
in classTreeWalker
-
postArrayLengthExpression
- Overrides:
postArrayLengthExpression
in classTreeWalker
-
preIfExpression
- Overrides:
preIfExpression
in classTreeWalker
-
ifExpressionBeforeTruePart
- Overrides:
ifExpressionBeforeTruePart
in classTreeWalker
-
ifExpressionBeforeFalsePart
- Overrides:
ifExpressionBeforeFalsePart
in classTreeWalker
-
postIfExpression
- Overrides:
postIfExpression
in classTreeWalker
-