31 import jdk.vm.ci.meta.Constant; 32 import jdk.vm.ci.meta.JavaConstant; 33 import jdk.vm.ci.meta.JavaKind; 34 import jdk.vm.ci.meta.MetaAccessProvider; 35 import jdk.vm.ci.meta.ResolvedJavaType; 36 37 /** 38 * Type describing all pointers to Java objects. 39 */ 40 public abstract class AbstractObjectStamp extends AbstractPointerStamp { 41 42 private final ResolvedJavaType type; 43 private final boolean exactType; 44 45 protected AbstractObjectStamp(ResolvedJavaType type, boolean exactType, boolean nonNull, boolean alwaysNull) { 46 super(nonNull, alwaysNull); 47 this.type = type; 48 this.exactType = exactType; 49 } 50 51 protected abstract AbstractObjectStamp copyWith(ResolvedJavaType newType, boolean newExactType, boolean newNonNull, boolean newAlwaysNull); 52 53 @Override 54 protected final AbstractPointerStamp copyWith(boolean newNonNull, boolean newAlwaysNull) { 55 return copyWith(type, exactType, newNonNull, newAlwaysNull); 56 } 57 58 @Override 59 public Stamp unrestricted() { 60 return copyWith(null, false, false, false); 61 } 62 63 @Override 64 public Stamp empty() { 65 return copyWith(null, true, true, false); 66 } 67 68 @Override 69 public Stamp constant(Constant c, MetaAccessProvider meta) { 70 JavaConstant jc = (JavaConstant) c; | 31 import jdk.vm.ci.meta.Constant; 32 import jdk.vm.ci.meta.JavaConstant; 33 import jdk.vm.ci.meta.JavaKind; 34 import jdk.vm.ci.meta.MetaAccessProvider; 35 import jdk.vm.ci.meta.ResolvedJavaType; 36 37 /** 38 * Type describing all pointers to Java objects. 39 */ 40 public abstract class AbstractObjectStamp extends AbstractPointerStamp { 41 42 private final ResolvedJavaType type; 43 private final boolean exactType; 44 45 protected AbstractObjectStamp(ResolvedJavaType type, boolean exactType, boolean nonNull, boolean alwaysNull) { 46 super(nonNull, alwaysNull); 47 this.type = type; 48 this.exactType = exactType; 49 } 50 51 @Override 52 public void accept(Visitor v) { 53 super.accept(v); 54 v.visitObject(type); 55 v.visitBoolean(exactType); 56 } 57 58 protected abstract AbstractObjectStamp copyWith(ResolvedJavaType newType, boolean newExactType, boolean newNonNull, boolean newAlwaysNull); 59 60 @Override 61 protected final AbstractPointerStamp copyWith(boolean newNonNull, boolean newAlwaysNull) { 62 return copyWith(type, exactType, newNonNull, newAlwaysNull); 63 } 64 65 @Override 66 public Stamp unrestricted() { 67 return copyWith(null, false, false, false); 68 } 69 70 @Override 71 public Stamp empty() { 72 return copyWith(null, true, true, false); 73 } 74 75 @Override 76 public Stamp constant(Constant c, MetaAccessProvider meta) { 77 JavaConstant jc = (JavaConstant) c; |