Class JvstCodeGen
- java.lang.Object
-
- org.hotswap.agent.javassist.compiler.ast.Visitor
-
- org.hotswap.agent.javassist.compiler.CodeGen
-
- org.hotswap.agent.javassist.compiler.MemberCodeGen
-
- org.hotswap.agent.javassist.compiler.JvstCodeGen
-
public class JvstCodeGen extends MemberCodeGen
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.hotswap.agent.javassist.compiler.CodeGen
CodeGen.ReturnHook
-
-
Field Summary
Fields Modifier and Type Field Description static StringcflowNamestatic StringclazzNamestatic StringdollarTypeNamestatic StringsigNamestatic StringwrapperCastName-
Fields inherited from class org.hotswap.agent.javassist.compiler.MemberCodeGen
resolver, resultStatic, thisClass, thisMethod
-
Fields inherited from class org.hotswap.agent.javassist.compiler.CodeGen
arrayDim, breakList, bytecode, className, continueList, exprType, hasReturned, inStaticMethod, returnHooks
-
Fields inherited from interface org.hotswap.agent.javassist.bytecode.Opcode
AALOAD, AASTORE, ACONST_NULL, ALOAD, ALOAD_0, ALOAD_1, ALOAD_2, ALOAD_3, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ASTORE_0, ASTORE_1, ASTORE_2, ASTORE_3, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DLOAD_0, DLOAD_1, DLOAD_2, DLOAD_3, DMUL, DNEG, DREM, DRETURN, DSTORE, DSTORE_0, DSTORE_1, DSTORE_2, DSTORE_3, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAD_0, FLOAD_1, FLOAD_2, FLOAD_3, FMUL, FNEG, FREM, FRETURN, FSTORE, FSTORE_0, FSTORE_1, FSTORE_2, FSTORE_3, FSUB, GETFIELD, GETSTATIC, GOTO, GOTO_W, CHECKCAST, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, ILOAD_0, ILOAD_1, ILOAD_2, ILOAD_3, IMUL, INEG, INSTANCEOF, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISTORE_0, ISTORE_1, ISTORE_2, ISTORE_3, ISUB, IUSHR, IXOR, JSR, JSR_W, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDC_W, LDC2_W, LDIV, LLOAD, LLOAD_0, LLOAD_1, LLOAD_2, LLOAD_3, LMUL, LNEG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSTORE_0, LSTORE_1, LSTORE_2, LSTORE_3, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, STACK_GROW, SWAP, T_BOOLEAN, T_BYTE, T_DOUBLE, T_FLOAT, T_CHAR, T_INT, T_LONG, T_SHORT, TABLESWITCH, WIDE
-
Fields inherited from interface org.hotswap.agent.javassist.compiler.TokenId
ABSTRACT, AND_E, ANDAND, ARRAY, ARSHIFT, ARSHIFT_E, assignOps, BadToken, BLOCK, BOOLEAN, BREAK, BYTE, CALL, CASE, CATCH, CLASS, CONST, CONTINUE, DECL, DEFAULT, DIV_E, DO, DOUBLE, DoubleConstant, ELSE, EQ, EXOR_E, EXPR, EXTENDS, FALSE, FINAL, FINALLY, FLOAT, FloatConstant, FOR, GE, GOTO, CHAR, CharConstant, Identifier, IF, IMPLEMENTS, IMPORT, INSTANCEOF, INT, IntConstant, INTERFACE, LABEL, LE, LONG, LongConstant, LSHIFT, LSHIFT_E, MEMBER, MINUS_E, MINUSMINUS, MOD_E, MUL_E, NATIVE, NEQ, NEW, NULL, opNames, OR_E, OROR, PACKAGE, PLUS_E, PLUSPLUS, PRIVATE, PROTECTED, PUBLIC, RETURN, RSHIFT, RSHIFT_E, SHORT, STATIC, STRICT, StringL, SUPER, SWITCH, SYNCHRONIZED, THIS, THROW, THROWS, TRANSIENT, TRUE, TRY, VOID, VOLATILE, WHILE
-
-
Constructor Summary
Constructors Constructor Description JvstCodeGen(Bytecode b, CtClass cc, ClassPool cp)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddNullIfVoid()protected voidatAssignParamList(CtClass[] params, Bytecode code)voidatCallExpr(CallExpr expr)voidatCastExpr(CastExpr expr)protected voidatCastToRtype(CastExpr expr)Inserts a cast operator to the return type.protected voidatCastToWrapper(CastExpr expr)protected voidatCflow(ASTList cname)protected voidatFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup)voidatMember(Member mem)voidatMethodArgs(ASTList args, int[] types, int[] dims, String[] cnames)protected voidatReturnStmnt(Stmnt st)static intcompileParameterList(Bytecode code, CtClass[] params, int regno)protected voidcompileUnwrapValue(CtClass type, Bytecode code)voiddoNumCast(CtClass type)intgetMethodArgsLength(ASTList args)booleanisParamListName(ASTList args)intrecordParams(CtClass[] params, boolean isStatic, String prefix, String paramVarName, String paramsName, boolean use0, int paramBase, String target, SymbolTable tbl)Makes method parameters $0, $1, ..., $args, $$, and $class availableintrecordParams(CtClass[] params, boolean isStatic, String prefix, String paramVarName, String paramsName, SymbolTable tbl)Makes method parameters $0, $1, ..., $args, $$, and $class availableintrecordReturnType(CtClass type, String castName, String resultName, SymbolTable tbl)Makes a cast to the return type ($r) available.voidrecordType(CtClass t)Makes $type available.voidrecordVariable(String typeDesc, String varName, int varNo, SymbolTable tbl)Makes the given variable name available.intrecordVariable(CtClass type, String varName, SymbolTable tbl)Makes the given variable name available.voidsetProceedHandler(ProceedHandler h, String name)voidsetType(CtClass type)-
Methods inherited from class org.hotswap.agent.javassist.compiler.MemberCodeGen
atArrayInit, atArrayVariableAssign, atClassObject2, atFieldPlusPlus, atFieldRead, atMethodCallCore, atMultiNewArray, atNewArrayExpr, atNewExpr, atTryStmnt, fieldAccess, getAccessibleConstructor, getAccessiblePrivate, getMajorVersion, getSuperName, getThisClass, getThisName, insertDefaultSuperCall, makeParamList, makeThrowsList, resolveClassName, resolveClassName, setThisMethod
-
Methods inherited from class org.hotswap.agent.javassist.compiler.CodeGen
arrayAccess, atArrayPlusPlus, atArrayRead, atAssignCore, atAssignExpr, atAssignExpr, atASTList, atBinExpr, atClassObject, atCondExpr, atDeclarator, atDoubleConst, atExpr, atFieldDecl, atInstanceOfExpr, atIntConst, atKeyword, atMethodBody, atMethodDecl, atPair, atPlusPlusCore, atReturnStmnt2, atStmnt, atStringL, atSymbol, atVariable, badAssign, badType, badTypes, compileBooleanExpr, compileExpr, doTypeCheck, fatal, getArrayReadOp, getArrayWriteOp, getLocalVar, getMaxLocals, getTempVar, incMaxLocals, is2word, isRefType, patchGoto, setMaxLocals, setTypeChecker, toJvmArrayName, toJvmTypeName
-
-
-
-
Field Detail
-
sigName
public static final String sigName
- See Also:
- Constant Field Values
-
dollarTypeName
public static final String dollarTypeName
- See Also:
- Constant Field Values
-
clazzName
public static final String clazzName
- See Also:
- Constant Field Values
-
wrapperCastName
public static final String wrapperCastName
- See Also:
- Constant Field Values
-
cflowName
public static final String cflowName
- See Also:
- Constant Field Values
-
-
Method Detail
-
setProceedHandler
public void setProceedHandler(ProceedHandler h, String name)
-
addNullIfVoid
public void addNullIfVoid()
-
atMember
public void atMember(Member mem) throws CompileError
- Overrides:
atMemberin classMemberCodeGen- Throws:
CompileError
-
atFieldAssign
protected void atFieldAssign(Expr expr, int op, ASTree left, ASTree right, boolean doDup) throws CompileError
- Overrides:
atFieldAssignin classMemberCodeGen- Throws:
CompileError
-
atAssignParamList
protected void atAssignParamList(CtClass[] params, Bytecode code) throws CompileError
- Throws:
CompileError
-
atCastExpr
public void atCastExpr(CastExpr expr) throws CompileError
- Overrides:
atCastExprin classCodeGen- Throws:
CompileError
-
atCastToRtype
protected void atCastToRtype(CastExpr expr) throws CompileError
Inserts a cast operator to the return type. If the return type is void, this does nothing.- Throws:
CompileError
-
atCastToWrapper
protected void atCastToWrapper(CastExpr expr) throws CompileError
- Throws:
CompileError
-
atCallExpr
public void atCallExpr(CallExpr expr) throws CompileError
- Overrides:
atCallExprin classMemberCodeGen- Throws:
CompileError
-
atCflow
protected void atCflow(ASTList cname) throws CompileError
- Throws:
CompileError
-
isParamListName
public boolean isParamListName(ASTList args)
-
getMethodArgsLength
public int getMethodArgsLength(ASTList args)
- Overrides:
getMethodArgsLengthin classMemberCodeGen
-
atMethodArgs
public void atMethodArgs(ASTList args, int[] types, int[] dims, String[] cnames) throws CompileError
- Overrides:
atMethodArgsin classMemberCodeGen- Throws:
CompileError
-
atReturnStmnt
protected void atReturnStmnt(Stmnt st) throws CompileError
- Overrides:
atReturnStmntin classCodeGen- Throws:
CompileError
-
recordReturnType
public int recordReturnType(CtClass type, String castName, String resultName, SymbolTable tbl) throws CompileError
Makes a cast to the return type ($r) available. It also enables $_.If the return type is void, ($r) does nothing. The type of $_ is java.lang.Object.
- Parameters:
resultName- null if $_ is not used.- Returns:
- -1 or the variable index assigned to $_.
- Throws:
CompileError
-
recordType
public void recordType(CtClass t)
Makes $type available.
-
recordParams
public int recordParams(CtClass[] params, boolean isStatic, String prefix, String paramVarName, String paramsName, SymbolTable tbl) throws CompileError
Makes method parameters $0, $1, ..., $args, $$, and $class available. $0 is equivalent to THIS if the method is not static. Otherwise, if the method is static, then $0 is not available.- Throws:
CompileError
-
recordParams
public int recordParams(CtClass[] params, boolean isStatic, String prefix, String paramVarName, String paramsName, boolean use0, int paramBase, String target, SymbolTable tbl) throws CompileError
Makes method parameters $0, $1, ..., $args, $$, and $class available. $0 is available only if use0 is true. It might not be equivalent to THIS.- Parameters:
params- the parameter types (the types of $1, $2, ..)prefix- it must be "$" (the first letter of $0, $1, ...)paramVarName- it must be "$args"paramsName- it must be "$$"use0- true if $0 is used.paramBase- the register number of $0 (use0 is true) or $1 (otherwise).target- the class of $0. If use0 is false, target can be null. The value of "target" is also used as the name of the type represented by $class.isStatic- true if the method in which the compiled bytecode is embedded is static.- Throws:
CompileError
-
recordVariable
public int recordVariable(CtClass type, String varName, SymbolTable tbl) throws CompileError
Makes the given variable name available.- Parameters:
type- variable typevarName- variable name- Throws:
CompileError
-
recordVariable
public void recordVariable(String typeDesc, String varName, int varNo, SymbolTable tbl) throws CompileError
Makes the given variable name available.- Parameters:
typeDesc- the type descriptor of the variablevarName- variable namevarNo- an index into the local variable array- Throws:
CompileError
-
compileParameterList
public static int compileParameterList(Bytecode code, CtClass[] params, int regno)
-
compileUnwrapValue
protected void compileUnwrapValue(CtClass type, Bytecode code) throws CompileError
- Throws:
CompileError
-
setType
public void setType(CtClass type) throws CompileError
- Throws:
CompileError
-
doNumCast
public void doNumCast(CtClass type) throws CompileError
- Throws:
CompileError
-
-