--- old/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPoolObject.java 2019-03-28 11:23:47.000000000 -0700 +++ new/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPoolObject.java 2019-03-28 11:23:47.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,21 +23,19 @@ package jdk.vm.ci.hotspot; import jdk.vm.ci.meta.JavaConstant; +import jdk.vm.ci.meta.JavaKind; /** * Represents a constant that was retrieved from a constant pool. Used to keep track of the constant * pool slot for the constant. */ -public final class HotSpotConstantPoolObject extends HotSpotObjectConstantImpl { - - static JavaConstant forObject(HotSpotResolvedObjectType type, int cpi, Object object) { - return new HotSpotConstantPoolObject(type, cpi, object); - } +public final class HotSpotConstantPoolObject implements JavaConstant { public static JavaConstant forObject(HotSpotResolvedObjectType type, int cpi, JavaConstant object) { - return forObject(type, cpi, ((HotSpotObjectConstantImpl) object).object()); + return new HotSpotConstantPoolObject(type, cpi, object); } + private final JavaConstant constant; private final HotSpotResolvedObjectType type; private final int cpi; @@ -49,24 +47,72 @@ return cpi; } - HotSpotConstantPoolObject(HotSpotResolvedObjectType type, int cpi, Object object) { - super(object, false); + HotSpotConstantPoolObject(HotSpotResolvedObjectType type, int cpi, JavaConstant constant) { this.type = type; this.cpi = cpi; + this.constant = constant; } @Override public boolean equals(Object o) { if (o instanceof HotSpotConstantPoolObject) { - if (super.equals(o)) { - HotSpotConstantPoolObject other = (HotSpotConstantPoolObject) o; - return type.equals(other.type) && cpi == other.cpi; - } + HotSpotConstantPoolObject other = (HotSpotConstantPoolObject) o; + return type.equals(other.type) && cpi == other.cpi && constant.equals(other.constant); } return false; } @Override + public int hashCode() { + return constant.hashCode() + cpi + type.hashCode(); + } + + @Override + public JavaKind getJavaKind() { + return constant.getJavaKind(); + } + + @Override + public boolean isNull() { + return constant.isNull(); + } + + @Override + public boolean isDefaultForKind() { + return constant.isDefaultForKind(); + } + + @Override + public Object asBoxedPrimitive() { + return constant.asBoxedPrimitive(); + } + + @Override + public int asInt() { + return constant.asInt(); + } + + @Override + public boolean asBoolean() { + return constant.asBoolean(); + } + + @Override + public long asLong() { + return constant.asLong(); + } + + @Override + public float asFloat() { + return constant.asFloat(); + } + + @Override + public double asDouble() { + return 0; + } + + @Override public String toValueString() { return getCpType().getName() + getCpi(); }