Skip to content

Commit 879014d

Browse files
committed
Fix dealing with NotImplemented in __divmod__
1 parent 544dfd1 commit 879014d

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats/FloatBuiltins.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -623,12 +623,22 @@ PTuple doLD(long left, double right) {
623623
return factory().createTuple(new Object[]{Math.floor(left / right), left % right});
624624
}
625625

626-
@Specialization
627-
PTuple doGeneric(VirtualFrame frame, Object left, Object right,
626+
@Specialization(guards = {"accepts(left)", "accepts(right)"})
627+
PTuple doGenericFloat(VirtualFrame frame, Object left, Object right,
628628
@Cached FloorDivNode floorDivNode,
629629
@Cached ModNode modNode) {
630630
return factory().createTuple(new Object[]{floorDivNode.execute(frame, left, right), modNode.execute(frame, left, right)});
631631
}
632+
633+
@SuppressWarnings("unused")
634+
@Fallback
635+
PNotImplemented doGeneric(Object left, Object right) {
636+
return PNotImplemented.NOT_IMPLEMENTED;
637+
}
638+
639+
protected static boolean accepts(Object obj) {
640+
return obj instanceof Double || obj instanceof Integer || obj instanceof Long || obj instanceof PInt;
641+
}
632642
}
633643

634644
@Builtin(name = SpecialMethodNames.__HASH__, minNumOfPositionalArgs = 1)

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -507,12 +507,22 @@ PTuple doLL(long left, long right) {
507507
return factory().createTuple(new Object[]{Math.floorDiv(left, right), Math.floorMod(left, right)});
508508
}
509509

510-
@Specialization
511-
PTuple doGeneric(VirtualFrame frame, Object left, Object right,
510+
@Specialization(guards = {"accepts(left)", "accepts(right)"})
511+
PTuple doGenericInt(VirtualFrame frame, Object left, Object right,
512512
@Cached FloorDivNode floorDivNode,
513513
@Cached ModNode modNode) {
514514
return factory().createTuple(new Object[]{floorDivNode.execute(frame, left, right), modNode.execute(frame, left, right)});
515515
}
516+
517+
@SuppressWarnings("unused")
518+
@Fallback
519+
PNotImplemented doGeneric(Object left, Object right) {
520+
return PNotImplemented.NOT_IMPLEMENTED;
521+
}
522+
523+
protected static boolean accepts(Object obj) {
524+
return obj instanceof Integer || obj instanceof Long || obj instanceof PInt;
525+
}
516526
}
517527

518528
@Builtin(name = SpecialMethodNames.__MOD__, minNumOfPositionalArgs = 2)

0 commit comments

Comments
 (0)