File tree Expand file tree Collapse file tree 2 files changed +15
-6
lines changed
com.oracle.graal.python.test/src/tests/cpyext
com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats Expand file tree Collapse file tree 2 files changed +15
-6
lines changed Original file line number Diff line number Diff line change @@ -326,13 +326,13 @@ def test_float_subclass(self):
326326 TestFloatSubclass = CPyExtType ("TestFloatSubclass" ,
327327 """
328328 static PyTypeObject* testFloatSubclassPtr = NULL;
329-
329+
330330 static PyObject* new_fp(double val) {
331331 PyFloatObject* fp = PyObject_New(PyFloatObject, testFloatSubclassPtr);
332332 fp->ob_fval = val;
333333 return (PyObject*)fp;
334334 }
335-
335+
336336 static PyObject* fp_tpnew(PyTypeObject* type, PyObject* args, PyObject* kwargs) {
337337 double dval = 0.0;
338338 Py_XINCREF(args);
@@ -341,7 +341,7 @@ def test_float_subclass(self):
341341 }}
342342 return new_fp(dval);
343343 }
344-
344+
345345 static PyObject* fp_add(PyObject* l, PyObject* r) {
346346 if (PyFloat_Check(l)) {
347347 if (PyFloat_Check(r)) {
@@ -360,15 +360,16 @@ def test_float_subclass(self):
360360 }
361361 """ ,
362362 cmembers = "PyFloatObject base;" ,
363- tp_base = "&PyFloat_Type" ,
363+ tp_base = "&PyFloat_Type" ,
364364 nb_add = "fp_add" ,
365365 tp_new = "fp_tpnew" ,
366366 post_ready_code = "testFloatSubclassPtr = &TestFloatSubclassType; Py_INCREF(testFloatSubclassPtr);"
367367 )
368368 tester = TestFloatSubclass (41.0 )
369369 res = tester + 1
370370 assert res == 42.0 , "expected 42.0 but was %s" % res
371-
371+ assert hash (tester ) != 0
372+
372373 def test_custom_basicsize (self ):
373374 TestCustomBasicsize = CPyExtType ("TestCustomBasicsize" ,
374375 '''
Original file line number Diff line number Diff line change 109109import com .oracle .graal .python .runtime .formatting .InternalFormat .Spec ;
110110import com .oracle .truffle .api .CompilerDirectives ;
111111import com .oracle .truffle .api .CompilerDirectives .TruffleBoundary ;
112+ import com .oracle .truffle .api .dsl .Bind ;
112113import com .oracle .truffle .api .dsl .Cached ;
113114import com .oracle .truffle .api .dsl .Cached .Shared ;
114115import com .oracle .truffle .api .dsl .Fallback ;
@@ -654,9 +655,16 @@ protected static boolean accepts(Object obj) {
654655 @ TypeSystemReference (PythonArithmeticTypes .class )
655656 abstract static class HashNode extends PythonUnaryBuiltinNode {
656657 @ Specialization
657- static long hashDouble (double self ) {
658+ static long doDouble (double self ) {
658659 return PyObjectHashNode .hash (self );
659660 }
661+
662+ @ Specialization (guards = "dval != null" )
663+ static long doNativeFloat (@ SuppressWarnings ("unused" ) VirtualFrame frame , @ SuppressWarnings ("unused" ) PythonNativeObject object ,
664+ @ SuppressWarnings ("unused" ) @ Cached FromNativeSubclassNode getFloat ,
665+ @ Bind ("getFloat.execute(frame, object)" ) Double dval ) {
666+ return PyObjectHashNode .hash (dval );
667+ }
660668 }
661669
662670 @ Builtin (name = "fromhex" , minNumOfPositionalArgs = 2 , isClassmethod = true )
You can’t perform that action at this time.
0 commit comments