Skip to content

Commit 9793524

Browse files
committed
[GR-10285] divmod doesn't throw TypeError, when it called with complex numbers.
1 parent dfe6086 commit 9793524

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_builtin.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,9 @@ def test_GR11897(self):
3131
code = 'a' + ' = ' + '8.01234567890123'
3232
exec(code, globs)
3333
self.assertEqual(globs['a'], 8.01234567890123)
34+
35+
def test_divmod_complex(self):
36+
c1, c2 = complex(3, 2), complex(4,1)
37+
self.assertRaises(TypeError, divmod, c1, c2)
38+
self.assertRaises(TypeError, divmod, 10, c2)
39+
self.assertRaises(TypeError, divmod, c1, 10)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinFunctions.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
9696
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
9797
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
98+
import com.oracle.graal.python.builtins.objects.complex.PComplex;
9899
import com.oracle.graal.python.builtins.objects.dict.PDict;
99100
import com.oracle.graal.python.builtins.objects.frame.FrameBuiltins.GetLocalsNode;
100101
import com.oracle.graal.python.builtins.objects.function.Arity;
@@ -504,6 +505,18 @@ public PTuple doDouble(double a, double b) {
504505
return factory().createTuple(new Object[]{q, a % b});
505506
}
506507

508+
@Specialization
509+
@SuppressWarnings("unused")
510+
public PTuple doComplex(PComplex c, Object o) {
511+
throw raise(PythonErrorType.TypeError, "can't take floor or mod of complex number.");
512+
}
513+
514+
@Specialization
515+
@SuppressWarnings("unused")
516+
public PTuple doComplex(Object o, PComplex c) {
517+
throw raise(PythonErrorType.TypeError, "can't take floor or mod of complex number.");
518+
}
519+
507520
@Specialization
508521
public PTuple doObject(Object a, Object b,
509522
@Cached("create(__FLOORDIV__)") LookupAndCallBinaryNode floordivNode,

0 commit comments

Comments
 (0)