1313import com .oracle .truffle .api .dsl .CreateCast ;
1414import com .oracle .truffle .api .dsl .NodeChild ;
1515import com .oracle .truffle .api .dsl .Specialization ;
16+ import com .oracle .truffle .api .frame .VirtualFrame ;
1617import com .oracle .truffle .api .source .SourceSection ;
1718import com .oracle .truffle .api .utilities .ConditionProfile ;
1819import org .jcodings .Encoding ;
2324import org .jcodings .util .Hash ;
2425import org .jruby .runtime .encoding .EncodingService ;
2526import org .jruby .truffle .nodes .RubyNode ;
27+ import org .jruby .truffle .nodes .coerce .ToStrNode ;
2628import org .jruby .truffle .nodes .coerce .ToStrNodeFactory ;
2729import org .jruby .truffle .runtime .RubyContext ;
2830import 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