org.codehaus.groovy.classgen
Class BytecodeHelper

java.lang.Object
  extended byorg.codehaus.groovy.classgen.BytecodeHelper
All Implemented Interfaces:
org.objectweb.asm.Constants

public class BytecodeHelper
extends Object
implements org.objectweb.asm.Constants

A helper class for bytecode generation with AsmClassGenerator.

Version:
$Revision: 1.18 $
Author:
James Strachan, Bing Ran

Field Summary
 
Fields inherited from interface org.objectweb.asm.Constants
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, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, 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, 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, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, 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, V1_1, V1_2, V1_3, V1_4, V1_5
 
Constructor Summary
BytecodeHelper(org.objectweb.asm.CodeVisitor cv)
           
 
Method Summary
 void box(Class type)
          Generates the bytecode to autobox the current value on the stack
 void box(String type)
           
 void boxBoolean()
          convert boolean to Boolean
static Class boxOnPrimitive(Class cls)
           
 void doCast(Class type)
           
 void doCast(String type)
           
 void dup()
           
static String formatNameForClassLoading(String name)
          returns a name that Class.forName() can take.
static String getClassInternalName(String name)
           
static String[] getClassInternalNames(String[] names)
           
static String getClassRegularName(String name)
           
 org.objectweb.asm.CodeVisitor getCodeVisitor()
           
static String getMethodDescriptor(Class returnType, Class[] paramTypes)
           
static String getMethodDescriptor(groovy.lang.MetaMethod metamethod)
           
static String getMethodDescriptor(Method meth)
           
static String getMethodDescriptor(String returnTypeName, Parameter[] paramTypeNames)
           
static String getObjectTypeForPrimitive(String type)
           
static String getTypeDescription(Class type)
           
static String getTypeDescription(String name)
          array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I
 void invoke(Method meth)
          create the bytecode to invoke a method
static boolean isPrimitiveType(String type)
           
 void load(String type, int idx)
           
 void load(Variable v)
           
 void loadThis()
           
 void loadVar(Variable variable, boolean holder)
          load the value of the variable on the operand stack.
 void mark(String msg)
          load a message on the stack and remove it right away.
protected  void pushConstant(boolean value)
           
protected  void pushConstant(int value)
           
 void putField(FieldNode fld)
           
 void putField(FieldNode fld, String ownerName)
           
 void quickBoxIfNecessary(Class cls)
          box the primitive value on the stack
 void quickUnboxIfNecessary(Class cls)
          unbox the ref on the stack
 void store(String type, int idx)
           
 void store(Variable v)
           
 void store(Variable v, boolean markStart)
           
 void storeVar(Variable variable, boolean holder)
           
 void unbox(Class type)
          Generates the bytecode to unbox the current value on the stack
 void unbox(String type)
          Generates the bytecode to unbox the current value on the stack
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

BytecodeHelper

public BytecodeHelper(org.objectweb.asm.CodeVisitor cv)
Method Detail

getCodeVisitor

public org.objectweb.asm.CodeVisitor getCodeVisitor()

box

public void box(Class type)
Generates the bytecode to autobox the current value on the stack


quickBoxIfNecessary

public void quickBoxIfNecessary(Class cls)
box the primitive value on the stack

Parameters:
cls -

quickUnboxIfNecessary

public void quickUnboxIfNecessary(Class cls)
unbox the ref on the stack

Parameters:
cls -

box

public void box(String type)

unbox

public void unbox(Class type)
Generates the bytecode to unbox the current value on the stack


unbox

public void unbox(String type)
Generates the bytecode to unbox the current value on the stack


isPrimitiveType

public static boolean isPrimitiveType(String type)

getTypeDescription

public static String getTypeDescription(String name)
array types are special: eg.: String[]: classname: [Ljava/lang/String; int[]: [I

Returns:
the ASM type description

getClassInternalName

public static String getClassInternalName(String name)
Returns:
the ASM internal name of the type

getClassRegularName

public static String getClassRegularName(String name)
Returns:
the regular class name of the type

getMethodDescriptor

public static String getMethodDescriptor(String returnTypeName,
                                         Parameter[] paramTypeNames)
Returns:
the ASM method type descriptor

getMethodDescriptor

public static String getMethodDescriptor(Class returnType,
                                         Class[] paramTypes)
Returns:
the ASM method type descriptor

getMethodDescriptor

public static String getMethodDescriptor(Method meth)

getTypeDescription

public static String getTypeDescription(Class type)

getClassInternalNames

public static String[] getClassInternalNames(String[] names)
Returns:
an array of ASM internal names of the type

pushConstant

protected void pushConstant(boolean value)

pushConstant

protected void pushConstant(int value)

doCast

public void doCast(String type)

doCast

public void doCast(Class type)

load

public void load(String type,
                 int idx)

load

public void load(Variable v)

store

public void store(String type,
                  int idx)

store

public void store(Variable v,
                  boolean markStart)

store

public void store(Variable v)

getObjectTypeForPrimitive

public static String getObjectTypeForPrimitive(String type)

loadVar

public void loadVar(Variable variable,
                    boolean holder)
load the value of the variable on the operand stack. unbox it if it's a reference

Parameters:
variable -
holder -

storeVar

public void storeVar(Variable variable,
                     boolean holder)

putField

public void putField(FieldNode fld)

putField

public void putField(FieldNode fld,
                     String ownerName)

loadThis

public void loadThis()

boxOnPrimitive

public static Class boxOnPrimitive(Class cls)

invoke

public void invoke(Method meth)
create the bytecode to invoke a method

Parameters:
meth - the method object to invoke

boxBoolean

public void boxBoolean()
convert boolean to Boolean


getMethodDescriptor

public static String getMethodDescriptor(groovy.lang.MetaMethod metamethod)

mark

public void mark(String msg)
load a message on the stack and remove it right away. Good for put a mark in the generated bytecode for debugging purpose.

Parameters:
msg -

formatNameForClassLoading

public static String formatNameForClassLoading(String name)
returns a name that Class.forName() can take. Notablely for arrays: [I, [Ljava.lang.String; etc Regular object type: java.lang.String

Parameters:
name -
Returns:

dup

public void dup()


Copyright © 2003-2005 The Codehaus. All Rights Reserved.