Skip to content

Commit 53665ec

Browse files
committed
[Truffle] All Encoding.{default_interal, default_internal=} specs now pass.
1 parent 0a7f712 commit 53665ec

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

spec/truffle/tags/core/encoding/default_internal_tags.txt

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

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

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.oracle.truffle.api.dsl.CreateCast;
1414
import com.oracle.truffle.api.dsl.NodeChild;
1515
import com.oracle.truffle.api.dsl.Specialization;
16+
import com.oracle.truffle.api.frame.VirtualFrame;
1617
import com.oracle.truffle.api.source.SourceSection;
1718
import com.oracle.truffle.api.utilities.ConditionProfile;
1819
import org.jcodings.Encoding;
@@ -23,6 +24,7 @@
2324
import org.jcodings.util.Hash;
2425
import org.jruby.runtime.encoding.EncodingService;
2526
import org.jruby.truffle.nodes.RubyNode;
27+
import org.jruby.truffle.nodes.coerce.ToStrNode;
2628
import org.jruby.truffle.nodes.coerce.ToStrNodeFactory;
2729
import org.jruby.truffle.runtime.RubyContext;
2830
import org.jruby.truffle.runtime.core.RubyArray;
@@ -199,6 +201,8 @@ public RubyEncoding defaultExternal(RubyEncoding encoding) {
199201
@CoreMethod(names = "default_internal=", onSingleton = true, required = 1)
200202
public abstract static class SetDefaultInternalNode extends CoreMethodNode {
201203

204+
@Child private ToStrNode toStrNode;
205+
202206
public SetDefaultInternalNode(RubyContext context, SourceSection sourceSection) {
203207
super(context, sourceSection);
204208
}
@@ -208,7 +212,7 @@ public SetDefaultInternalNode(SetDefaultInternalNode prev) {
208212
}
209213

210214
@Specialization
211-
public RubyEncoding defaultExternal(RubyEncoding encoding) {
215+
public RubyEncoding defaultInternal(RubyEncoding encoding) {
212216
notDesignedForCompilation();
213217

214218
getContext().getRuntime().setDefaultInternalEncoding(encoding.getEncoding());
@@ -217,14 +221,29 @@ public RubyEncoding defaultExternal(RubyEncoding encoding) {
217221
}
218222

219223
@Specialization
220-
public RubyNilClass defaultExternal(RubyNilClass encoding) {
224+
public RubyNilClass defaultInternal(RubyNilClass encoding) {
221225
notDesignedForCompilation();
222226

223-
getContext().getRuntime().setDefaultInternalEncoding(ASCIIEncoding.INSTANCE);
227+
getContext().getRuntime().setDefaultInternalEncoding(null);
224228

225229
return encoding;
226230
}
227231

232+
@Specialization
233+
public RubyString defaultInternal(VirtualFrame frame, Object encoding) {
234+
notDesignedForCompilation();
235+
236+
if (toStrNode == null) {
237+
CompilerDirectives.transferToInterpreter();
238+
toStrNode = insert(ToStrNodeFactory.create(getContext(), getSourceSection(), null));
239+
}
240+
241+
final RubyString encodingName = toStrNode.executeRubyString(frame, encoding);
242+
getContext().getRuntime().setDefaultInternalEncoding(RubyEncoding.getEncoding(encodingName.toString()).getEncoding());
243+
244+
return encodingName;
245+
}
246+
228247
}
229248

230249
@CoreMethod(names = "find", onSingleton = true, required = 1)

0 commit comments

Comments
 (0)