Skip to content

Commit 624bd60

Browse files
committed
Add asserts for isBuiltin* checks
1 parent dd024a9 commit 624bd60

File tree

1 file changed

+18
-19
lines changed
  • graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes

1 file changed

+18
-19
lines changed

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

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -604,33 +604,35 @@ public static double expectDouble(Object result) throws UnexpectedResultExceptio
604604
throw new UnexpectedResultException(result);
605605
}
606606

607-
public static boolean isBuiltinDict(PythonObject dict) {
607+
private static boolean isBuiltinImmutableTypeInstance(PythonObject dict, PythonBuiltinClassType type) {
608608
/*
609-
* dict's __class__ cannot be reassigned and other objects cannot have their class assigned
610-
* to builtin dict, so it is enough to look at the initial class. PDict constructor ensures
611-
* that it cannot be PythonBuiltinClass.
609+
* Immutable types' __class__ cannot be reassigned and other objects cannot have their class
610+
* assigned to immutable types, so it is enough to look at the initial class. The Java
611+
* constructor of the object must ensure that it cannot be PythonBuiltinClass, see PDict for
612+
* an example.
612613
*/
613-
return dict.getInitialPythonClass() == PythonBuiltinClassType.PDict;
614+
assert !(dict.getInitialPythonClass() instanceof PythonBuiltinClass pbc) || pbc.getType() != type;
615+
return dict.getInitialPythonClass() == type;
616+
}
617+
618+
public static boolean isBuiltinDict(PythonObject dict) {
619+
return isBuiltinImmutableTypeInstance(dict, PythonBuiltinClassType.PDict);
614620
}
615621

616622
public static boolean isBuiltinTuple(PythonObject tuple) {
617-
// See isBuiltinDict for explanation
618-
return tuple.getInitialPythonClass() == PythonBuiltinClassType.PTuple;
623+
return isBuiltinImmutableTypeInstance(tuple, PythonBuiltinClassType.PTuple);
619624
}
620625

621626
public static boolean isBuiltinList(PythonObject list) {
622-
// See isBuiltinDict for explanation
623-
return list.getInitialPythonClass() == PythonBuiltinClassType.PList;
627+
return isBuiltinImmutableTypeInstance(list, PythonBuiltinClassType.PList);
624628
}
625629

626630
public static boolean isBuiltinSet(PythonObject set) {
627-
// See isBuiltinDict for explanation
628-
return set.getInitialPythonClass() == PythonBuiltinClassType.PSet;
631+
return isBuiltinImmutableTypeInstance(set, PythonBuiltinClassType.PSet);
629632
}
630633

631634
public static boolean isBuiltinFrozenSet(PythonObject frozenSet) {
632-
// See isBuiltinDict for explanation
633-
return frozenSet.getInitialPythonClass() == PythonBuiltinClassType.PFrozenSet;
635+
return isBuiltinImmutableTypeInstance(frozenSet, PythonBuiltinClassType.PFrozenSet);
634636
}
635637

636638
public static boolean isBuiltinAnySet(PythonObject set) {
@@ -642,18 +644,15 @@ public static boolean isBuiltinHashingCollection(PythonObject hashingCollection)
642644
}
643645

644646
public static boolean isBuiltinPString(PString string) {
645-
// See isBuiltinDict for explanation
646-
return string.getInitialPythonClass() == PythonBuiltinClassType.PString;
647+
return isBuiltinImmutableTypeInstance(string, PythonBuiltinClassType.PString);
647648
}
648649

649650
public static boolean isBuiltinBytes(PythonObject bytes) {
650-
// See isBuiltinDict for explanation
651-
return bytes.getInitialPythonClass() == PythonBuiltinClassType.PBytes;
651+
return isBuiltinImmutableTypeInstance(bytes, PythonBuiltinClassType.PBytes);
652652
}
653653

654654
public static boolean isBuiltinByteArray(PythonObject byteArray) {
655-
// See isBuiltinDict for explanation
656-
return byteArray.getInitialPythonClass() == PythonBuiltinClassType.PByteArray;
655+
return isBuiltinImmutableTypeInstance(byteArray, PythonBuiltinClassType.PByteArray);
657656
}
658657

659658
public static boolean isBuiltinBytesLike(PythonObject object) {

0 commit comments

Comments
 (0)