Skip to content

Commit 734bfdb

Browse files
committed
Implement context function ctx_Number_Check
1 parent 492d04f commit 734bfdb

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContext.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyGetAttr;
8686
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyGetItem;
8787
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyHasAttr;
88+
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyIsNumber;
8889
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyIsTrue;
8990
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyListAppend;
9091
import com.oracle.graal.python.builtins.objects.cext.hpy.GraalHPyContextFunctions.GraalHPyListNew;
@@ -246,7 +247,8 @@ enum HPyContextMembers {
246247
CTX_BYTES("ctx_Bytes"),
247248
CTX_RICHCOMPARE("ctx_RichCompare"),
248249
CTX_RICHCOMPAREBOOL("ctx_RichCompareBool"),
249-
CTX_HASH("ctx_Hash");
250+
CTX_HASH("ctx_Hash"),
251+
CTX_NUMBER_CHECK("ctx_Number_Check");
250252

251253
private final String name;
252254

@@ -534,6 +536,7 @@ private static Object[] createMembers(PythonContext context) {
534536
members[HPyContextMembers.CTX_RICHCOMPARE.ordinal()] = new GraalHPyRichcompare(false);
535537
members[HPyContextMembers.CTX_RICHCOMPAREBOOL.ordinal()] = new GraalHPyRichcompare(true);
536538
members[HPyContextMembers.CTX_HASH.ordinal()] = new GraalHPyCallBuiltinFunction(BuiltinNames.HASH, 1, GraalHPyConversionNodeSupplier.TO_INT64);
539+
members[HPyContextMembers.CTX_NUMBER_CHECK.ordinal()] = new GraalHPyIsNumber();
537540
return members;
538541
}
539542

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContextFunctions.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1588,4 +1588,28 @@ Object execute(Object[] arguments,
15881588
}
15891589
}
15901590
}
1591+
1592+
@ExportLibrary(InteropLibrary.class)
1593+
public static final class GraalHPyIsNumber extends GraalHPyContextFunction {
1594+
1595+
@ExportMessage
1596+
Object execute(Object[] arguments,
1597+
@Cached HPyAsContextNode asContextNode,
1598+
@Cached HPyAsPythonObjectNode asPythonObjectNode,
1599+
@CachedLibrary(limit = "1") PythonObjectLibrary lib,
1600+
@Cached HPyTransformExceptionToNativeNode transformExceptionToNativeNode) throws ArityException {
1601+
if (arguments.length != 2) {
1602+
CompilerDirectives.transferToInterpreterAndInvalidate();
1603+
throw ArityException.create(2, arguments.length);
1604+
}
1605+
GraalHPyContext nativeContext = asContextNode.execute(arguments[0]);
1606+
Object receiver = asPythonObjectNode.execute(nativeContext, arguments[1]);
1607+
try {
1608+
return lib.canBePInt(receiver) || lib.canBeJavaDouble(receiver);
1609+
} catch (PException e) {
1610+
transformExceptionToNativeNode.execute(nativeContext, e);
1611+
return nativeContext.getNullHandle();
1612+
}
1613+
}
1614+
}
15911615
}

0 commit comments

Comments
 (0)