Skip to content

Commit 1db8670

Browse files
committed
Convert FromJavaStringNode to DSL inlinable
1 parent a1466ae commit 1db8670

File tree

5 files changed

+29
-16
lines changed

5 files changed

+29
-16
lines changed

src/main/java/org/truffleruby/core/TruffleSystemNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ protected static Object javaGetEnv(Object name,
116116
if (nullValueProfile.profile(node, value == null)) {
117117
return nil;
118118
} else {
119-
return fromJavaStringNode.executeFromJavaString(value);
119+
return fromJavaStringNode.executeFromJavaString(node, value);
120120
}
121121
}
122122

src/main/java/org/truffleruby/debug/TruffleDebugNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1396,7 +1396,7 @@ public abstract static class PrimitiveNamesNode extends CoreMethodArrayArguments
13961396
@Specialization
13971397
protected RubyArray primitiveNames() {
13981398
var primitiveNames = getLanguage().primitiveManager.getPrimitiveNames().stream()
1399-
.map(name -> FromJavaStringNodeGen.getUncached().executeFromJavaString(name));
1399+
.map(name -> FromJavaStringNodeGen.getUncached().executeFromJavaString(this, name));
14001400

14011401
return createArray(primitiveNames.toArray());
14021402
}

src/main/java/org/truffleruby/interop/FromJavaStringNode.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package org.truffleruby.interop;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
14+
import com.oracle.truffle.api.nodes.Node;
1215
import com.oracle.truffle.api.strings.TruffleString;
1316
import org.truffleruby.core.encoding.Encodings;
1417
import org.truffleruby.core.string.RubyString;
@@ -19,34 +22,37 @@
1922
import com.oracle.truffle.api.dsl.GenerateUncached;
2023
import com.oracle.truffle.api.dsl.Specialization;
2124

25+
@GenerateInline
26+
@GenerateCached(false)
2227
@GenerateUncached
2328
public abstract class FromJavaStringNode extends RubyBaseNode {
2429

25-
public abstract RubyString executeFromJavaString(String value);
30+
public abstract RubyString executeFromJavaString(Node node, String value);
2631

2732
@Specialization(guards = "stringsEquals(cachedValue, value)", limit = "getLimit()")
28-
protected RubyString doCached(String value,
33+
protected static RubyString doCached(Node node, String value,
2934
@Cached("value") String cachedValue,
30-
@Shared @Cached TruffleString.FromJavaStringNode tstringFromJavaStringNode,
35+
@Cached(inline = false) @Shared TruffleString.FromJavaStringNode tstringFromJavaStringNode,
3136
@Cached("getTString(cachedValue, tstringFromJavaStringNode)") TruffleString cachedTString) {
32-
var rubyString = createString(cachedTString, Encodings.UTF_8);
37+
var rubyString = createString(node, cachedTString, Encodings.UTF_8);
3338
rubyString.freeze();
3439
return rubyString;
3540
}
3641

3742
@Specialization(replaces = "doCached")
38-
protected RubyString doGeneric(String value,
39-
@Shared @Cached TruffleString.FromJavaStringNode tstringFromJavaStringNode) {
40-
var rubyString = createString(tstringFromJavaStringNode, value, Encodings.UTF_8);
43+
protected static RubyString doGeneric(Node node, String value,
44+
@Cached(inline = false) @Shared TruffleString.FromJavaStringNode tstringFromJavaStringNode) {
45+
var rubyString = createString(node, tstringFromJavaStringNode, value, Encodings.UTF_8);
4146
rubyString.freeze();
4247
return rubyString;
4348
}
4449

45-
protected boolean stringsEquals(String a, String b) {
50+
protected static boolean stringsEquals(String a, String b) {
4651
return a.equals(b);
4752
}
4853

49-
protected TruffleString getTString(String value, TruffleString.FromJavaStringNode tstringFromJavaStringNode) {
54+
protected static TruffleString getTString(String value,
55+
TruffleString.FromJavaStringNode tstringFromJavaStringNode) {
5056
return tstringFromJavaStringNode.execute(value, TruffleString.Encoding.UTF_8);
5157
}
5258

src/main/java/org/truffleruby/interop/InteropNodes.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,9 +1669,10 @@ protected boolean hasLanguage(Object receiver,
16691669
public abstract static class GetLanguageNode extends CoreMethodArrayArgumentsNode {
16701670

16711671
@Specialization(limit = "getInteropCacheLimit()")
1672-
protected Object getLanguage(Object receiver,
1672+
protected static Object getLanguage(Object receiver,
16731673
@CachedLibrary("receiver") InteropLibrary receivers,
1674-
@Cached FromJavaStringNode fromJavaStringNode) {
1674+
@Cached FromJavaStringNode fromJavaStringNode,
1675+
@Bind("this") Node node) {
16751676
if (!receivers.hasLanguage(receiver)) {
16761677
return nil;
16771678
}
@@ -1684,11 +1685,11 @@ protected Object getLanguage(Object receiver,
16841685
}
16851686

16861687
final String name = languageClassToLanguageName(language);
1687-
return fromJavaStringNode.executeFromJavaString(name);
1688+
return fromJavaStringNode.executeFromJavaString(node, name);
16881689
}
16891690

16901691
@TruffleBoundary
1691-
private String languageClassToLanguageName(Class<? extends TruffleLanguage<?>> language) {
1692+
private static String languageClassToLanguageName(Class<? extends TruffleLanguage<?>> language) {
16921693
String name = language.getSimpleName();
16931694
if (name.endsWith("Language")) {
16941695
name = name.substring(0, name.length() - "Language".length());

src/main/java/org/truffleruby/language/RubyBaseNode.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,14 @@ protected final RubyString createString(TruffleString.FromByteArrayNode fromByte
278278

279279
public final RubyString createString(TruffleString.FromJavaStringNode fromJavaStringNode, String javaString,
280280
RubyEncoding encoding) {
281+
return createString(this, fromJavaStringNode, javaString, encoding);
282+
}
283+
284+
public static RubyString createString(Node node, TruffleString.FromJavaStringNode fromJavaStringNode,
285+
String javaString,
286+
RubyEncoding encoding) {
281287
var tstring = fromJavaStringNode.execute(javaString, encoding.tencoding);
282-
return createString(tstring, encoding);
288+
return createString(node, tstring, encoding);
283289
}
284290

285291
protected final RubyString createSubString(TruffleString.SubstringByteIndexNode substringNode,

0 commit comments

Comments
 (0)