Skip to content

Commit 84562e1

Browse files
committed
[Truffle] Completed String#force_encoding.
1 parent d390326 commit 84562e1

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

spec/truffle/tags/core/string/force_encoding_tags.txt

Lines changed: 0 additions & 2 deletions
This file was deleted.

truffle/src/main/java/org/jruby/truffle/nodes/core/StringNodes.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,12 +1191,15 @@ public boolean endWith(RubyString string, RubyString b) {
11911191
@CoreMethod(names = "force_encoding", required = 1)
11921192
public abstract static class ForceEncodingNode extends CoreMethodNode {
11931193

1194+
@Child private ToStrNode toStrNode;
1195+
11941196
public ForceEncodingNode(RubyContext context, SourceSection sourceSection) {
11951197
super(context, sourceSection);
11961198
}
11971199

11981200
public ForceEncodingNode(ForceEncodingNode prev) {
11991201
super(prev);
1202+
toStrNode = prev.toStrNode;
12001203
}
12011204

12021205
@TruffleBoundary
@@ -1212,6 +1215,16 @@ public RubyString forceEncoding(RubyString string, RubyEncoding encoding) {
12121215
return string;
12131216
}
12141217

1218+
@Specialization(guards = { "!isRubyString(arguments[1])", "!isRubyEncoding(arguments[1])" })
1219+
public RubyString forceEncoding(VirtualFrame frame, RubyString string, Object encoding) {
1220+
if (toStrNode == null) {
1221+
CompilerDirectives.transferToInterpreter();
1222+
toStrNode = insert(ToStrNodeFactory.create(getContext(), getSourceSection(), null));
1223+
}
1224+
1225+
return forceEncoding(string, toStrNode.executeRubyString(frame, encoding));
1226+
}
1227+
12151228
}
12161229

12171230
@CoreMethod(names = "getbyte", required = 1)

0 commit comments

Comments
 (0)