org.jruby.compiler.impl
Class StandardASMCompiler

java.lang.Object
  extended by org.jruby.compiler.impl.StandardASMCompiler
All Implemented Interfaces:
ScriptCompiler, org.objectweb.asm.Opcodes

public class StandardASMCompiler
extends java.lang.Object
implements ScriptCompiler, org.objectweb.asm.Opcodes

Author:
headius

Nested Class Summary
static class StandardASMCompiler.InvokerDescriptor
           
 
Field Summary
static int ARGS_INDEX
           
static int CLOSURE_OFFSET
           
static int DYNAMIC_SCOPE_OFFSET
           
static int EXCEPTION_OFFSET
           
static int FIRST_TEMP_OFFSET
           
static java.lang.reflect.Constructor invDynInvCompilerConstructor
           
static java.lang.reflect.Method invDynSupportInstaller
           
static java.lang.String IRUBYOBJECT
           
static int PREVIOUS_EXCEPTION_OFFSET
           
static java.lang.String RUBY
           
static int SELF_INDEX
           
static int STARTING_DSTR_SIZE
           
static int THIS
           
static java.lang.String THREADCONTEXT
           
static int THREADCONTEXT_INDEX
           
static int VARS_ARRAY_OFFSET
           
static boolean VERIFY_CLASSFILES
           
 
Fields inherited from interface org.objectweb.asm.Opcodes
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 Summary
StandardASMCompiler(java.lang.String classname, java.lang.String sourcename)
          Creates a new instance of StandardCompilerContext
 
Method Summary
 void addBlockCallback19Descriptor(java.lang.String method, java.lang.String file, int line)
           
 void addBlockCallbackDescriptor(java.lang.String method, java.lang.String file, int line)
           
 void addInvokerDescriptor(java.lang.String newMethodName, int methodArity, StaticScope scope, CallConfiguration callConfig, java.lang.String filename, int line)
           
static java.lang.String buildStaticScopeNames(StaticScope scope)
           
 void dumpClass(java.io.PrintStream out)
           
 void endScript(boolean generateLoad, boolean generateMain)
          End compilation for the current script, closing all context and structures used for the compilation.
 int getAndIncrementEnsureNumber()
           
 int getAndIncrementInnerIndex()
           
 int getAndIncrementMethodIndex()
           
 int getAndIncrementRescueNumber()
           
 CacheCompiler getCacheCompiler()
           
 byte[] getClassByteArray()
           
 SkinnyMethodAdapter getClassInitMethod()
           
 java.lang.String getClassname()
           
 org.objectweb.asm.ClassVisitor getClassVisitor()
           
static java.lang.String getClosure19Signature()
           
static java.lang.String getClosureSignature()
           
 int getEnsureNumber()
           
 SkinnyMethodAdapter getInitMethod()
           
 int getInnerIndex()
           
 int getMethodIndex()
           
static java.lang.String getMethodSignature(int args)
           
 java.lang.String getNewConstant(java.lang.String type, java.lang.String name_prefix)
           
 java.lang.String getNewConstant(java.lang.String type, java.lang.String name_prefix, java.lang.Object init)
           
 java.lang.String getNewConstantName()
           
 java.lang.String getNewField(java.lang.String type, java.lang.String name, java.lang.Object init)
           
 java.lang.String getNewStaticConstant(java.lang.String type, java.lang.String name_prefix)
           
 int getRescueNumber()
           
 java.lang.String getSourcename()
           
static java.lang.String getStaticClosure19Signature(java.lang.String classdesc)
           
static java.lang.String getStaticClosureSignature(java.lang.String classdesc)
           
static java.lang.Class[] getStaticMethodParams(java.lang.Class target, int args)
           
static java.lang.String getStaticMethodSignature(java.lang.String classname, int args)
           
 java.lang.Class<?> loadClass(JRubyClassLoader classLoader)
           
 void setJavaVersion(java.lang.Integer javaVersion)
           
 BodyCompiler startFileMethod(CompilerCallback args, StaticScope scope, ASTInspector inspector)
          Begin compilation for the root of a script named __file__.
 BodyCompiler startMethod(java.lang.String rubyName, java.lang.String javaName, CompilerCallback args, StaticScope scope, ASTInspector inspector)
          Begin compilation for a method that has the specified number of local variables.
 BodyCompiler startRoot(java.lang.String rubyName, java.lang.String javaName, StaticScope scope, ASTInspector inspector)
          Begin compilation for a the root of a script.
 void startScript(StaticScope scope)
          Begin compilation for a script, preparing all necessary context and code to support this script's compiled representation.
 void writeClass(java.io.File destination)
           
 void writeInvokers(java.io.File destination)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

THREADCONTEXT

public static final java.lang.String THREADCONTEXT

RUBY

public static final java.lang.String RUBY

IRUBYOBJECT

public static final java.lang.String IRUBYOBJECT

VERIFY_CLASSFILES

public static final boolean VERIFY_CLASSFILES
See Also:
Constant Field Values

THIS

public static final int THIS
See Also:
Constant Field Values

THREADCONTEXT_INDEX

public static final int THREADCONTEXT_INDEX
See Also:
Constant Field Values

SELF_INDEX

public static final int SELF_INDEX
See Also:
Constant Field Values

ARGS_INDEX

public static final int ARGS_INDEX
See Also:
Constant Field Values

CLOSURE_OFFSET

public static final int CLOSURE_OFFSET
See Also:
Constant Field Values

DYNAMIC_SCOPE_OFFSET

public static final int DYNAMIC_SCOPE_OFFSET
See Also:
Constant Field Values

VARS_ARRAY_OFFSET

public static final int VARS_ARRAY_OFFSET
See Also:
Constant Field Values

EXCEPTION_OFFSET

public static final int EXCEPTION_OFFSET
See Also:
Constant Field Values

PREVIOUS_EXCEPTION_OFFSET

public static final int PREVIOUS_EXCEPTION_OFFSET
See Also:
Constant Field Values

FIRST_TEMP_OFFSET

public static final int FIRST_TEMP_OFFSET
See Also:
Constant Field Values

STARTING_DSTR_SIZE

public static final int STARTING_DSTR_SIZE
See Also:
Constant Field Values

invDynInvCompilerConstructor

public static final java.lang.reflect.Constructor invDynInvCompilerConstructor

invDynSupportInstaller

public static final java.lang.reflect.Method invDynSupportInstaller
Constructor Detail

StandardASMCompiler

public StandardASMCompiler(java.lang.String classname,
                           java.lang.String sourcename)
Creates a new instance of StandardCompilerContext

Method Detail

getStaticMethodSignature

public static java.lang.String getStaticMethodSignature(java.lang.String classname,
                                                        int args)

getStaticMethodParams

public static java.lang.Class[] getStaticMethodParams(java.lang.Class target,
                                                      int args)

getMethodSignature

public static java.lang.String getMethodSignature(int args)

getStaticClosureSignature

public static java.lang.String getStaticClosureSignature(java.lang.String classdesc)

getStaticClosure19Signature

public static java.lang.String getStaticClosure19Signature(java.lang.String classdesc)

getClosureSignature

public static java.lang.String getClosureSignature()

getClosure19Signature

public static java.lang.String getClosure19Signature()

setJavaVersion

public void setJavaVersion(java.lang.Integer javaVersion)

getClassByteArray

public byte[] getClassByteArray()

loadClass

public java.lang.Class<?> loadClass(JRubyClassLoader classLoader)
                             throws java.lang.ClassNotFoundException
Throws:
java.lang.ClassNotFoundException

dumpClass

public void dumpClass(java.io.PrintStream out)

writeClass

public void writeClass(java.io.File destination)
                throws java.io.IOException
Throws:
java.io.IOException

writeInvokers

public void writeInvokers(java.io.File destination)
                   throws java.io.IOException
Throws:
java.io.IOException

addInvokerDescriptor

public void addInvokerDescriptor(java.lang.String newMethodName,
                                 int methodArity,
                                 StaticScope scope,
                                 CallConfiguration callConfig,
                                 java.lang.String filename,
                                 int line)

addBlockCallbackDescriptor

public void addBlockCallbackDescriptor(java.lang.String method,
                                       java.lang.String file,
                                       int line)

addBlockCallback19Descriptor

public void addBlockCallback19Descriptor(java.lang.String method,
                                         java.lang.String file,
                                         int line)

getClassname

public java.lang.String getClassname()

getSourcename

public java.lang.String getSourcename()

getClassVisitor

public org.objectweb.asm.ClassVisitor getClassVisitor()

startScript

public void startScript(StaticScope scope)
Description copied from interface: ScriptCompiler
Begin compilation for a script, preparing all necessary context and code to support this script's compiled representation.

Specified by:
startScript in interface ScriptCompiler

endScript

public void endScript(boolean generateLoad,
                      boolean generateMain)
Description copied from interface: ScriptCompiler
End compilation for the current script, closing all context and structures used for the compilation.

Specified by:
endScript in interface ScriptCompiler

buildStaticScopeNames

public static java.lang.String buildStaticScopeNames(StaticScope scope)

getInitMethod

public SkinnyMethodAdapter getInitMethod()

getClassInitMethod

public SkinnyMethodAdapter getClassInitMethod()

getCacheCompiler

public CacheCompiler getCacheCompiler()

startMethod

public BodyCompiler startMethod(java.lang.String rubyName,
                                java.lang.String javaName,
                                CompilerCallback args,
                                StaticScope scope,
                                ASTInspector inspector)
Description copied from interface: ScriptCompiler
Begin compilation for a method that has the specified number of local variables. The returned value is a token that can be used to end the method later.

Specified by:
startMethod in interface ScriptCompiler
javaName - The outward user-readable name of the method. A unique name will be generated based on this.
Returns:
An Object that represents the method within this compiler. Used in calls to endMethod once compilation for this method is completed.

startFileMethod

public BodyCompiler startFileMethod(CompilerCallback args,
                                    StaticScope scope,
                                    ASTInspector inspector)
Description copied from interface: ScriptCompiler
Begin compilation for the root of a script named __file__.

Specified by:
startFileMethod in interface ScriptCompiler
Parameters:
args - Arguments to the script, as passed via jitted wrappers
scope - The StaticScope for the script
inspector - The ASTInspector for the nodes for the script
Returns:
A new BodyCompiler for the body of the script

startRoot

public BodyCompiler startRoot(java.lang.String rubyName,
                              java.lang.String javaName,
                              StaticScope scope,
                              ASTInspector inspector)
Description copied from interface: ScriptCompiler
Begin compilation for a the root of a script. This differs from method compilation in that it doesn't do specific-arity logic, nor does it require argument processing.

Specified by:
startRoot in interface ScriptCompiler
javaName - The outward user-readable name of the method. A unique name will be generated based on this.
Returns:
An Object that represents the method within this compiler. Used in calls to endMethod once compilation for this method is completed.

getMethodIndex

public int getMethodIndex()

getAndIncrementMethodIndex

public int getAndIncrementMethodIndex()

getInnerIndex

public int getInnerIndex()

getAndIncrementInnerIndex

public int getAndIncrementInnerIndex()

getRescueNumber

public int getRescueNumber()

getAndIncrementRescueNumber

public int getAndIncrementRescueNumber()

getEnsureNumber

public int getEnsureNumber()

getAndIncrementEnsureNumber

public int getAndIncrementEnsureNumber()

getNewConstant

public java.lang.String getNewConstant(java.lang.String type,
                                       java.lang.String name_prefix)

getNewConstantName

public java.lang.String getNewConstantName()

getNewConstant

public java.lang.String getNewConstant(java.lang.String type,
                                       java.lang.String name_prefix,
                                       java.lang.Object init)

getNewField

public java.lang.String getNewField(java.lang.String type,
                                    java.lang.String name,
                                    java.lang.Object init)

getNewStaticConstant

public java.lang.String getNewStaticConstant(java.lang.String type,
                                             java.lang.String name_prefix)


Copyright © 2002-2009 JRuby Team. All Rights Reserved.