Skip to content

Commit c5200a2

Browse files
committed
improve footprint in NameToJavaStringNode
1 parent 7a5006e commit c5200a2

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/main/java/org/truffleruby/core/cast/NameToJavaStringNode.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package org.truffleruby.core.cast;
1111

12+
import com.oracle.truffle.api.CompilerDirectives;
1213
import com.oracle.truffle.api.dsl.Cached;
1314
import com.oracle.truffle.api.dsl.ImportStatic;
1415
import com.oracle.truffle.api.dsl.NodeChild;
@@ -33,21 +34,29 @@
3334
@NodeChild(value = "value", type = RubyNode.class)
3435
public abstract class NameToJavaStringNode extends RubyNode {
3536

37+
@Child private ToJavaStringNode toJavaStringNode;
38+
3639
public static NameToJavaStringNode create() {
3740
return NameToJavaStringNodeGen.create(null);
3841
}
3942

4043
public abstract String executeToJavaString(Object name);
4144

4245
@Specialization(guards = "isRubyString(value)")
43-
public String stringNameToJavaString(DynamicObject value,
44-
@Cached("create()") ToJavaStringNode toJavaStringNode) {
45-
return toJavaStringNode.executeToJavaString(value);
46+
public String stringNameToJavaString(DynamicObject value) {
47+
return executeToJavaString(value);
4648
}
4749

4850
@Specialization(guards = "isRubySymbol(value)")
49-
public String symbolNameToJavaString(DynamicObject value,
50-
@Cached("create()") ToJavaStringNode toJavaStringNode) {
51+
public String symbolNameToJavaString(DynamicObject value) {
52+
return executeToJavaString(value);
53+
}
54+
55+
private String executeToJavaString(DynamicObject value) {
56+
if (toJavaStringNode == null) {
57+
CompilerDirectives.transferToInterpreterAndInvalidate();
58+
toJavaStringNode = insert(ToJavaStringNode.create());
59+
}
5160
return toJavaStringNode.executeToJavaString(value);
5261
}
5362

0 commit comments

Comments
 (0)