Class ASMCodeGenerator
java.lang.Object
com.googlecode.aviator.code.BaseEvalCodeGenerator
com.googlecode.aviator.code.asm.ASMCodeGenerator
- All Implemented Interfaces:
CodeGenerator, EvalCodeGenerator
Code generator using asm
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final AtomicLongprivate final Stringprivate final ClassWriterprivate static final Stringprivate Labelprivate static final Stringprivate intstatic final Stringprivate static final StringLabel stack for ternary operatorprivate intprivate intprivate MethodVisitorprivate static final Stringprivate static final Stringprivate intOperands count to check stack framesprivate static final Stringprivate static final LabelFields inherited from class BaseEvalCodeGenerator
classLoader, compileEnv, funcsArgs, instance, lambdaBootstraps, lambdaGenerator, methodMetaDataStack, methodTokens, parentCodeGenerator, parser, sourceFile, symbolTable, variables -
Constructor Summary
ConstructorsConstructorDescriptionASMCodeGenerator(AviatorEvaluatorInstance instance, String sourceFile, AviatorClassLoader classLoader, OutputStream traceOut) -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate voidcreateAviatorFunctionObject(String methodName) private voiddoCompareAndJump(Token<?> lookhead, int ints, OperatorType opType) private voidend(boolean unboxObject) private voidprivate voidendVisitMethodCode(boolean unboxObject) private voidvoidgenNewLambdaCode(LambdaFunctionBootstrap bootstrap) private voidprivate voidprivate StringgetInnerName(String varName) private static StringgetInvokeMethodDesc(int paramCount) (package private) LambdaGeneratorintgetResult(boolean unboxObject) voidinitConstants(Set<Token<?>> constants) Initial constant pool.voidinitMethods(Map<String, Integer> methods) voidinitVariables(Map<String, VariableMeta> vars) private booleanisEqNe(int ints) private voidloadAviatorFunction(String outterMethodName, String innerMethodName) private booleanloadConstant(Token<?> lookhead, boolean inConstructor) private voidloadEnv()private voidloadOpType(OperatorType opType) private voidMake a default constructorprivate LabelMake a labelvoidvoidDo logic operation "invalid input: '&'invalid input: '&'" left operandvoidonAndRight(Token<?> lookhead) Do logic operation "invalid input: '&'invalid input: '&'" right operandvoidvoidonArrayIndexEnd(Token<?> lookhead) voidonArrayIndexStart(Token<?> token) voidonAssignment(Token<?> lookhead) voidvoidBit operation '~'voidvoidvoidonConstant(Token<?> lookhead) private voidonConstant0(Token<?> lookhead, boolean inConstructor) voidvoidvoidonExponent(Token<?> lookhead) voidvoidvoidonJoinLeft(Token<?> lookhead) Do logic operation "||" left operandvoidonJoinRight(Token<?> lookhead) Do logic operation "||" right operandvoidonLambdaArgument(Token<?> lookhead, FunctionParam param) voidonLambdaBodyEnd(Token<?> lookhead) voidonLambdaBodyStart(Token<?> lookhead) voidonLambdaDefineStart(Token<?> lookhead) voidvoidvoidvoidonMethodInvoke(Token<?> lookhead) voidonMethodName(Token<?> lookhead) voidonMethodParameter(Token<?> lookhead) voidvoidvoidvoidvoidLogic operation '!'voidonShiftLeft(Token<?> lookhead) voidonShiftRight(Token<?> lookhead) voidvoidonTernaryBoolean(Token<?> lookhead) voidonTernaryEnd(Token<?> lookhead) voidonTernaryLeft(Token<?> lookhead) voidonTernaryRight(Token<?> lookhead) voidonUnsignedShiftRight(Token<?> lookhead) private Labelprivate Labelprivate Labelprivate Labelprivate voidPop a operand from stackprivate voidpopOperand(int n) Pop a operand from stackprivate voidpushLabel0(Label l0) private voidpushLabel1(Label l1) private voidprivate voidpushOperand(int delta) private voidsetMaxStacks(int newMaxStacks) voidstart()private voidprivate voidvisitBinOperator(Token<?> token, OperatorType opType, String methodName) private voidprivate voidprivate voidvisitCompare(int ints, OperatorType opType) private voidvisitLabel(Label label) private voidvisitLeftBranch(Token<?> lookhead, int ints, OperatorType opType) private voidvisitLineNumber(Token<?> token) private voidvisitRightBranch(Token<?> lookhead, int ints, OperatorType opType) private voidvisitUnaryOperator(Token<?> lookhead, OperatorType opType, String methodName) Methods inherited from class BaseEvalCodeGenerator
getClassLoader, getFuncsArgs, getNextFuncInvocationId, setLambdaBootstraps, setParser
-
Field Details
-
RUNTIME_UTILS
- See Also:
-
OBJECT_DESC
- See Also:
-
JAVA_TYPE_OWNER
- See Also:
-
CONSTRUCTOR_METHOD_NAME
- See Also:
-
OBJECT_OWNER
- See Also:
-
FUNC_ARGS_INNER_VAR
- See Also:
-
FIELD_PREFIX
- See Also:
-
classWriter
-
mv
-
className
-
CLASS_COUNTER
-
operandsCount
private int operandsCountOperands count to check stack frames -
maxStacks
private int maxStacks -
maxLocals
private int maxLocals -
fieldCounter
private int fieldCounter -
innerVars
-
innerMethodMap
-
constantPool
-
labelNameIndexMap
-
START_LABEL
-
currentLabel
-
l0stack
-
l1stack
-
-
Constructor Details
-
ASMCodeGenerator
public ASMCodeGenerator(AviatorEvaluatorInstance instance, String sourceFile, AviatorClassLoader classLoader, OutputStream traceOut)
-
-
Method Details
-
setMaxStacks
private void setMaxStacks(int newMaxStacks) -
getLambdaGenerator
LambdaGenerator getLambdaGenerator() -
start
public void start() -
startVisitMethodCode
private void startVisitMethodCode() -
endVisitMethodCode
private void endVisitMethodCode(boolean unboxObject) -
endVisitClass
private void endVisitClass() -
makeConstructor
private void makeConstructor()Make a default constructor -
visitClass
private void visitClass() -
makeLabel
-
onAdd
-
loadOpType
-
popOperand
private void popOperand()Pop a operand from stack -
popOperand
private void popOperand(int n) Pop a operand from stack -
onSub
-
onMult
-
onExponent
-
onAssignment
-
onDiv
-
onMod
-
onAndLeft
Do logic operation "invalid input: '&'invalid input: '&'" left operand -
visitBoolean
private void visitBoolean() -
pushLabel0
-
onAndRight
Do logic operation "invalid input: '&'invalid input: '&'" right operand -
visitRightBranch
-
onTernaryBoolean
-
pushLabel1
-
onTernaryLeft
-
peekLabel1
-
onTernaryRight
-
onTernaryEnd
-
popLabel1
-
onJoinRight
Do logic operation "||" right operand -
visitLabel
-
peekLabel0
-
popLabel0
-
onJoinLeft
Do logic operation "||" left operand -
visitLeftBranch
-
onEq
-
onMatch
-
onNeq
-
doCompareAndJump
-
isEqNe
private boolean isEqNe(int ints) -
visitCompare
-
onGe
-
onGt
-
onLe
-
onLt
-
pushOperand
private void pushOperand(int delta) -
onNot
Logic operation '!' -
visitBinOperator
-
visitLineNumber
-
visitUnaryOperator
-
onBitNot
Bit operation '~' -
onNeg
-
getResult
-
genReadObject
private void genReadObject() -
genCustomSerializeMethod
private void genCustomSerializeMethod() -
genWriteObject
private void genWriteObject() -
end
private void end(boolean unboxObject) -
onConstant
-
onConstant0
-
loadConstant
-
initVariables
-
initConstants
-
initMethods
- Specified by:
initMethodsin interfaceEvalCodeGenerator- Overrides:
initMethodsin classBaseEvalCodeGenerator
-
getInnerName
-
getInvokeMethodDesc
-
onMethodInvoke
-
onMethodParameter
-
pushOperand
private void pushOperand() -
onArray
-
onArrayIndexStart
-
onArrayIndexEnd
-
getLocalIndex
public int getLocalIndex() -
onLambdaDefineStart
-
onLambdaArgument
-
onLambdaBodyStart
-
onLambdaBodyEnd
-
genNewLambdaCode
-
onMethodName
-
checkExecutionTimeout
private void checkExecutionTimeout() -
loadAviatorFunction
-
loadEnv
private void loadEnv() -
createAviatorFunctionObject
-
onBitAnd
-
onBitOr
-
onBitXor
-
onShiftLeft
-
onShiftRight
-
onUnsignedShiftRight
-