public class InvocationMethodFactory extends MethodFactory implements org.objectweb.asm.Opcodes
org.jruby.internal.runtime.methods.MethodFactory
MethodFactory.MethodDefiningCallback
Modifier and Type | Field and Description |
---|---|
static int |
ARGS_INDEX
The lvar index of the method args on the call
|
static int |
BLOCK_INDEX
The lvar index of the passed-in Block on the call
|
static int |
CLASS_INDEX
The lvar index of the RubyClass being invoked against
|
protected JRubyClassLoader |
classLoader
The classloader to use for code loading
|
static int |
NAME_INDEX
The lvar index method name being invoked
|
static int |
RECEIVER_INDEX
The lvar index of the method-receiving object
|
protected java.lang.Object |
syncObject
An object to sync against when loading classes, to avoid dups
|
static int |
THIS_INDEX
The lvar index of "this"
|
static int |
THREADCONTEXT_INDEX
The lvar index of the passed-in ThreadContext
|
CAN_LOAD_BYTECODE, COMPILED_METHOD_PARAMS
AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, 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, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEDYNAMIC_OWNER, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7
Constructor and Description |
---|
InvocationMethodFactory(java.lang.ClassLoader classLoader)
Construct a new InvocationMethodFactory using the specified classloader
to load code.
|
Modifier and Type | Method and Description |
---|---|
protected java.lang.Class |
endCall(org.objectweb.asm.ClassWriter cw,
java.lang.String name) |
protected byte[] |
endCallOffline(org.objectweb.asm.ClassWriter cw) |
protected java.lang.Class |
endCallWithBytes(byte[] classBytes,
java.lang.String name) |
protected java.lang.Class |
endClass(org.objectweb.asm.ClassWriter cw,
java.lang.String name) |
protected byte[] |
endClassOffline(org.objectweb.asm.ClassWriter cw) |
protected java.lang.Class |
endClassWithBytes(byte[] code,
java.lang.String name) |
DynamicMethod |
getAnnotatedMethod(RubyModule implementationClass,
JavaMethodDescriptor desc)
Use code generation to provide a method handle based on an annotated Java
method.
|
DynamicMethod |
getAnnotatedMethod(RubyModule implementationClass,
java.util.List<JavaMethodDescriptor> descs)
Use code generation to provide a method handle based on an annotated Java
method.
|
java.lang.Class |
getAnnotatedMethodClass(java.util.List<JavaMethodDescriptor> descs)
Use code generation to provide a method handle based on an annotated Java
method.
|
CompiledBlockCallback |
getBlockCallback(java.lang.String method,
java.lang.String file,
int line,
java.lang.Object scriptObject)
Get a CompiledBlockCallback for the specified block
|
CompiledBlockCallback19 |
getBlockCallback19(java.lang.String method,
java.lang.String file,
int line,
java.lang.Object scriptObject)
Get a CompiledBlockCallback for the specified block
|
byte[] |
getBlockCallback19Offline(java.lang.String method,
java.lang.String file,
int line,
java.lang.String classname)
Get a CompiledBlockCallback for the specified block, returning the bytes
but not loading the class.
|
byte[] |
getBlockCallbackOffline(java.lang.String method,
java.lang.String file,
int line,
java.lang.String classname)
Get a CompiledBlockCallback for the specified block, returning the bytes
but not loading the class.
|
DynamicMethod |
getCompiledMethod(RubyModule implementationClass,
java.lang.String method,
Arity arity,
Visibility visibility,
StaticScope scope,
java.lang.Object scriptObject,
CallConfiguration callConfig,
ISourcePosition position,
java.lang.String parameterDesc)
Use code generation to provide a method handle for a compiled Ruby method.
|
DynamicMethod |
getCompiledMethodLazily(RubyModule implementationClass,
java.lang.String method,
Arity arity,
Visibility visibility,
StaticScope scope,
java.lang.Object scriptObject,
CallConfiguration callConfig,
ISourcePosition position,
java.lang.String parameterDesc)
Use code generation to provide a method handle for a compiled Ruby method.
|
byte[] |
getCompiledMethodOffline(java.lang.String method,
java.lang.String className,
java.lang.String invokerPath,
Arity arity,
StaticScope scope,
CallConfiguration callConfig,
java.lang.String filename,
int line)
Use code generation to provide a method handle for a compiled Ruby method.
|
static java.lang.String |
getPostMethod(CallConfiguration callConfig) |
void |
prepareAnnotatedMethod(RubyModule implementationClass,
JavaMethod javaMethod,
JavaMethodDescriptor desc)
Use code generation to provide a method handle based on an annotated Java
method.
|
createFactory
public static final int THIS_INDEX
public static final int THREADCONTEXT_INDEX
public static final int RECEIVER_INDEX
public static final int CLASS_INDEX
public static final int NAME_INDEX
public static final int ARGS_INDEX
public static final int BLOCK_INDEX
protected final JRubyClassLoader classLoader
protected final java.lang.Object syncObject
public InvocationMethodFactory(java.lang.ClassLoader classLoader)
classLoader
- The classloader to use, or to wrap if it is not a
JRubyClassLoader instance.public DynamicMethod getCompiledMethodLazily(RubyModule implementationClass, java.lang.String method, Arity arity, Visibility visibility, StaticScope scope, java.lang.Object scriptObject, CallConfiguration callConfig, ISourcePosition position, java.lang.String parameterDesc)
getCompiledMethodLazily
in class MethodFactory
implementationClass
- The class to which the method will be bound.method
- The name of the methodarity
- The Arity of the methodvisibility
- The method's visibility on the target type.scope
- The methods static scoping information.scriptObject
- An instace of the target compiled method class.callConfig
- The call configuration to use for this method.org.jruby.internal.runtime.methods.MethodFactory#getCompiledMethod
public DynamicMethod getCompiledMethod(RubyModule implementationClass, java.lang.String method, Arity arity, Visibility visibility, StaticScope scope, java.lang.Object scriptObject, CallConfiguration callConfig, ISourcePosition position, java.lang.String parameterDesc)
getCompiledMethod
in class MethodFactory
implementationClass
- The class to which the method will be bound.method
- The name of the methodarity
- The Arity of the methodvisibility
- The method's visibility on the target type.scope
- The methods static scoping information.scriptObject
- An instace of the target compiled method class.callConfig
- The call configuration to use for this method.position
- The position to use when generating traceable handles.org.jruby.internal.runtime.methods.MethodFactory#getCompiledMethod
public byte[] getCompiledMethodOffline(java.lang.String method, java.lang.String className, java.lang.String invokerPath, Arity arity, StaticScope scope, CallConfiguration callConfig, java.lang.String filename, int line)
getCompiledMethodOffline
in class MethodFactory
method
- The name of the methodclassName
- The path-like (with / instead of .) name of the classinvokerPath
- The path-line name of the invoker to generatearity
- The Arity of the methodscope
- The methods static scoping information.callConfig
- The call configuration to use for this method.org.jruby.internal.runtime.methods.MethodFactory#getCompiledMethod
public DynamicMethod getAnnotatedMethod(RubyModule implementationClass, java.util.List<JavaMethodDescriptor> descs)
getAnnotatedMethod
in class MethodFactory
implementationClass
- The target class or module on which the method
will be bound.org.jruby.internal.runtime.methods.MethodFactory#getAnnotatedMethod
public java.lang.Class getAnnotatedMethodClass(java.util.List<JavaMethodDescriptor> descs) throws java.lang.Exception
java.lang.Exception
org.jruby.internal.runtime.methods.MethodFactory#getAnnotatedMethod
public DynamicMethod getAnnotatedMethod(RubyModule implementationClass, JavaMethodDescriptor desc)
getAnnotatedMethod
in class MethodFactory
implementationClass
- The target class or module on which the method
will be bound.desc
- A JavaMethodDescriptor describing the target methodorg.jruby.internal.runtime.methods.MethodFactory#getAnnotatedMethod
public CompiledBlockCallback getBlockCallback(java.lang.String method, java.lang.String file, int line, java.lang.Object scriptObject)
MethodFactory
getBlockCallback
in class MethodFactory
method
- The name of the methodscriptObject
- The object in which the method can be foundpublic byte[] getBlockCallbackOffline(java.lang.String method, java.lang.String file, int line, java.lang.String classname)
MethodFactory
getBlockCallbackOffline
in class MethodFactory
method
- The name of the methodclassname
- The /-based name of the class containing the methodpublic CompiledBlockCallback19 getBlockCallback19(java.lang.String method, java.lang.String file, int line, java.lang.Object scriptObject)
MethodFactory
getBlockCallback19
in class MethodFactory
method
- The name of the methodscriptObject
- The object in which the method can be foundpublic byte[] getBlockCallback19Offline(java.lang.String method, java.lang.String file, int line, java.lang.String classname)
MethodFactory
getBlockCallback19Offline
in class MethodFactory
method
- The name of the methodclassname
- The /-based name of the class containing the methodpublic void prepareAnnotatedMethod(RubyModule implementationClass, JavaMethod javaMethod, JavaMethodDescriptor desc)
org.jruby.internal.runtime.methods.MethodFactory#getAnnotatedMethod
public static java.lang.String getPostMethod(CallConfiguration callConfig)
protected java.lang.Class endCall(org.objectweb.asm.ClassWriter cw, java.lang.String name)
protected java.lang.Class endCallWithBytes(byte[] classBytes, java.lang.String name)
protected byte[] endCallOffline(org.objectweb.asm.ClassWriter cw)
protected java.lang.Class endClass(org.objectweb.asm.ClassWriter cw, java.lang.String name)
protected java.lang.Class endClassWithBytes(byte[] code, java.lang.String name)
protected byte[] endClassOffline(org.objectweb.asm.ClassWriter cw)
Copyright © 2002-2009 JRuby Team. All Rights Reserved.