/** * Add a New statement of the given array type and length */ public SSANewInstruction add1DArrayAllocation(TypeReference T, int length) { int instance = nextLocal++; NewSiteReference ref = NewSiteReference.make(statements.size(), T); assert T.isArrayType(); assert ((ArrayClass)cha.lookupClass(T)).getDimensionality() == 1; int[] sizes = new int[1]; Arrays.fill(sizes, getValueNumberForIntConstant(length)); SSANewInstruction result = insts.NewInstruction(statements.size(), instance, ref, sizes); statements.add(result); cache.invalidate(this, Everywhere.EVERYWHERE); return result; }
/** * Add a New statement of the given array type and length */ public SSANewInstruction add1DArrayAllocation(TypeReference T, int length) { int instance = nextLocal++; NewSiteReference ref = NewSiteReference.make(statements.size(), T); assert T.isArrayType(); assert ((ArrayClass)cha.lookupClass(T)).getDimensionality() == 1; int[] sizes = new int[1]; Arrays.fill(sizes, getValueNumberForIntConstant(length)); SSANewInstruction result = insts.NewInstruction(statements.size(), instance, ref, sizes); statements.add(result); cache.invalidate(this, Everywhere.EVERYWHERE); return result; }
private Collection<IClass> getImmediateArraySubclasses(ArrayClass klass) { IClass innermost = getInnermostTypeOfArrayClass(klass); if (innermost == null) { return Collections.emptySet(); } Collection<IClass> innermostSubclasses = getImmediateSubclasses(innermost); int dim = klass.getDimensionality(); Collection<IClass> result = HashSetFactory.make(); for (IClass k : innermostSubclasses) { TypeReference ref = k.getReference(); for (int i = 0; i < dim; i++) { ref = ref.getArrayTypeForElementType(); } result.add(lookupClass(ref)); } return result; }
private Collection<IClass> getImmediateArraySubclasses(ArrayClass klass) { IClass innermost = getInnermostTypeOfArrayClass(klass); if (innermost == null) { return Collections.emptySet(); } Collection<IClass> innermostSubclasses = getImmediateSubclasses(innermost); int dim = klass.getDimensionality(); Collection<IClass> result = HashSetFactory.make(); for (IClass k : innermostSubclasses) { TypeReference ref = k.getReference(); for (int i = 0; i < dim; i++) { ref = ref.getArrayTypeForElementType(); } result.add(lookupClass(ref)); } return result; }
SSANewInstruction a = null; if (T.isArrayType()) { int[] sizes = new int[((ArrayClass)klass).getDimensionality()]; initValueNumberForConstantOne(); Arrays.fill(sizes, valueNumberForConstantOne);
int length = nextLocal++; statements.add(insts.ArrayLengthInstruction(statements.size(), length, 1)); int[] sizes = new int[((ArrayClass)klass).getDimensionality()]; Arrays.fill(sizes, length); N = insts.NewInstruction(statements.size(), retValue, ref, sizes);
int length = nextLocal++; statements.add(insts.ArrayLengthInstruction(statements.size(), length, 1)); int[] sizes = new int[((ArrayClass)klass).getDimensionality()]; Arrays.fill(sizes, length); N = insts.NewInstruction(statements.size(), retValue, ref, sizes);
SSANewInstruction a = null; if (T.isArrayType()) { int[] sizes = new int[((ArrayClass)klass).getDimensionality()]; initValueNumberForConstantOne(); Arrays.fill(sizes, valueNumberForConstantOne);
final int dim = aCls.getDimensionality();
final int dim = aCls.getDimensionality();
final int dim = aCls.getDimensionality();
final int dim = aCls.getDimensionality();
SSANewInstruction ni = null; if (e.isArrayType()) { int[] sizes = new int[((ArrayClass)cha.lookupClass(T)).getDimensionality()]; Arrays.fill(sizes, getValueNumberForIntConstant(1)); ni = insts.NewInstruction(statements.size(), alloc, n, sizes);
SSANewInstruction ni = null; if (e.isArrayType()) { int[] sizes = new int[((ArrayClass)cha.lookupClass(T)).getDimensionality()]; Arrays.fill(sizes, getValueNumberForIntConstant(1)); ni = insts.NewInstruction(statements.size(), alloc, n, sizes);
private int compareArrayKey(ArrayContentsKey key1, Object key2) { if (key2 instanceof ArrayContentsKey) { ArrayClass k1 = (ArrayClass)key1.getInstanceKey().getConcreteType(); ArrayClass k2 = (ArrayClass)((ArrayContentsKey)key2).getInstanceKey().getConcreteType(); int d1 = k1.getDimensionality(); int d2 = k2.getDimensionality(); if (d1 != d2) { return d1-d2; } else if (k1.getInnermostElementClass() == null) { if (k2.getInnermostElementClass() == null) return comparePrimitives( k1.getReference().getInnermostElementType(), k2.getReference().getInnermostElementType()); else return -1; } else if (k2.getInnermostElementClass() == null) { return 1; } else { return compareConcreteTypes( k1.getInnermostElementClass(), k2.getInnermostElementClass()); } } else return -1; }
private int compareArrayKey(ArrayContentsKey key1, Object key2) { if (key2 instanceof ArrayContentsKey) { ArrayClass k1 = (ArrayClass)key1.getInstanceKey().getConcreteType(); ArrayClass k2 = (ArrayClass)((ArrayContentsKey)key2).getInstanceKey().getConcreteType(); int d1 = k1.getDimensionality(); int d2 = k2.getDimensionality(); if (d1 != d2) { return d1-d2; } else if (k1.getInnermostElementClass() == null) { if (k2.getInnermostElementClass() == null) return comparePrimitives( k1.getReference().getInnermostElementType(), k2.getReference().getInnermostElementType()); else return -1; } else if (k2.getInnermostElementClass() == null) { return 1; } else { return compareConcreteTypes( k1.getInnermostElementClass(), k2.getInnermostElementClass()); } } else return -1; }
/** * Record that we have a new instanceKey for a given declared type. */ private void registerInstanceOfClass(IClass klass, int index) { if (DEBUG) { System.err.println("registerInstanceOfClass " + klass + ' ' + index); } assert !klass.getReference().equals(TypeReference.JavaLangObject); IClass T = klass; registerInstanceWithAllSuperclasses(index, T); registerInstanceWithAllInterfaces(klass, index); if (klass.isArrayClass()) { ArrayClass aClass = (ArrayClass) klass; int dim = aClass.getDimensionality(); registerMultiDimArraysForArrayOfObjectTypes(dim, index, aClass); IClass elementClass = aClass.getInnermostElementClass(); if (elementClass != null) { registerArrayInstanceWithAllSuperclassesOfElement(index, elementClass, dim); registerArrayInstanceWithAllInterfacesOfElement(index, elementClass, dim); } } }
/** * Record that we have a new instanceKey for a given declared type. */ private void registerInstanceOfClass(IClass klass, int index) { if (DEBUG) { System.err.println("registerInstanceOfClass " + klass + ' ' + index); } assert !klass.getReference().equals(TypeReference.JavaLangObject); IClass T = klass; registerInstanceWithAllSuperclasses(index, T); registerInstanceWithAllInterfaces(klass, index); if (klass.isArrayClass()) { ArrayClass aClass = (ArrayClass) klass; int dim = aClass.getDimensionality(); registerMultiDimArraysForArrayOfObjectTypes(dim, index, aClass); IClass elementClass = aClass.getInnermostElementClass(); if (elementClass != null) { registerArrayInstanceWithAllSuperclassesOfElement(index, elementClass, dim); registerArrayInstanceWithAllInterfacesOfElement(index, elementClass, dim); } } }
} else { t = TypeReference.findOrCreateArrayOf(impl); for (int dim = 1; dim < arrayKlass.getDimensionality(); dim++) { t = TypeReference.findOrCreateArrayOf(t);
} else { t = TypeReference.findOrCreateArrayOf(impl); for (int dim = 1; dim < arrayKlass.getDimensionality(); dim++) { t = TypeReference.findOrCreateArrayOf(t);