Skip to content

Commit 9cde923

Browse files
committed
Fix error handling of sequence contains
1 parent 00a3fb6 commit 9cde923

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/slots/TpSlotSqContains.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import static com.oracle.graal.python.nodes.SpecialMethodNames.J___CONTAINS__;
4444
import static com.oracle.graal.python.nodes.SpecialMethodNames.T___CONTAINS__;
4545

46+
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
47+
import com.oracle.graal.python.builtins.objects.PNone;
4648
import com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionNodes.CheckInquiryResultNode;
4749
import com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionNodes.ExternalFunctionInvokeNode;
4850
import com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionNodes.PExternalFunctionWrapper;
@@ -54,6 +56,8 @@
5456
import com.oracle.graal.python.builtins.objects.type.slots.TpSlot.TpSlotPythonSingle;
5557
import com.oracle.graal.python.builtins.objects.type.slots.TpSlotBinaryFunc.TpSlotBinaryFuncBuiltin;
5658
import com.oracle.graal.python.lib.PyObjectIsTrueNode;
59+
import com.oracle.graal.python.nodes.ErrorMessages;
60+
import com.oracle.graal.python.nodes.PRaiseNode;
5761
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
5862
import com.oracle.graal.python.runtime.ExecutionContext.CallContext;
5963
import com.oracle.graal.python.runtime.PythonContext;
@@ -114,7 +118,11 @@ static boolean callCachedBuiltin(VirtualFrame frame, @SuppressWarnings("unused")
114118
@Specialization
115119
static boolean callPython(VirtualFrame frame, Node inliningTarget, TpSlotPythonSingle slot, Object self, Object arg,
116120
@Cached BinaryPythonSlotDispatcherNode dispatcherNode,
117-
@Cached PyObjectIsTrueNode isTrueNode) {
121+
@Cached PyObjectIsTrueNode isTrueNode,
122+
@Cached PRaiseNode raiseNode) {
123+
if (slot.getCallable() == PNone.NONE) {
124+
throw raiseNode.raise(inliningTarget, PythonBuiltinClassType.TypeError, ErrorMessages.IS_NOT_A_CONTAINER, self);
125+
}
118126
Object result = dispatcherNode.execute(frame, inliningTarget, slot.getCallable(), slot.getType(), self, arg);
119127
return isTrueNode.execute(frame, result);
120128
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PySequenceIterSearchNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ static int search(Frame frame, Node inliningTarget, Object container, Object key
104104
iterator = getIter.execute(frame, inliningTarget, container);
105105
} catch (PException e) {
106106
e.expectTypeError(inliningTarget, noIterProfile);
107-
throw raiseNode.raise(inliningTarget, PythonBuiltinClassType.TypeError, ErrorMessages.IS_NOT_A_CONTAINER, container);
107+
throw raiseNode.raise(inliningTarget, PythonBuiltinClassType.TypeError, ErrorMessages.ARGUMENT_OF_TYPE_P_IS_NOT_ITERABLE, container);
108108
}
109109
Object next = PNone.NO_VALUE;
110110
try {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/ErrorMessages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ public abstract class ErrorMessages {
582582
public static final TruffleString OBJ_ISNT_MAPPING = tsLiteral("'%p' object is not a mapping");
583583
public static final TruffleString OBJ_ISNT_REVERSIBLE = tsLiteral("'%p' object is not reversible");
584584
public static final TruffleString OBJ_NOT_ITERABLE = tsLiteral("'%p' object is not iterable");
585+
public static final TruffleString ARGUMENT_OF_TYPE_P_IS_NOT_ITERABLE = tsLiteral("argument of type '%p' is not iterable");
585586
public static final TruffleString OBJ_NOT_SUBSCRIPTABLE = tsLiteral("'%p' object is not subscriptable");
586587
public static final TruffleString TYPE_NOT_SUBSCRIPTABLE = tsLiteral("type '%N' is not subscriptable");
587588
public static final TruffleString OBJ_OR_KLASS_ARGS_IS_NOT_HOST_OBJ = tsLiteral("the object '%p' or klass '%p' arguments is not a host object");

0 commit comments

Comments
 (0)