Skip to content

Commit a5a6186

Browse files
committed
[GR-44200] Add Truffle::Interop#fits_in_big_integer? and #as_big_integer
1 parent c7a7788 commit a5a6186

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/main/java/org/truffleruby/interop/InteropNodes.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.truffleruby.core.array.library.ArrayStoreLibrary;
3737
import org.truffleruby.core.encoding.Encodings;
3838
import org.truffleruby.core.encoding.RubyEncoding;
39+
import org.truffleruby.core.numeric.FixnumOrBignumNode;
3940
import org.truffleruby.core.string.RubyString;
4041
import org.truffleruby.core.string.StringHelperNodes;
4142
import org.truffleruby.core.string.StringOperations;
@@ -1051,6 +1052,15 @@ protected boolean fits(Object receiver,
10511052
}
10521053
}
10531054

1055+
@CoreMethod(names = "fits_in_big_integer?", onSingleton = true, required = 1)
1056+
public abstract static class FitsInBigIntegerNode extends CoreMethodArrayArgumentsNode {
1057+
@Specialization(limit = "getInteropCacheLimit()")
1058+
protected boolean fits(Object receiver,
1059+
@CachedLibrary("receiver") InteropLibrary receivers) {
1060+
return receivers.fitsInBigInteger(receiver);
1061+
}
1062+
}
1063+
10541064
@CoreMethod(names = "fits_in_float?", onSingleton = true, required = 1)
10551065
public abstract static class FitsInFloatNode extends CoreMethodArrayArgumentsNode {
10561066
@Specialization(limit = "getInteropCacheLimit()")
@@ -1125,6 +1135,21 @@ protected long as(Object receiver,
11251135
}
11261136
}
11271137

1138+
@CoreMethod(names = "as_big_integer", onSingleton = true, required = 1)
1139+
public abstract static class AsBigIntegerNode extends CoreMethodArrayArgumentsNode {
1140+
@Specialization(limit = "getInteropCacheLimit()")
1141+
protected Object as(Object receiver,
1142+
@CachedLibrary("receiver") InteropLibrary receivers,
1143+
@Cached FixnumOrBignumNode fixnumOrBignumNode,
1144+
@Cached TranslateInteropExceptionNode translateInteropException) {
1145+
try {
1146+
return fixnumOrBignumNode.fixnumOrBignum(receivers.asBigInteger(receiver));
1147+
} catch (InteropException e) {
1148+
throw translateInteropException.execute(e);
1149+
}
1150+
}
1151+
}
1152+
11281153
@CoreMethod(names = "as_float", onSingleton = true, required = 1)
11291154
public abstract static class AsFloatNode extends CoreMethodArrayArgumentsNode {
11301155
@Specialization(limit = "getInteropCacheLimit()")

0 commit comments

Comments
 (0)