Skip to content

Commit aa408c8

Browse files
committed
Move string interning to a primitive.
1 parent 47d02ba commit aa408c8

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

src/main/java/org/truffleruby/core/string/StringNodes.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@
125125
import org.truffleruby.core.rope.RopeBuilder;
126126
import org.truffleruby.core.rope.RopeConstants;
127127
import org.truffleruby.core.rope.RopeGuards;
128+
import org.truffleruby.core.rope.RopeKey;
128129
import org.truffleruby.core.rope.RopeNodes;
129130
import org.truffleruby.core.rope.RopeNodes.RepeatNode;
130131
import org.truffleruby.core.rope.RopeOperations;
@@ -4712,4 +4713,13 @@ protected Object emptyString(DynamicObject string) {
47124713

47134714
}
47144715

4716+
@Primitive(name = "string_intern", needsSelf = false)
4717+
public abstract static class InternNode extends PrimitiveArrayArgumentsNode {
4718+
4719+
@Specialization
4720+
public DynamicObject internString(DynamicObject string) {
4721+
return getContext().getInternedStringCache().addInCacheIfAbsent(new RopeKey(Layouts.STRING.getRope(string), getContext().getHashing(this)), string);
4722+
}
4723+
}
4724+
47154725
}

src/main/java/org/truffleruby/core/string/TruffleStringNodes.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,10 @@
1313
import com.oracle.truffle.api.dsl.Cached;
1414
import com.oracle.truffle.api.dsl.Specialization;
1515
import com.oracle.truffle.api.object.DynamicObject;
16-
import org.truffleruby.Layouts;
1716
import org.truffleruby.builtins.CoreClass;
1817
import org.truffleruby.builtins.CoreMethod;
1918
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
2019
import org.truffleruby.core.rope.Rope;
21-
import org.truffleruby.core.rope.RopeKey;
2220
import org.truffleruby.core.rope.RopeNodes;
2321
import org.truffleruby.language.RubyGuards;
2422
import org.truffleruby.language.control.RaiseException;
@@ -72,12 +70,4 @@ private String formatTooLongError(int count, final Rope rope) {
7270

7371
}
7472

75-
@CoreMethod(names = "intern_string", onSingleton = true, required = 1)
76-
public abstract static class InternNode extends CoreMethodArrayArgumentsNode {
77-
78-
@Specialization
79-
public DynamicObject internString(DynamicObject string) {
80-
return getContext().getInternedStringCache().addInCacheIfAbsent(new RopeKey(Layouts.STRING.getRope(string), getContext().getHashing(this)), string);
81-
}
82-
}
8373
}

src/main/ruby/core/string.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1591,7 +1591,7 @@ def +@
15911591

15921592
def -@
15931593
str = frozen? ? self : dup.freeze
1594-
Truffle::StringOperations.intern_string(str)
1594+
Truffle.invoke_primitive(:string_intern, str)
15951595
end
15961596

15971597
def encoding

0 commit comments

Comments
 (0)