Class ASMAccessorOptimizer
java.lang.Object
org.mvel2.compiler.AbstractParser
org.mvel2.optimizers.AbstractOptimizer
org.mvel2.optimizers.impl.asm.ASMAccessorOptimizer
- All Implemented Interfaces:
Serializable, Parser, AccessorOptimizer
Implementation of the MVEL Just-in-Time (JIT) compiler for Property Accessors using the ASM bytecode
engineering library.
- See Also:
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intprivate StringAppenderprivate static MVELClassLoaderprivate Stringprivate intprivate ArrayList<ExecutableStatement> private Objectprivate org.objectweb.asm.ClassWriterprivate booleanprivate static final Object[]private static final Class[]private booleanprivate Classprivate static final intprivate static Stringprivate booleanprivate static final intprivate static final Stringprivate intprivate booleanprivate org.objectweb.asm.MethodVisitorprivate static Stringprivate booleanprivate static final intprivate booleanprivate Classprivate intprivate Objectprivate longprivate Objectprivate static final intprivate VariableResolverFactoryFields inherited from class AbstractOptimizer
BEAN, COL, collection, currType, METH, nullSafe, staticAccess, tkStart, WITHFields inherited from class AbstractParser
CLASS_LITERALS, compileMode, cursor, debugSymbols, dStack, end, expr, fields, GET, GET_OR_CREATE, greedy, lastLineStart, lastNode, lastWasComment, lastWasIdentifier, lastWasLineLabel, length, LEVEL_0_PROPERTY_ONLY, LEVEL_1_BASIC_LANG, LEVEL_2_MULTI_STATEMENT, LEVEL_3_ITERATION, LEVEL_4_ASSIGNMENT, LEVEL_5_CONTROL_FLOW, line, literalOnly, LITERALS, OP_CONTINUE, OP_NOT_LITERAL, OP_OVERFLOW, OP_RESET_FRAME, OP_TERMINATE, OPERATORS, pCtx, REMOVE, SET, splitAccumulator, st, start, stk -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivateASMAccessorOptimizer(org.objectweb.asm.ClassWriter cw, org.objectweb.asm.MethodVisitor mv, ArrayList<ExecutableStatement> compiledInputs, String className, StringAppender buildLog, int compileDepth) -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate int_getAccessor(Object o, Class type) private Accessorprivate void_initJIT()Does all the boilerplate for initiating the JIT.private voidprivate voidaddPrintOut(String text) private Objectprivate voidanyArrayCheck(Class cls) voidarrayStore(Class cls) private voidprivate voidprivate Accessorprivate voidcreateArray(Class componentType, int length) Create an array of any type (primitive or reference)private voiddataConversion(Class target) private booleanprivate voidprivate ObjectgetBeanProperty(Object ctx, String property) private ObjectgetBeanPropertyAO(Object ctx, String property) private ObjectgetCollectionProperty(Object ctx, String prop) private ObjectgetCollectionPropertyAO(Object ctx, String prop) private Objectstatic MVELClassLoadergetName()private ObjectgetWithProperty(Object ctx) private ClassgetWrapperClass(Class cls) voidinit()private voidintPush(int index) booleanprivate voidldcClassConstant(Class cls) private Classprivate voidloadField(int number) private voidloadVariableByIndex(int pos) private voidloadVariableByName(String name) optimizeAccessor(ParserContext pCtx, char[] property, int start, int offset, Object staticContext, Object thisRef, VariableResolverFactory factory, boolean root, Class ingressType) optimizeCollection(ParserContext pCtx, Object o, Class type, char[] property, int start, int offset, Object ctx, Object thisRef, VariableResolverFactory factory) private ObjectoptimizeFieldMethodProperty(Object ctx, String property, Class<?> cls, Member member) optimizeObjectCreation(ParserContext pCtx, char[] property, int start, int offset, Object ctx, Object thisRef, VariableResolverFactory factory) optimizeSetAccessor(ParserContext pCtx, char[] property, int start, int offset, Object ctx, Object thisRef, VariableResolverFactory factory, boolean rootThisRef, Object value, Class ingressType) private ObjectpropHandlerByteCode(String property, Object ctx, Class handler) private voidpropHandlerByteCodePut(String property, Object ctx, Class handler, Object value) static voidstatic inttoPrimitiveTypeOperand(Class<?> c) Gets the ASM instruction operand for the given primitive type.private voidunwrapPrimitive(Class cls) private voidvisitConstantClass(Class<?> clazz) private voidwrapPrimitive(Class<? extends Object> cls) voidwrapRuntimeConverstion(Class toType) private voidprivate Classprivate ClasswriteLiteralOrSubexpression(Object stmt, Class desiredTarget) private ClasswriteLiteralOrSubexpression(Object stmt, Class desiredTarget, Class knownIngressType) private voidprivate voidwriteOutNullHandler(Member member, int type) Methods inherited from class AbstractOptimizer
capture, findLastUnion, nextSubToken, scanTo, tryStaticAccess, whiteSpaceSkipMethods inherited from class AbstractParser
addFatalError, addFatalError, arithmeticFunctionReduction, captureIdentifier, captureToEOS, captureToEOSorEOL, captureToEOT, captureToNextTokenJunction, expectEOS, expectNextChar_IW, getCursor, getExpression, handleSubstatement, handleUnion, ifThenElseBlockContinues, incNextNonBlank, isArithmeticOperator, isNextIdentifier, isNextIdentifierOrLiteral, isStatementNotManuallyTerminated, lastNonWhite, loadLanguageFeaturesByLevel, lookAhead, lookAhead, lookBehind, lookToLast, nextNonBlank, nextToken, nextTokenSkipSymbols, reduce, setExpression, setExpression, setLanguageLevel, setupParser, skipWhitespace, tokenContinues, trimLeft, trimRight, trimWhitespace
-
Field Details
-
MAP_IMPL
- See Also:
-
LIST_IMPL
-
NAMESPACE
-
OPCODES_VERSION
private static final int OPCODES_VERSION -
ctx
-
thisRef
-
variableFactory
-
EMPTYARG
-
EMPTYCLS
-
first
private boolean first -
noinit
private boolean noinit -
deferFinish
private boolean deferFinish -
literal
private boolean literal -
propNull
private boolean propNull -
methNull
private boolean methNull -
className
-
cw
private org.objectweb.asm.ClassWriter cw -
mv
private org.objectweb.asm.MethodVisitor mv -
val
-
stacksize
private int stacksize -
maxlocals
private int maxlocals -
time
private long time -
compiledInputs
-
ingressType
-
returnType
-
compileDepth
private int compileDepth -
buildLog
-
classLoader
-
ARRAY
private static final int ARRAY- See Also:
-
LIST
private static final int LIST- See Also:
-
MAP
private static final int MAP- See Also:
-
VAL
private static final int VAL- See Also:
-
-
Constructor Details
-
ASMAccessorOptimizer
public ASMAccessorOptimizer() -
ASMAccessorOptimizer
private ASMAccessorOptimizer(org.objectweb.asm.ClassWriter cw, org.objectweb.asm.MethodVisitor mv, ArrayList<ExecutableStatement> compiledInputs, String className, StringAppender buildLog, int compileDepth)
-
-
Method Details
-
_initJIT
private void _initJIT()Does all the boilerplate for initiating the JIT. -
_initJIT2
private void _initJIT2() -
optimizeAccessor
public Accessor optimizeAccessor(ParserContext pCtx, char[] property, int start, int offset, Object staticContext, Object thisRef, VariableResolverFactory factory, boolean root, Class ingressType) - Specified by:
optimizeAccessorin interfaceAccessorOptimizer
-
optimizeSetAccessor
public Accessor optimizeSetAccessor(ParserContext pCtx, char[] property, int start, int offset, Object ctx, Object thisRef, VariableResolverFactory factory, boolean rootThisRef, Object value, Class ingressType) - Specified by:
optimizeSetAccessorin interfaceAccessorOptimizer
-
_finishJIT
private void _finishJIT() -
visitConstantClass
-
_initializeAccessor
-
compileAccessor
-
getWithProperty
-
getBeanPropertyAO
private Object getBeanPropertyAO(Object ctx, String property) throws IllegalAccessException, InvocationTargetException -
getBeanProperty
private Object getBeanProperty(Object ctx, String property) throws IllegalAccessException, InvocationTargetException -
optimizeFieldMethodProperty
private Object optimizeFieldMethodProperty(Object ctx, String property, Class<?> cls, Member member) throws IllegalAccessException - Throws:
IllegalAccessException
-
writeFunctionPointerStub
-
getCollectionProperty
private Object getCollectionProperty(Object ctx, String prop) throws IllegalAccessException, InvocationTargetException -
getCollectionPropertyAO
private Object getCollectionPropertyAO(Object ctx, String prop) throws IllegalAccessException, InvocationTargetException -
getMethod
private Object getMethod(Object ctx, String name) throws IllegalAccessException, InvocationTargetException -
dataConversion
-
setMVELClassLoader
-
getMVELClassLoader
-
init
public void init()- Specified by:
initin interfaceAccessorOptimizer
-
getContextClassLoader
-
loadClass
-
debug
-
getName
-
getResultOptPass
- Specified by:
getResultOptPassin interfaceAccessorOptimizer
-
getWrapperClass
-
unwrapPrimitive
-
wrapPrimitive
-
anyArrayCheck
-
writeOutLiteralWrapped
-
toPrimitiveTypeOperand
Gets the ASM instruction operand for the given primitive type. Will throw IllegalStateException if the type is not primitive.- Parameters:
c- The class representing the primitive type.- Returns:
- The operand
-
createArray
Create an array of any type (primitive or reference)- Parameters:
componentType- The type of array elementslength- The length of the array
-
arrayStore
-
wrapRuntimeConverstion
-
addSubstatement
-
loadVariableByName
-
loadVariableByIndex
private void loadVariableByIndex(int pos) -
loadField
private void loadField(int number) -
ldcClassConstant
-
buildInputs
private void buildInputs() -
_getAccessor
-
writeLiteralOrSubexpression
-
writeLiteralOrSubexpression
-
writeLiteralOrSubexpression
-
addPrintOut
-
optimizeCollection
public Accessor optimizeCollection(ParserContext pCtx, Object o, Class type, char[] property, int start, int offset, Object ctx, Object thisRef, VariableResolverFactory factory) - Specified by:
optimizeCollectionin interfaceAccessorOptimizer
-
checkcast
-
intPush
private void intPush(int index) -
optimizeObjectCreation
public Accessor optimizeObjectCreation(ParserContext pCtx, char[] property, int start, int offset, Object ctx, Object thisRef, VariableResolverFactory factory) - Specified by:
optimizeObjectCreationin interfaceAccessorOptimizer
-
getEgressType
- Specified by:
getEgressTypein interfaceAccessorOptimizer
-
dumpAdvancedDebugging
private void dumpAdvancedDebugging() -
propHandlerByteCode
-
propHandlerByteCodePut
-
writeOutNullHandler
-
isLiteralOnly
public boolean isLiteralOnly()- Specified by:
isLiteralOnlyin interfaceAccessorOptimizer
-