Skip to content

Commit b5f6509

Browse files
committed
Avoid eager initialization of InteropLibrary.
1 parent 46be11a commit b5f6509

File tree

2 files changed

+32
-37
lines changed

2 files changed

+32
-37
lines changed

truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/PolyglotContextImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,6 @@
127127
final class PolyglotContextImpl implements com.oracle.truffle.polyglot.PolyglotImpl.VMObject {
128128

129129
private static final TruffleLogger LOG = TruffleLogger.getLogger(PolyglotEngineImpl.OPTION_GROUP_ENGINE, PolyglotContextImpl.class);
130-
private static final InteropLibrary UNCACHED = InteropLibrary.getFactory().getUncached();
131130
private static final Object[] DISPOSED_CONTEXT_THREAD_LOCALS = new Object[0];
132131
private static final Map<State, State[]> VALID_TRANSITIONS = new EnumMap<>(State.class);
133132
private static final TruffleSafepoint.Interrupter DO_NOTHING_INTERRUPTER = new TruffleSafepoint.Interrupter() {
@@ -1930,7 +1929,7 @@ static void printResult(PolyglotLanguageContext languageContext, Object result)
19301929
}
19311930
String stringResult;
19321931
try {
1933-
stringResult = UNCACHED.asString(UNCACHED.toDisplayString(languageContext.getLanguageView(result), true));
1932+
stringResult = InteropLibrary.getUncached().asString(InteropLibrary.getUncached().toDisplayString(languageContext.getLanguageView(result), true));
19341933
} catch (UnsupportedMessageException e) {
19351934
throw shouldNotReachHere(e);
19361935
}

truffle/src/com.oracle.truffle.polyglot/src/com/oracle/truffle/polyglot/PolyglotValueDispatch.java

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,8 @@
162162
abstract class PolyglotValueDispatch extends AbstractValueDispatch {
163163

164164
private static final String TRUNCATION_SUFFIX = "...";
165-
166165
private static final String UNKNOWN = "Unknown";
167166

168-
static final InteropLibrary UNCACHED_INTEROP = InteropLibrary.getFactory().getUncached();
169-
170167
final PolyglotImpl impl;
171168
final PolyglotLanguageInstance languageInstance;
172169

@@ -746,7 +743,7 @@ public boolean asBoolean(Object languageContext, Object receiver) {
746743
}
747744

748745
private static boolean isNullUncached(Object receiver) {
749-
return InteropLibrary.getFactory().getUncached().isNull(receiver);
746+
return InteropLibrary.getUncached().isNull(receiver);
750747
}
751748

752749
protected static boolean asBooleanUnsupported(PolyglotLanguageContext context, Object receiver) {
@@ -1256,7 +1253,7 @@ static final RuntimeException getHashValuesIteratorUnsupported(PolyglotLanguageC
12561253
}
12571254

12581255
protected Object getMetaObjectImpl(PolyglotLanguageContext context, Object receiver) {
1259-
InteropLibrary lib = InteropLibrary.getFactory().getUncached(receiver);
1256+
InteropLibrary lib = InteropLibrary.getUncached(receiver);
12601257
if (lib.hasMetaObject(receiver)) {
12611258
try {
12621259
return asValue(impl, context, lib.getMetaObject(receiver));
@@ -1316,8 +1313,6 @@ protected static RuntimeException unsupported(PolyglotLanguageContext context, O
13161313

13171314
private static final int CHARACTER_LIMIT = 140;
13181315

1319-
private static final InteropLibrary INTEROP = InteropLibrary.getFactory().getUncached();
1320-
13211316
@TruffleBoundary
13221317
static String getValueInfo(Object languageContext, Object receiver) {
13231318
PolyglotContextImpl context = languageContext != null ? ((PolyglotLanguageContext) languageContext).context : null;
@@ -1344,12 +1339,12 @@ static String getValueInfo(PolyglotContextImpl context, Object receiver) {
13441339
String valueToString;
13451340
String metaObjectToString = UNKNOWN;
13461341
try {
1347-
InteropLibrary uncached = InteropLibrary.getFactory().getUncached(view);
1342+
InteropLibrary uncached = InteropLibrary.getUncached(view);
13481343
if (uncached.hasMetaObject(view)) {
1349-
Object qualifiedName = INTEROP.getMetaQualifiedName(uncached.getMetaObject(view));
1350-
metaObjectToString = truncateString(INTEROP.asString(qualifiedName), CHARACTER_LIMIT);
1344+
Object qualifiedName = InteropLibrary.getUncached().getMetaQualifiedName(uncached.getMetaObject(view));
1345+
metaObjectToString = truncateString(InteropLibrary.getUncached().asString(qualifiedName), CHARACTER_LIMIT);
13511346
}
1352-
valueToString = truncateString(INTEROP.asString(uncached.toDisplayString(view)), CHARACTER_LIMIT);
1347+
valueToString = truncateString(InteropLibrary.getUncached().asString(uncached.toDisplayString(view)), CHARACTER_LIMIT);
13531348
} catch (UnsupportedMessageException e) {
13541349
throw shouldNotReachHere(e);
13551350
}
@@ -1359,7 +1354,7 @@ static String getValueInfo(PolyglotContextImpl context, Object receiver) {
13591354
languageName = "Java"; // java is our host language for now
13601355

13611356
// hide meta objects of null
1362-
if (UNKNOWN.equals(metaObjectToString) && INTEROP.isNull(receiver)) {
1357+
if (UNKNOWN.equals(metaObjectToString) && InteropLibrary.getUncached().isNull(receiver)) {
13631358
hideType = true;
13641359
}
13651360
} else {
@@ -1596,7 +1591,7 @@ public Object getSourceLocation(Object languageContext, Object receiver) {
15961591
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
15971592
Object prev = hostEnter(context);
15981593
try {
1599-
InteropLibrary lib = InteropLibrary.getFactory().getUncached(receiver);
1594+
InteropLibrary lib = InteropLibrary.getUncached(receiver);
16001595
com.oracle.truffle.api.source.SourceSection result = null;
16011596
if (lib.hasSourceLocation(receiver)) {
16021597
try {
@@ -1710,7 +1705,8 @@ static PolyglotValueDispatch createHostNull(PolyglotImpl polyglot) {
17101705
static void createDefaultValues(PolyglotImpl polyglot, PolyglotLanguageInstance languageInstance, Map<Class<?>, PolyglotValueDispatch> valueCache) {
17111706
addDefaultValue(polyglot, languageInstance, valueCache, false);
17121707
addDefaultValue(polyglot, languageInstance, valueCache, "");
1713-
addDefaultValue(polyglot, languageInstance, valueCache, TruffleString.fromJavaStringUncached("", TruffleString.Encoding.UTF_16));
1708+
addDefaultValue(polyglot, languageInstance, valueCache, TruffleString.fromJavaStringUncached("",
1709+
TruffleString.Encoding.UTF_16));
17141710
addDefaultValue(polyglot, languageInstance, valueCache, 'a');
17151711
addDefaultValue(polyglot, languageInstance, valueCache, (byte) 0);
17161712
addDefaultValue(polyglot, languageInstance, valueCache, (short) 0);
@@ -1735,7 +1731,7 @@ private PrimitiveValue(PolyglotImpl impl, PolyglotLanguageInstance instance, Obj
17351731
* No caching needed for primitives. We do that to avoid the overhead of crossing a
17361732
* Truffle call boundary.
17371733
*/
1738-
this.interop = InteropLibrary.getFactory().getUncached(primitiveValue);
1734+
this.interop = InteropLibrary.getUncached(primitiveValue);
17391735
this.language = instance != null ? instance.language : null;
17401736
}
17411737

@@ -2703,7 +2699,7 @@ public boolean isNumber(Object languageContext, Object receiver) {
27032699
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
27042700
Object c = hostEnter(context);
27052701
try {
2706-
return UNCACHED_INTEROP.isNumber(receiver);
2702+
return InteropLibrary.getUncached().isNumber(receiver);
27072703
} catch (Throwable e) {
27082704
throw guestToHostException(context, e, true);
27092705
} finally {
@@ -2716,7 +2712,7 @@ public boolean fitsInByte(Object languageContext, Object receiver) {
27162712
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
27172713
Object c = hostEnter(context);
27182714
try {
2719-
return UNCACHED_INTEROP.fitsInByte(receiver);
2715+
return InteropLibrary.getUncached().fitsInByte(receiver);
27202716
} catch (Throwable e) {
27212717
throw guestToHostException(context, e, true);
27222718
} finally {
@@ -2730,7 +2726,7 @@ public byte asByte(Object languageContext, Object receiver) {
27302726
Object c = hostEnter(context);
27312727
try {
27322728
try {
2733-
return UNCACHED_INTEROP.asByte(receiver);
2729+
return InteropLibrary.getUncached().asByte(receiver);
27342730
} catch (UnsupportedMessageException e) {
27352731
return asByteUnsupported(context, receiver);
27362732
}
@@ -2746,7 +2742,7 @@ public boolean isString(Object languageContext, Object receiver) {
27462742
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
27472743
Object c = hostEnter(context);
27482744
try {
2749-
return UNCACHED_INTEROP.isString(receiver);
2745+
return InteropLibrary.getUncached().isString(receiver);
27502746
} catch (Throwable e) {
27512747
throw guestToHostException(context, e, true);
27522748
} finally {
@@ -2763,7 +2759,7 @@ public String asString(Object languageContext, Object receiver) {
27632759
if (isNullUncached(receiver)) {
27642760
return null;
27652761
}
2766-
return UNCACHED_INTEROP.asString(receiver);
2762+
return InteropLibrary.getUncached().asString(receiver);
27672763
} catch (UnsupportedMessageException e) {
27682764
return asStringUnsupported(context, receiver);
27692765
}
@@ -2783,7 +2779,7 @@ public byte[] asStringBytes(Object languageContext, Object receiver, int encodin
27832779
if (isNullUncached(receiver)) {
27842780
return null;
27852781
}
2786-
TruffleString s = UNCACHED_INTEROP.asTruffleString(receiver);
2782+
TruffleString s = InteropLibrary.getUncached().asTruffleString(receiver);
27872783
TruffleString.Encoding e = PolyglotImpl.mapStringEncoding(encoding);
27882784
return s.switchEncodingUncached(e).copyToByteArrayUncached(e);
27892785
} catch (UnsupportedMessageException e) {
@@ -2801,7 +2797,7 @@ public boolean fitsInInt(Object languageContext, Object receiver) {
28012797
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
28022798
Object c = hostEnter(context);
28032799
try {
2804-
return UNCACHED_INTEROP.fitsInInt(receiver);
2800+
return InteropLibrary.getUncached().fitsInInt(receiver);
28052801
} catch (Throwable e) {
28062802
throw guestToHostException(context, e, true);
28072803
} finally {
@@ -2815,7 +2811,7 @@ public int asInt(Object languageContext, Object receiver) {
28152811
Object c = hostEnter(context);
28162812
try {
28172813
try {
2818-
return UNCACHED_INTEROP.asInt(receiver);
2814+
return InteropLibrary.getUncached().asInt(receiver);
28192815
} catch (UnsupportedMessageException e) {
28202816
return asIntUnsupported(context, receiver);
28212817
}
@@ -2831,7 +2827,7 @@ public boolean isBoolean(Object languageContext, Object receiver) {
28312827
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
28322828
Object c = hostEnter(context);
28332829
try {
2834-
return InteropLibrary.getFactory().getUncached().isBoolean(receiver);
2830+
return InteropLibrary.getUncached().isBoolean(receiver);
28352831
} catch (Throwable e) {
28362832
throw guestToHostException(context, e, true);
28372833
} finally {
@@ -2845,7 +2841,7 @@ public boolean asBoolean(Object languageContext, Object receiver) {
28452841
Object c = hostEnter(context);
28462842
try {
28472843
try {
2848-
return InteropLibrary.getFactory().getUncached().asBoolean(receiver);
2844+
return InteropLibrary.getUncached().asBoolean(receiver);
28492845
} catch (UnsupportedMessageException e) {
28502846
return asBooleanUnsupported(context, receiver);
28512847
}
@@ -2861,7 +2857,7 @@ public boolean fitsInFloat(Object languageContext, Object receiver) {
28612857
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
28622858
Object c = hostEnter(context);
28632859
try {
2864-
return InteropLibrary.getFactory().getUncached().fitsInFloat(receiver);
2860+
return InteropLibrary.getUncached().fitsInFloat(receiver);
28652861
} catch (Throwable e) {
28662862
throw guestToHostException(context, e, true);
28672863
} finally {
@@ -2875,7 +2871,7 @@ public float asFloat(Object languageContext, Object receiver) {
28752871
Object c = hostEnter(context);
28762872
try {
28772873
try {
2878-
return UNCACHED_INTEROP.asFloat(receiver);
2874+
return InteropLibrary.getUncached().asFloat(receiver);
28792875
} catch (UnsupportedMessageException e) {
28802876
return asFloatUnsupported(context, receiver);
28812877
}
@@ -2891,7 +2887,7 @@ public boolean fitsInDouble(Object languageContext, Object receiver) {
28912887
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
28922888
Object c = hostEnter(context);
28932889
try {
2894-
return UNCACHED_INTEROP.fitsInDouble(receiver);
2890+
return InteropLibrary.getUncached().fitsInDouble(receiver);
28952891
} catch (Throwable e) {
28962892
throw guestToHostException(context, e, true);
28972893
} finally {
@@ -2905,7 +2901,7 @@ public double asDouble(Object languageContext, Object receiver) {
29052901
Object c = hostEnter(context);
29062902
try {
29072903
try {
2908-
return UNCACHED_INTEROP.asDouble(receiver);
2904+
return InteropLibrary.getUncached().asDouble(receiver);
29092905
} catch (UnsupportedMessageException e) {
29102906
return asDoubleUnsupported(context, receiver);
29112907
}
@@ -2921,7 +2917,7 @@ public boolean fitsInLong(Object languageContext, Object receiver) {
29212917
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
29222918
Object c = hostEnter(context);
29232919
try {
2924-
return UNCACHED_INTEROP.fitsInLong(receiver);
2920+
return InteropLibrary.getUncached().fitsInLong(receiver);
29252921
} catch (Throwable e) {
29262922
throw guestToHostException(context, e, true);
29272923
} finally {
@@ -2935,7 +2931,7 @@ public long asLong(Object languageContext, Object receiver) {
29352931
Object c = hostEnter(context);
29362932
try {
29372933
try {
2938-
return UNCACHED_INTEROP.asLong(receiver);
2934+
return InteropLibrary.getUncached().asLong(receiver);
29392935
} catch (UnsupportedMessageException e) {
29402936
return asLongUnsupported(context, receiver);
29412937
}
@@ -2951,7 +2947,7 @@ public boolean fitsInBigInteger(Object languageContext, Object receiver) {
29512947
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
29522948
Object c = hostEnter(context);
29532949
try {
2954-
return UNCACHED_INTEROP.fitsInBigInteger(receiver);
2950+
return InteropLibrary.getUncached().fitsInBigInteger(receiver);
29552951
} catch (Throwable e) {
29562952
throw guestToHostException(context, e, true);
29572953
} finally {
@@ -2965,7 +2961,7 @@ public BigInteger asBigInteger(Object languageContext, Object receiver) {
29652961
Object c = hostEnter(context);
29662962
try {
29672963
try {
2968-
return UNCACHED_INTEROP.asBigInteger(receiver);
2964+
return InteropLibrary.getUncached().asBigInteger(receiver);
29692965
} catch (UnsupportedMessageException e) {
29702966
return asBigIntegerUnsupported(context, receiver);
29712967
}
@@ -2981,7 +2977,7 @@ public boolean fitsInShort(Object languageContext, Object receiver) {
29812977
PolyglotLanguageContext context = (PolyglotLanguageContext) languageContext;
29822978
Object c = hostEnter(context);
29832979
try {
2984-
return UNCACHED_INTEROP.fitsInShort(receiver);
2980+
return InteropLibrary.getUncached().fitsInShort(receiver);
29852981
} catch (Throwable e) {
29862982
throw guestToHostException(context, e, true);
29872983
} finally {
@@ -2995,7 +2991,7 @@ public short asShort(Object languageContext, Object receiver) {
29952991
Object c = hostEnter(context);
29962992
try {
29972993
try {
2998-
return UNCACHED_INTEROP.asShort(receiver);
2994+
return InteropLibrary.getUncached().asShort(receiver);
29992995
} catch (UnsupportedMessageException e) {
30002996
return asShortUnsupported(context, receiver);
30012997
}

0 commit comments

Comments
 (0)