Skip to content

Commit 0a7f712

Browse files
committed
[Truffle] Handle String coercion in Encoding.find.
1 parent a005832 commit 0a7f712

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
fails:Encoding.find returns the corresponding Encoding object if given a valid alias name
22
fails:Encoding.find returns the passed Encoding object
3-
fails:Encoding.find accepts any object as encoding name, if it responds to #to_str
43
fails:Encoding.find raises an ArgumentError if the given encoding does not exist
54
fails:Encoding.find supports the 'locale' encoding alias
65
fails:Encoding.find returns default external encoding for the 'external' encoding alias

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
package org.jruby.truffle.nodes.core;
1111

1212
import com.oracle.truffle.api.CompilerDirectives;
13+
import com.oracle.truffle.api.dsl.CreateCast;
14+
import com.oracle.truffle.api.dsl.NodeChild;
1315
import com.oracle.truffle.api.dsl.Specialization;
1416
import com.oracle.truffle.api.source.SourceSection;
1517
import com.oracle.truffle.api.utilities.ConditionProfile;
@@ -20,6 +22,8 @@
2022
import org.jcodings.util.CaseInsensitiveBytesHash;
2123
import org.jcodings.util.Hash;
2224
import org.jruby.runtime.encoding.EncodingService;
25+
import org.jruby.truffle.nodes.RubyNode;
26+
import org.jruby.truffle.nodes.coerce.ToStrNodeFactory;
2327
import org.jruby.truffle.runtime.RubyContext;
2428
import org.jruby.truffle.runtime.core.RubyArray;
2529
import org.jruby.truffle.runtime.core.RubyEncoding;
@@ -224,7 +228,8 @@ public RubyNilClass defaultExternal(RubyNilClass encoding) {
224228
}
225229

226230
@CoreMethod(names = "find", onSingleton = true, required = 1)
227-
public abstract static class FindNode extends CoreMethodNode {
231+
@NodeChild(value = "name")
232+
public abstract static class FindNode extends RubyNode {
228233

229234
public FindNode(RubyContext context, SourceSection sourceSection) {
230235
super(context, sourceSection);
@@ -234,6 +239,10 @@ public FindNode(FindNode prev) {
234239
super(prev);
235240
}
236241

242+
@CreateCast("name") public RubyNode coerceNameToString(RubyNode name) {
243+
return ToStrNodeFactory.create(getContext(), getSourceSection(), name);
244+
}
245+
237246
@Specialization
238247
public RubyEncoding find(RubyString name) {
239248
notDesignedForCompilation();

0 commit comments

Comments
 (0)