Skip to content

Commit a5ae660

Browse files
committed
PySequenceSizeNode can do PBaseSet
1 parent 37b2e91 commit a5ae660

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PythonAbstractObject.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ public boolean hasArrayElements(
279279
// GR-44020: make shared:
280280
@Exclusive @Cached PRaiseNode.Lazy raiseNode,
281281
@Cached GetObjectSlotsNode getSlotsNode,
282-
@Cached PySequenceCheckNode sequenceCheck,
282+
@Exclusive @Cached PySequenceCheckNode sequenceCheck,
283283
@Exclusive @Cached GilNode gil) {
284284
boolean mustRelease = gil.acquire();
285285
try {
@@ -386,6 +386,7 @@ public long getArraySize(
386386
@Shared("getBehavior") @Cached GetInteropBehaviorNode getBehavior,
387387
@Shared("getValue") @Cached GetInteropBehaviorValueNode getValue,
388388
@Exclusive @Cached PySequenceSizeNode sequenceSizeNode,
389+
@Exclusive @Cached PySequenceCheckNode sequenceCheck,
389390
// GR-44020: make shared:
390391
@Exclusive @Cached CastToJavaLongExactNode toLongNode,
391392
// GR-44020: make shared:
@@ -398,6 +399,9 @@ public long getArraySize(
398399
if (behavior != null) {
399400
return getValue.executeLong(inliningTarget, behavior, method, toLongNode, raiseNode, this);
400401
} else {
402+
if (!sequenceCheck.execute(inliningTarget, this)) {
403+
throw UnsupportedMessageException.create();
404+
}
401405
try {
402406
return sequenceSizeNode.execute(null, inliningTarget, this);
403407
} catch (PException pe) {

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,10 @@
4444
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
4545

4646
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
47+
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
4748
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
4849
import com.oracle.graal.python.builtins.objects.list.PList;
50+
import com.oracle.graal.python.builtins.objects.set.PBaseSet;
4951
import com.oracle.graal.python.builtins.objects.str.PString;
5052
import com.oracle.graal.python.builtins.objects.str.StringNodes;
5153
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
@@ -104,12 +106,17 @@ static int doTuple(PTuple object) {
104106
return object.getSequenceStorage().length();
105107
}
106108

107-
@Specialization
109+
@Specialization(guards = "!isAnySet(object)")
108110
static int doPHashingCollection(Node inliningTarget, PHashingCollection object,
109111
@Exclusive @Cached PRaiseNode.Lazy raise) {
110112
throw raise.get(inliningTarget).raise(TypeError, ErrorMessages.IS_NOT_A_SEQUENCE, object);
111113
}
112-
114+
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
115+
static int doSet(Node inliningTarget, PBaseSet object,
116+
@Shared("getClass") @SuppressWarnings("unused") @Cached GetPythonObjectClassNode getClassNode,
117+
@Cached HashingStorageNodes.HashingStorageLen lenNode) {
118+
return lenNode.execute(inliningTarget, object.getDictStorage());
119+
}
113120
@Specialization(guards = "cannotBeOverridden(object, inliningTarget, getClassNode)")
114121
@InliningCutoff
115122
static int doPString(Node inliningTarget, PString object,

0 commit comments

Comments
 (0)