Skip to content

Commit f2ee7af

Browse files
[GR-60163] [GR-60166] Minor fixes to (Invoke)Dynamic constant pool entries.
PullRequest: graal/19459
2 parents 78f8089 + 2e76289 commit f2ee7af

File tree

11 files changed

+97
-12
lines changed

11 files changed

+97
-12
lines changed

espresso/src/com.oracle.truffle.espresso.classfile/src/com/oracle/truffle/espresso/classfile/constantpool/BootstrapMethodConstant.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public interface BootstrapMethodConstant extends PoolConstant {
3333

3434
int getBootstrapMethodAttrIndex();
3535

36-
Symbol<Name> getName(ConstantPool pool);
36+
default Symbol<Name> getName(ConstantPool pool) {
37+
return getNameAndType(pool).getName(pool);
38+
}
3739

3840
NameAndTypeConstant getNameAndType(ConstantPool pool);
3941

espresso/src/com.oracle.truffle.espresso.classfile/src/com/oracle/truffle/espresso/classfile/constantpool/DynamicConstant.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424

2525
import java.nio.ByteBuffer;
2626

27-
import com.oracle.truffle.espresso.classfile.descriptors.ValidationException;
2827
import com.oracle.truffle.espresso.classfile.ConstantPool;
2928
import com.oracle.truffle.espresso.classfile.ConstantPool.Tag;
3029
import com.oracle.truffle.espresso.classfile.descriptors.Symbol;
3130
import com.oracle.truffle.espresso.classfile.descriptors.Symbol.Type;
3231
import com.oracle.truffle.espresso.classfile.descriptors.Types;
32+
import com.oracle.truffle.espresso.classfile.descriptors.ValidationException;
3333

34-
public interface DynamicConstant extends PoolConstant {
34+
public interface DynamicConstant extends BootstrapMethodConstant {
3535

3636
static DynamicConstant create(int bootstrapMethodAttrIndex, int nameAndTypeIndex) {
3737
return new Indexes(bootstrapMethodAttrIndex, nameAndTypeIndex);

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/Resolution.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.oracle.truffle.espresso.EspressoLanguage;
3232
import com.oracle.truffle.espresso.EspressoOptions;
3333
import com.oracle.truffle.espresso.classfile.ConstantPool.Tag;
34+
import com.oracle.truffle.espresso.classfile.JavaKind;
3435
import com.oracle.truffle.espresso.classfile.attributes.BootstrapMethodsAttribute;
3536
import com.oracle.truffle.espresso.classfile.constantpool.ClassConstant;
3637
import com.oracle.truffle.espresso.classfile.constantpool.ClassMethodRefConstant;
@@ -540,17 +541,18 @@ public static Resolvable.ResolvedConstant resolveInvokeDynamicConstant(InvokeDyn
540541
}
541542

542543
private static ResolvedDynamicConstant makeResolved(Klass type, StaticObject result) {
543-
switch (type.getJavaKind()) {
544+
JavaKind kind = type.getJavaKind();
545+
switch (kind) {
544546
case Boolean:
545547
case Byte:
546548
case Short:
547549
case Char: {
548-
int value = (int) MHLinkToNode.rebasic(type.getMeta().unboxGuest(result), type.getJavaKind());
549-
return new ResolvedIntDynamicConstant(value);
550+
int value = (int) MHLinkToNode.rebasic(type.getMeta().unboxGuest(result), kind);
551+
return new ResolvedIntDynamicConstant(value, kind);
550552
}
551553
case Int: {
552554
int value = type.getMeta().unboxInteger(result);
553-
return new ResolvedIntDynamicConstant(value);
555+
return new ResolvedIntDynamicConstant(value, JavaKind.Int);
554556
}
555557
case Float: {
556558
float value = type.getMeta().unboxFloat(result);

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedDoubleDynamicConstant.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.oracle.truffle.api.frame.VirtualFrame;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool;
27+
import com.oracle.truffle.espresso.classfile.JavaKind;
2728
import com.oracle.truffle.espresso.nodes.BytecodeNode;
2829
import com.oracle.truffle.espresso.nodes.EspressoFrame;
2930

@@ -44,6 +45,11 @@ public Object value() {
4445
return resolved;
4546
}
4647

48+
@Override
49+
public JavaKind getKind() {
50+
return JavaKind.Double;
51+
}
52+
4753
@Override
4854
public String toString(ConstantPool pool) {
4955
return "ResolvedDynamicConstant(" + resolved + ")";

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedDynamicConstant.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424

2525
import com.oracle.truffle.api.frame.VirtualFrame;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool;
27+
import com.oracle.truffle.espresso.classfile.JavaKind;
28+
import com.oracle.truffle.espresso.classfile.constantpool.DynamicConstant;
29+
import com.oracle.truffle.espresso.classfile.constantpool.NameAndTypeConstant;
30+
import com.oracle.truffle.espresso.classfile.constantpool.Resolvable;
2731
import com.oracle.truffle.espresso.classfile.descriptors.Symbol;
2832
import com.oracle.truffle.espresso.classfile.descriptors.Symbol.Type;
33+
import com.oracle.truffle.espresso.meta.EspressoError;
2934
import com.oracle.truffle.espresso.meta.Meta;
3035
import com.oracle.truffle.espresso.nodes.BytecodeNode;
31-
import com.oracle.truffle.espresso.meta.EspressoError;
32-
import com.oracle.truffle.espresso.classfile.constantpool.DynamicConstant;
33-
import com.oracle.truffle.espresso.classfile.constantpool.Resolvable;
3436
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
3537

3638
public interface ResolvedDynamicConstant extends DynamicConstant, Resolvable.ResolvedConstant {
@@ -41,6 +43,18 @@ default Symbol<Type> getTypeSymbol(ConstantPool pool) {
4143
throw EspressoError.shouldNotReachHere("Getting type symbol of a resolved dynamic constant");
4244
}
4345

46+
@Override
47+
default int getBootstrapMethodAttrIndex() {
48+
throw EspressoError.shouldNotReachHere("Getting bootstrap method index of a resolved dynamic constant");
49+
}
50+
51+
@Override
52+
default NameAndTypeConstant getNameAndType(ConstantPool pool) {
53+
throw EspressoError.shouldNotReachHere("Getting name and type of a resolved dynamic constant");
54+
}
55+
56+
JavaKind getKind();
57+
4458
default StaticObject guestBoxedValue(Meta meta) {
4559
Object value = value();
4660
if (value instanceof StaticObject) {

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedFailDynamicConstant.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.oracle.truffle.api.CompilerDirectives;
2626
import com.oracle.truffle.api.frame.VirtualFrame;
2727
import com.oracle.truffle.espresso.classfile.ConstantPool;
28+
import com.oracle.truffle.espresso.classfile.JavaKind;
2829
import com.oracle.truffle.espresso.nodes.BytecodeNode;
2930
import com.oracle.truffle.espresso.meta.EspressoError;
3031
import com.oracle.truffle.espresso.runtime.EspressoException;
@@ -53,6 +54,11 @@ public Object value() {
5354
throw EspressoError.shouldNotReachHere("Failure should have arose earlier.");
5455
}
5556

57+
@Override
58+
public JavaKind getKind() {
59+
return JavaKind.Illegal;
60+
}
61+
5662
@Override
5763
public String toString(ConstantPool pool) {
5864
return "ResolvedDynamicConstant(" + failure + ")";

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedFloatDynamicConstant.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.oracle.truffle.api.frame.VirtualFrame;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool;
27+
import com.oracle.truffle.espresso.classfile.JavaKind;
2728
import com.oracle.truffle.espresso.nodes.BytecodeNode;
2829
import com.oracle.truffle.espresso.nodes.EspressoFrame;
2930

@@ -44,6 +45,11 @@ public Object value() {
4445
return resolved;
4546
}
4647

48+
@Override
49+
public JavaKind getKind() {
50+
return JavaKind.Float;
51+
}
52+
4753
@Override
4854
public String toString(ConstantPool pool) {
4955
return "ResolvedDynamicConstant(" + resolved + ")";

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedIntDynamicConstant.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,20 @@
2424

2525
import com.oracle.truffle.api.frame.VirtualFrame;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool;
27+
import com.oracle.truffle.espresso.classfile.JavaKind;
28+
import com.oracle.truffle.espresso.meta.EspressoError;
29+
import com.oracle.truffle.espresso.meta.Meta;
2730
import com.oracle.truffle.espresso.nodes.BytecodeNode;
2831
import com.oracle.truffle.espresso.nodes.EspressoFrame;
32+
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
2933

3034
public final class ResolvedIntDynamicConstant implements ResolvedDynamicConstant {
3135
final int resolved;
36+
final JavaKind kind;
3237

33-
public ResolvedIntDynamicConstant(int resolved) {
38+
public ResolvedIntDynamicConstant(int resolved, JavaKind kind) {
3439
this.resolved = resolved;
40+
this.kind = kind;
3541
}
3642

3743
@Override
@@ -44,6 +50,25 @@ public Object value() {
4450
return resolved;
4551
}
4652

53+
@Override
54+
public JavaKind getKind() {
55+
return kind;
56+
}
57+
58+
@Override
59+
public StaticObject guestBoxedValue(Meta meta) {
60+
Object value = switch (kind) {
61+
case Boolean -> resolved != 0;
62+
case Byte -> (byte) resolved;
63+
case Short -> (short) resolved;
64+
case Char -> (char) resolved;
65+
case Int -> resolved;
66+
default ->
67+
throw EspressoError.shouldNotReachHere(kind.toString());
68+
};
69+
return Meta.box(meta, value);
70+
}
71+
4772
@Override
4873
public String toString(ConstantPool pool) {
4974
return "ResolvedDynamicConstant(" + resolved + ")";

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedLongDynamicConstant.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.oracle.truffle.api.frame.VirtualFrame;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool;
27+
import com.oracle.truffle.espresso.classfile.JavaKind;
2728
import com.oracle.truffle.espresso.nodes.BytecodeNode;
2829
import com.oracle.truffle.espresso.nodes.EspressoFrame;
2930

@@ -44,6 +45,11 @@ public Object value() {
4445
return resolved;
4546
}
4647

48+
@Override
49+
public JavaKind getKind() {
50+
return JavaKind.Long;
51+
}
52+
4753
@Override
4854
public String toString(ConstantPool pool) {
4955
return "ResolvedDynamicConstant(" + resolved + ")";

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedMethodHandleConstant.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424

2525
import com.oracle.truffle.espresso.classfile.ConstantPool;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool.Tag;
27+
import com.oracle.truffle.espresso.classfile.constantpool.MethodHandleConstant;
2728
import com.oracle.truffle.espresso.classfile.constantpool.Resolvable;
29+
import com.oracle.truffle.espresso.meta.EspressoError;
2830
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
2931
import com.oracle.truffle.espresso.substitutions.JavaType;
3032

3133
import java.lang.invoke.MethodHandle;
3234

33-
public final class ResolvedMethodHandleConstant implements Resolvable.ResolvedConstant {
35+
public final class ResolvedMethodHandleConstant implements MethodHandleConstant, Resolvable.ResolvedConstant {
3436
private final @JavaType(MethodHandle.class) StaticObject payload;
3537

3638
ResolvedMethodHandleConstant(StaticObject payload) {
@@ -46,6 +48,16 @@ public Tag tag() {
4648
return Tag.METHODHANDLE;
4749
}
4850

51+
@Override
52+
public int getRefKind() {
53+
throw EspressoError.shouldNotReachHere("Getting ref kind of a resolved method handle constant");
54+
}
55+
56+
@Override
57+
public char getRefIndex() {
58+
throw EspressoError.shouldNotReachHere("Getting ref index of a resolved method handle constant");
59+
}
60+
4961
@Override
5062
public String toString(ConstantPool pool) {
5163
return payload.toString();

espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/constantpool/ResolvedObjectDynamicConstant.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import com.oracle.truffle.api.frame.VirtualFrame;
2626
import com.oracle.truffle.espresso.classfile.ConstantPool;
27+
import com.oracle.truffle.espresso.classfile.JavaKind;
2728
import com.oracle.truffle.espresso.nodes.BytecodeNode;
2829
import com.oracle.truffle.espresso.nodes.EspressoFrame;
2930
import com.oracle.truffle.espresso.runtime.staticobject.StaticObject;
@@ -45,6 +46,11 @@ public Object value() {
4546
return resolved;
4647
}
4748

49+
@Override
50+
public JavaKind getKind() {
51+
return JavaKind.Object;
52+
}
53+
4854
@Override
4955
public String toString(ConstantPool pool) {
5056
return "ResolvedDynamicConstant(" + resolved + ")";

0 commit comments

Comments
 (0)