Skip to content

Commit fb3b0a6

Browse files
committed
Check method flags in PySequence lib nodes
1 parent 84d7832 commit fb3b0a6

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol;
5252
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTiming;
5353
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
54+
import com.oracle.graal.python.builtins.objects.type.MethodsFlags;
5455
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
5556
import com.oracle.graal.python.nodes.ErrorMessages;
5657
import com.oracle.graal.python.nodes.PGuards;
@@ -89,18 +90,17 @@ public final Object execute(Object object, int index) {
8990
static Object doGenericManaged(VirtualFrame frame, Object object, int index,
9091
@Bind("this") Node inliningTarget,
9192
@Cached GetClassNode getClassNode,
92-
@Cached PySequenceCheckNode sequenceCheckNode,
93-
@Cached PyMappingCheckNode mappingCheckNode,
93+
@Cached GetMethodsFlagsNode getMethodsFlagsNode,
9494
@Cached(parameters = "DelItem") LookupSpecialMethodSlotNode lookupDelItem,
9595
@Cached CallBinaryMethodNode callDelItem,
9696
@Cached PRaiseNode.Lazy raise) {
97-
if (sequenceCheckNode.execute(inliningTarget, object)) {
98-
Object type = getClassNode.execute(inliningTarget, object);
97+
Object type = getClassNode.execute(inliningTarget, object);
98+
if ((getMethodsFlagsNode.execute(inliningTarget, type) & MethodsFlags.SQ_ASS_ITEM) != 0) {
9999
Object delItem = lookupDelItem.execute(frame, type, object);
100100
assert delItem != PNone.NO_VALUE;
101101
return callDelItem.executeObject(frame, delItem, object, index);
102102
}
103-
if (mappingCheckNode.execute(inliningTarget, object)) {
103+
if ((getMethodsFlagsNode.execute(inliningTarget, type) & MethodsFlags.MP_ASS_SUBSCRIPT) != 0) {
104104
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.IS_NOT_A_SEQUENCE, object);
105105
} else {
106106
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.OBJ_DOES_NOT_SUPPORT_ITEM_DELETION, object);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol;
5252
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTiming;
5353
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
54+
import com.oracle.graal.python.builtins.objects.type.MethodsFlags;
5455
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
5556
import com.oracle.graal.python.nodes.ErrorMessages;
5657
import com.oracle.graal.python.nodes.PGuards;
@@ -89,18 +90,17 @@ public final Object execute(Object object, int index) {
8990
static Object doGenericManaged(VirtualFrame frame, Object object, int index,
9091
@Bind("this") Node inliningTarget,
9192
@Cached GetClassNode getClassNode,
92-
@Cached PySequenceCheckNode sequenceCheckNode,
93-
@Cached PyMappingCheckNode mappingCheckNode,
93+
@Cached GetMethodsFlagsNode getMethodsFlagsNode,
9494
@Cached(parameters = "GetItem") LookupSpecialMethodSlotNode lookupGetItem,
9595
@Cached CallBinaryMethodNode callGetItem,
9696
@Cached PRaiseNode.Lazy raise) {
97-
if (sequenceCheckNode.execute(inliningTarget, object)) {
98-
Object type = getClassNode.execute(inliningTarget, object);
97+
Object type = getClassNode.execute(inliningTarget, object);
98+
if ((getMethodsFlagsNode.execute(inliningTarget, type) & MethodsFlags.SQ_ITEM) != 0) {
9999
Object getItem = lookupGetItem.execute(frame, type, object);
100100
assert getItem != PNone.NO_VALUE;
101101
return callGetItem.executeObject(frame, getItem, object, index);
102102
}
103-
if (mappingCheckNode.execute(inliningTarget, object)) {
103+
if ((getMethodsFlagsNode.execute(inliningTarget, type) & MethodsFlags.MP_SUBSCRIPT) != 0) {
104104
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.IS_NOT_A_SEQUENCE, object);
105105
} else {
106106
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.OBJ_DOES_NOT_SUPPORT_INDEXING, object);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol;
5252
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTiming;
5353
import com.oracle.graal.python.builtins.objects.cext.capi.transitions.CApiTransitions;
54+
import com.oracle.graal.python.builtins.objects.type.MethodsFlags;
5455
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
5556
import com.oracle.graal.python.nodes.ErrorMessages;
5657
import com.oracle.graal.python.nodes.PGuards;
@@ -89,18 +90,17 @@ public final Object execute(Object object, int index, Object value) {
8990
static Object doGenericManaged(VirtualFrame frame, Object object, int index, Object value,
9091
@Bind("this") Node inliningTarget,
9192
@Cached GetClassNode getClassNode,
92-
@Cached PySequenceCheckNode sequenceCheckNode,
93-
@Cached PyMappingCheckNode mappingCheckNode,
93+
@Cached GetMethodsFlagsNode getMethodsFlagsNode,
9494
@Cached(parameters = "SetItem") LookupSpecialMethodSlotNode lookupSetItem,
9595
@Cached CallTernaryMethodNode callSetItem,
9696
@Cached PRaiseNode.Lazy raise) {
97-
if (sequenceCheckNode.execute(inliningTarget, object)) {
98-
Object type = getClassNode.execute(inliningTarget, object);
97+
Object type = getClassNode.execute(inliningTarget, object);
98+
if ((getMethodsFlagsNode.execute(inliningTarget, type) & MethodsFlags.SQ_ASS_ITEM) != 0) {
9999
Object setItem = lookupSetItem.execute(frame, type, object);
100100
assert setItem != PNone.NO_VALUE;
101101
return callSetItem.execute(frame, setItem, object, index, value);
102102
}
103-
if (mappingCheckNode.execute(inliningTarget, object)) {
103+
if ((getMethodsFlagsNode.execute(inliningTarget, type) & MethodsFlags.MP_ASS_SUBSCRIPT) != 0) {
104104
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.IS_NOT_A_SEQUENCE, object);
105105
} else {
106106
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.OBJ_DOES_NOT_SUPPORT_ITEM_ASSIGMENT, object);

0 commit comments

Comments
 (0)