public class ASMAccessorOptimizer extends AbstractOptimizer implements AccessorOptimizer
Modifier and Type | Class and Description |
---|---|
private static class |
ASMAccessorOptimizer.ContextClassLoader |
Modifier and Type | Field and Description |
---|---|
private static int |
ARRAY |
private StringAppender |
buildLog |
private static MVELClassLoader |
classLoader |
private java.lang.String |
className |
private int |
compileDepth |
private java.util.ArrayList<ExecutableStatement> |
compiledInputs |
private java.lang.Object |
ctx |
private org.objectweb.asm.ClassWriter |
cw |
private boolean |
deferFinish |
private static java.lang.Object[] |
EMPTYARG |
private static java.lang.Class[] |
EMPTYCLS |
private boolean |
first |
private java.lang.Class |
ingressType |
private static int |
LIST |
private static java.lang.String |
LIST_IMPL |
private boolean |
literal |
private static int |
MAP |
private static java.lang.String |
MAP_IMPL |
private int |
maxlocals |
private boolean |
methNull |
private org.objectweb.asm.MethodVisitor |
mv |
private static java.lang.String |
NAMESPACE |
private boolean |
noinit |
private static int |
OPCODES_VERSION |
private boolean |
propNull |
private java.lang.Class |
returnType |
private int |
stacksize |
private java.lang.Object |
thisRef |
private long |
time |
private java.lang.Object |
val |
private static int |
VAL |
private VariableResolverFactory |
variableFactory |
BEAN, COL, collection, currType, METH, nullSafe, staticAccess, tkStart, WITH
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_OVERFLOW, OP_RESET_FRAME, OP_TERMINATE, OPERATORS, pCtx, REMOVE, SET, splitAccumulator, st, start, stk
Modifier | Constructor and Description |
---|---|
|
ASMAccessorOptimizer() |
private |
ASMAccessorOptimizer(org.objectweb.asm.ClassWriter cw,
org.objectweb.asm.MethodVisitor mv,
java.util.ArrayList<ExecutableStatement> compiledInputs,
java.lang.String className,
StringAppender buildLog,
int compileDepth) |
Modifier and Type | Method and Description |
---|---|
private void |
_finishJIT() |
private int |
_getAccessor(java.lang.Object o,
java.lang.Class type) |
private Accessor |
_initializeAccessor() |
private void |
_initJIT()
Does all the boilerplate for initiating the JIT.
|
private void |
_initJIT2() |
private void |
addPrintOut(java.lang.String text) |
private java.lang.Object |
addSubstatement(ExecutableStatement stmt) |
private void |
anyArrayCheck(java.lang.Class cls) |
void |
arrayStore(java.lang.Class cls) |
private void |
buildInputs() |
private void |
checkcast(java.lang.Class cls) |
private Accessor |
compileAccessor() |
private void |
dataConversion(java.lang.Class target) |
private boolean |
debug(java.lang.String instruction) |
private void |
dumpAdvancedDebugging() |
private java.lang.Object |
getBeanProperty(java.lang.Object ctx,
java.lang.String property) |
private java.lang.Object |
getBeanPropertyAO(java.lang.Object ctx,
java.lang.String property) |
private java.lang.Object |
getCollectionProperty(java.lang.Object ctx,
java.lang.String prop) |
private java.lang.Object |
getCollectionPropertyAO(java.lang.Object ctx,
java.lang.String prop) |
private ASMAccessorOptimizer.ContextClassLoader |
getContextClassLoader() |
java.lang.Class |
getEgressType() |
private java.lang.Object |
getMethod(java.lang.Object ctx,
java.lang.String name) |
static MVELClassLoader |
getMVELClassLoader() |
java.lang.String |
getName() |
java.lang.Object |
getResultOptPass() |
private java.lang.Object |
getWithProperty(java.lang.Object ctx) |
private java.lang.Class |
getWrapperClass(java.lang.Class cls) |
void |
init() |
private void |
intPush(int index) |
boolean |
isLiteralOnly() |
private void |
ldcClassConstant(java.lang.Class cls) |
private java.lang.Class |
loadClass(java.lang.String className,
byte[] b) |
private void |
loadField(int number) |
private void |
loadVariableByIndex(int pos) |
private void |
loadVariableByName(java.lang.String name) |
Accessor |
optimizeAccessor(ParserContext pCtx,
char[] property,
int start,
int offset,
java.lang.Object staticContext,
java.lang.Object thisRef,
VariableResolverFactory factory,
boolean root,
java.lang.Class ingressType) |
Accessor |
optimizeCollection(ParserContext pCtx,
java.lang.Object o,
java.lang.Class type,
char[] property,
int start,
int offset,
java.lang.Object ctx,
java.lang.Object thisRef,
VariableResolverFactory factory) |
private java.lang.Object |
optimizeFieldMethodProperty(java.lang.Object ctx,
java.lang.String property,
java.lang.Class<?> cls,
java.lang.reflect.Member member) |
Accessor |
optimizeObjectCreation(ParserContext pCtx,
char[] property,
int start,
int offset,
java.lang.Object ctx,
java.lang.Object thisRef,
VariableResolverFactory factory) |
Accessor |
optimizeSetAccessor(ParserContext pCtx,
char[] property,
int start,
int offset,
java.lang.Object ctx,
java.lang.Object thisRef,
VariableResolverFactory factory,
boolean rootThisRef,
java.lang.Object value,
java.lang.Class ingressType) |
private java.lang.Object |
propHandlerByteCode(java.lang.String property,
java.lang.Object ctx,
java.lang.Class handler) |
private void |
propHandlerByteCodePut(java.lang.String property,
java.lang.Object ctx,
java.lang.Class handler,
java.lang.Object value) |
static void |
setMVELClassLoader(MVELClassLoader cl) |
private void |
unwrapPrimitive(java.lang.Class cls) |
private void |
visitConstantClass(java.lang.Class<?> clazz) |
private void |
wrapPrimitive(java.lang.Class<? extends java.lang.Object> cls) |
void |
wrapRuntimeConverstion(java.lang.Class toType) |
private void |
writeFunctionPointerStub(java.lang.Class c,
java.lang.reflect.Method m) |
private java.lang.Class |
writeLiteralOrSubexpression(java.lang.Object stmt) |
private java.lang.Class |
writeLiteralOrSubexpression(java.lang.Object stmt,
java.lang.Class desiredTarget) |
private java.lang.Class |
writeLiteralOrSubexpression(java.lang.Object stmt,
java.lang.Class desiredTarget,
java.lang.Class knownIngressType) |
private void |
writeOutLiteralWrapped(java.lang.Object lit) |
private void |
writeOutNullHandler(java.lang.reflect.Member member,
int type) |
capture, findLastUnion, nextSubToken, scanTo, tryStaticAccess, whiteSpaceSkip
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
private static final java.lang.String MAP_IMPL
private static java.lang.String LIST_IMPL
private static java.lang.String NAMESPACE
private static final int OPCODES_VERSION
private java.lang.Object ctx
private java.lang.Object thisRef
private VariableResolverFactory variableFactory
private static final java.lang.Object[] EMPTYARG
private static final java.lang.Class[] EMPTYCLS
private boolean first
private boolean noinit
private boolean deferFinish
private boolean literal
private boolean propNull
private boolean methNull
private java.lang.String className
private org.objectweb.asm.ClassWriter cw
private org.objectweb.asm.MethodVisitor mv
private java.lang.Object val
private int stacksize
private int maxlocals
private long time
private java.util.ArrayList<ExecutableStatement> compiledInputs
private java.lang.Class ingressType
private java.lang.Class returnType
private int compileDepth
private StringAppender buildLog
private static MVELClassLoader classLoader
private static final int ARRAY
private static final int LIST
private static final int MAP
private static final int VAL
public ASMAccessorOptimizer()
private ASMAccessorOptimizer(org.objectweb.asm.ClassWriter cw, org.objectweb.asm.MethodVisitor mv, java.util.ArrayList<ExecutableStatement> compiledInputs, java.lang.String className, StringAppender buildLog, int compileDepth)
private void _initJIT()
private void _initJIT2()
public Accessor optimizeAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object staticContext, java.lang.Object thisRef, VariableResolverFactory factory, boolean root, java.lang.Class ingressType)
optimizeAccessor
in interface AccessorOptimizer
public Accessor optimizeSetAccessor(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory, boolean rootThisRef, java.lang.Object value, java.lang.Class ingressType)
optimizeSetAccessor
in interface AccessorOptimizer
private void _finishJIT()
private void visitConstantClass(java.lang.Class<?> clazz)
private Accessor _initializeAccessor() throws java.lang.Exception
java.lang.Exception
private Accessor compileAccessor()
private java.lang.Object getWithProperty(java.lang.Object ctx)
private java.lang.Object getBeanPropertyAO(java.lang.Object ctx, java.lang.String property) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
private java.lang.Object getBeanProperty(java.lang.Object ctx, java.lang.String property) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
private java.lang.Object optimizeFieldMethodProperty(java.lang.Object ctx, java.lang.String property, java.lang.Class<?> cls, java.lang.reflect.Member member) throws java.lang.IllegalAccessException
java.lang.IllegalAccessException
private void writeFunctionPointerStub(java.lang.Class c, java.lang.reflect.Method m)
private java.lang.Object getCollectionProperty(java.lang.Object ctx, java.lang.String prop) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
private java.lang.Object getCollectionPropertyAO(java.lang.Object ctx, java.lang.String prop) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
private java.lang.Object getMethod(java.lang.Object ctx, java.lang.String name) throws java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException
java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
private void dataConversion(java.lang.Class target)
public static void setMVELClassLoader(MVELClassLoader cl)
public static MVELClassLoader getMVELClassLoader()
public void init()
init
in interface AccessorOptimizer
private ASMAccessorOptimizer.ContextClassLoader getContextClassLoader()
private java.lang.Class loadClass(java.lang.String className, byte[] b) throws java.lang.Exception
java.lang.Exception
private boolean debug(java.lang.String instruction)
public java.lang.String getName()
public java.lang.Object getResultOptPass()
getResultOptPass
in interface AccessorOptimizer
private java.lang.Class getWrapperClass(java.lang.Class cls)
private void unwrapPrimitive(java.lang.Class cls)
private void wrapPrimitive(java.lang.Class<? extends java.lang.Object> cls)
private void anyArrayCheck(java.lang.Class cls)
private void writeOutLiteralWrapped(java.lang.Object lit)
public void arrayStore(java.lang.Class cls)
public void wrapRuntimeConverstion(java.lang.Class toType)
private java.lang.Object addSubstatement(ExecutableStatement stmt)
private void loadVariableByName(java.lang.String name)
private void loadVariableByIndex(int pos)
private void loadField(int number)
private void ldcClassConstant(java.lang.Class cls)
private void buildInputs()
private int _getAccessor(java.lang.Object o, java.lang.Class type)
private java.lang.Class writeLiteralOrSubexpression(java.lang.Object stmt)
private java.lang.Class writeLiteralOrSubexpression(java.lang.Object stmt, java.lang.Class desiredTarget)
private java.lang.Class writeLiteralOrSubexpression(java.lang.Object stmt, java.lang.Class desiredTarget, java.lang.Class knownIngressType)
private void addPrintOut(java.lang.String text)
public Accessor optimizeCollection(ParserContext pCtx, java.lang.Object o, java.lang.Class type, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)
optimizeCollection
in interface AccessorOptimizer
private void checkcast(java.lang.Class cls)
private void intPush(int index)
public Accessor optimizeObjectCreation(ParserContext pCtx, char[] property, int start, int offset, java.lang.Object ctx, java.lang.Object thisRef, VariableResolverFactory factory)
optimizeObjectCreation
in interface AccessorOptimizer
public java.lang.Class getEgressType()
getEgressType
in interface AccessorOptimizer
private void dumpAdvancedDebugging()
private java.lang.Object propHandlerByteCode(java.lang.String property, java.lang.Object ctx, java.lang.Class handler)
private void propHandlerByteCodePut(java.lang.String property, java.lang.Object ctx, java.lang.Class handler, java.lang.Object value)
private void writeOutNullHandler(java.lang.reflect.Member member, int type)
public boolean isLiteralOnly()
isLiteralOnly
in interface AccessorOptimizer