joeq.Runtime
Class TypeCheck

java.lang.Object
  extended by joeq.Runtime.TypeCheck
All Implemented Interfaces:
jq_ClassFileConstants, CompilationConstants

public abstract class TypeCheck
extends Object
implements jq_ClassFileConstants, CompilationConstants

Implements Java type checking.

Version:
$Id: TypeCheck.java 1931 2004-09-22 22:17:47Z joewhaley $
Author:
John Whaley

Field Summary
static jq_StaticMethod _arrayStoreCheck
           
static jq_StaticMethod _checkcast
           
static jq_StaticMethod _instance_of
           
static boolean VerifyAssertions
           
 
Fields inherited from interface joeq.Class.jq_ClassFileConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_Class, CONSTANT_Double, CONSTANT_FieldRef, CONSTANT_Float, CONSTANT_Integer, CONSTANT_InterfaceMethodRef, CONSTANT_Long, CONSTANT_MethodRef, CONSTANT_NameAndType, CONSTANT_ResolvedClass, CONSTANT_ResolvedIFieldRef, CONSTANT_ResolvedIMethodRef, CONSTANT_ResolvedSFieldRef, CONSTANT_ResolvedSMethodRef, CONSTANT_String, CONSTANT_Utf8, CONSUME_STACK, ILLEGAL_OPCODE, ILLEGAL_TYPE, jbc_AALOAD, jbc_AASTORE, jbc_ACONST_NULL, jbc_ALOAD, jbc_ALOAD_0, jbc_ALOAD_1, jbc_ALOAD_2, jbc_ALOAD_3, jbc_ANEWARRAY, jbc_ARETURN, jbc_ARRAYLENGTH, jbc_ASTORE, jbc_ASTORE_0, jbc_ASTORE_1, jbc_ASTORE_2, jbc_ASTORE_3, jbc_ATHROW, jbc_BALOAD, jbc_BASTORE, jbc_BIPUSH, jbc_BREAKPOINT, jbc_CALOAD, jbc_CASTORE, jbc_CHECKCAST, jbc_D2F, jbc_D2I, jbc_D2L, jbc_DADD, jbc_DALOAD, jbc_DASTORE, jbc_DCMPG, jbc_DCMPL, jbc_DCONST_0, jbc_DCONST_1, jbc_DDIV, jbc_DLOAD, jbc_DLOAD_0, jbc_DLOAD_1, jbc_DLOAD_2, jbc_DLOAD_3, jbc_DMUL, jbc_DNEG, jbc_DREM, jbc_DRETURN, jbc_DSTORE, jbc_DSTORE_0, jbc_DSTORE_1, jbc_DSTORE_2, jbc_DSTORE_3, jbc_DSUB, jbc_DUP, jbc_DUP_X1, jbc_DUP_X2, jbc_DUP2, jbc_DUP2_X1, jbc_DUP2_X2, jbc_F2D, jbc_F2I, jbc_F2L, jbc_FADD, jbc_FALOAD, jbc_FASTORE, jbc_FCMPG, jbc_FCMPL, jbc_FCONST_0, jbc_FCONST_1, jbc_FCONST_2, jbc_FDIV, jbc_FLOAD, jbc_FLOAD_0, jbc_FLOAD_1, jbc_FLOAD_2, jbc_FLOAD_3, jbc_FMUL, jbc_FNEG, jbc_FREM, jbc_FRETURN, jbc_FSTORE, jbc_FSTORE_0, jbc_FSTORE_1, jbc_FSTORE_2, jbc_FSTORE_3, jbc_FSUB, jbc_GETFIELD, jbc_GETSTATIC, jbc_GOTO, jbc_GOTO_W, jbc_I2B, jbc_I2C, jbc_I2D, jbc_I2F, jbc_I2L, jbc_I2S, jbc_IADD, jbc_IALOAD, jbc_IAND, jbc_IASTORE, jbc_ICONST_0, jbc_ICONST_1, jbc_ICONST_2, jbc_ICONST_3, jbc_ICONST_4, jbc_ICONST_5, jbc_ICONST_M1, jbc_IDIV, jbc_IF_ACMPEQ, jbc_IF_ACMPNE, jbc_IF_ICMPEQ, jbc_IF_ICMPGE, jbc_IF_ICMPGT, jbc_IF_ICMPLE, jbc_IF_ICMPLT, jbc_IF_ICMPNE, jbc_IFEQ, jbc_IFGE, jbc_IFGT, jbc_IFLE, jbc_IFLT, jbc_IFNE, jbc_IFNONNULL, jbc_IFNULL, jbc_IINC, jbc_ILOAD, jbc_ILOAD_0, jbc_ILOAD_1, jbc_ILOAD_2, jbc_ILOAD_3, jbc_IMUL, jbc_INEG, jbc_INSTANCEOF, jbc_INT2BYTE, jbc_INT2CHAR, jbc_INT2SHORT, jbc_INVOKEINTERFACE, jbc_INVOKENONVIRTUAL, jbc_INVOKESPECIAL, jbc_INVOKESTATIC, jbc_INVOKEVIRTUAL, jbc_IOR, jbc_IREM, jbc_IRETURN, jbc_ISHL, jbc_ISHR, jbc_ISTORE, jbc_ISTORE_0, jbc_ISTORE_1, jbc_ISTORE_2, jbc_ISTORE_3, jbc_ISUB, jbc_IUSHR, jbc_IXOR, jbc_JSR, jbc_JSR_W, jbc_L2D, jbc_L2F, jbc_L2I, jbc_LADD, jbc_LALOAD, jbc_LAND, jbc_LASTORE, jbc_LCMP, jbc_LCONST_0, jbc_LCONST_1, jbc_LDC, jbc_LDC_W, jbc_LDC2_W, jbc_LDIV, jbc_LLOAD, jbc_LLOAD_0, jbc_LLOAD_1, jbc_LLOAD_2, jbc_LLOAD_3, jbc_LMUL, jbc_LNEG, jbc_LOOKUPSWITCH, jbc_LOR, jbc_LREM, jbc_LRETURN, jbc_LSHL, jbc_LSHR, jbc_LSTORE, jbc_LSTORE_0, jbc_LSTORE_1, jbc_LSTORE_2, jbc_LSTORE_3, jbc_LSUB, jbc_LUSHR, jbc_LXOR, jbc_MONITORENTER, jbc_MONITOREXIT, jbc_MULTIANEWARRAY, jbc_NEW, jbc_NEWARRAY, jbc_NOP, jbc_POP, jbc_POP2, jbc_PUTFIELD, jbc_PUTSTATIC, jbc_RET, jbc_RETURN, jbc_SALOAD, jbc_SASTORE, jbc_SIPUSH, jbc_SWAP, jbc_TABLESWITCH, jbc_WIDE, NO_OF_OPERANDS, OPCODE_NAMES, PRODUCE_STACK, RESERVED, STATE_CLSINITERROR, STATE_CLSINITIALIZED, STATE_CLSINITIALIZING, STATE_CLSINITRUNNING, STATE_COMPILED, STATE_COMPILING, STATE_LOADED, STATE_LOADERROR, STATE_LOADING1, STATE_LOADING2, STATE_LOADING3, STATE_PREPARED, STATE_PREPAREERROR, STATE_PREPARING, STATE_SFINITERROR, STATE_SFINITIALIZED, STATE_SFINITIALIZING, STATE_UNLOADED, STATE_VERIFIED, STATE_VERIFYERROR, STATE_VERIFYING, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_CLASSEND, TC_DOUBLE, TC_FLOAT, TC_INT, TC_LONG, TC_PARAM, TC_PARAMEND, TC_SHORT, TC_VOID, TYPE_OF_OPERANDS, UNDEFINED, UNPREDICTABLE
 
Fields inherited from interface joeq.Compiler.CompilationConstants
MAYBE, NO, YES
 
Constructor Summary
TypeCheck()
           
 
Method Summary
static void arrayStoreCheck(HeapAddress value, Object[] arrayref)
          Performs an arrayStoreCheck operation.
static Object checkcast(Object k, jq_Type t)
          Performs a checkcast operation.
static byte declaresInterface(jq_Class T, Collection interfaces, boolean loadClasses)
          Returns YES iff T declares one of the given interfaces.
static jq_Type findCommonSuperclass(jq_Type t1, jq_Type t2, boolean load)
           
static byte implementsInterface_noload(jq_Class klass, jq_Class inter)
          Returns YES iff T implements the given interface.
static boolean instance_of(Object k, jq_Type t)
          Performs an instanceof operation.
static boolean isAssignable_graph(jq_Type S, jq_Type T)
          Uses (old) graph traversal algorithm for type check.
static byte isAssignable_noload(jq_Type S, jq_Type T)
          Returns YES iff "T = S;" would be legal.
static boolean isAssignable(jq_Type S, jq_Type T)
          Returns true if "T = S;" would be legal.
static byte isSuperclassOf(jq_Class t1, jq_Class t2, boolean loadClasses)
          Returns YES iff t1 is a superclass of t2.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

VerifyAssertions

public static final boolean VerifyAssertions
See Also:
Constant Field Values

_checkcast

public static final jq_StaticMethod _checkcast

_instance_of

public static final jq_StaticMethod _instance_of

_arrayStoreCheck

public static final jq_StaticMethod _arrayStoreCheck
Constructor Detail

TypeCheck

public TypeCheck()
Method Detail

checkcast

public static Object checkcast(Object k,
                               jq_Type t)
Performs a checkcast operation.


instance_of

public static boolean instance_of(Object k,
                                  jq_Type t)
Performs an instanceof operation.


arrayStoreCheck

public static void arrayStoreCheck(HeapAddress value,
                                   Object[] arrayref)
                            throws ArrayStoreException
Performs an arrayStoreCheck operation.

Throws:
ArrayStoreException

isAssignable

public static boolean isAssignable(jq_Type S,
                                   jq_Type T)
Returns true if "T = S;" would be legal. (T is same or supertype of S) From the algorithm in vm spec under "checkcast"

Parameters:
S - subtype
T - type
Returns:
true iff "T = S;" would be legal.

isAssignable_graph

public static boolean isAssignable_graph(jq_Type S,
                                         jq_Type T)
Uses (old) graph traversal algorithm for type check.

Parameters:
S - subtype
T - type
Returns:
true iff "T = S;" would be legal.

isSuperclassOf

public static byte isSuperclassOf(jq_Class t1,
                                  jq_Class t2,
                                  boolean loadClasses)
Returns YES iff t1 is a superclass of t2.


isAssignable_noload

public static byte isAssignable_noload(jq_Type S,
                                       jq_Type T)
Returns YES iff "T = S;" would be legal. (T is same or supertype of S)


declaresInterface

public static byte declaresInterface(jq_Class T,
                                     Collection interfaces,
                                     boolean loadClasses)
Returns YES iff T declares one of the given interfaces.


implementsInterface_noload

public static byte implementsInterface_noload(jq_Class klass,
                                              jq_Class inter)
Returns YES iff T implements the given interface.


findCommonSuperclass

public static jq_Type findCommonSuperclass(jq_Type t1,
                                           jq_Type t2,
                                           boolean load)


Copyright © 2001-2008 John Whaley. All Rights Reserved.