Skip to content

Commit 41c951e

Browse files
committed
Correctly propagate flag BASE_EXC_SUBCLASS to exception types.
1 parent 0954f74 commit 41c951e

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/PythonBuiltinClassType.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.oracle.truffle.api.library.CachedLibrary;
5151
import com.oracle.truffle.api.library.ExportLibrary;
5252
import com.oracle.truffle.api.library.ExportMessage;
53+
import com.oracle.truffle.api.nodes.ExplodeLoop;
5354
import com.oracle.truffle.api.object.Shape;
5455

5556
@ExportLibrary(InteropLibrary.class)
@@ -278,8 +279,8 @@ public final Shape getInstanceShape() {
278279
return instanceShape;
279280
}
280281

281-
public static final PythonBuiltinClassType[] VALUES = Arrays.copyOf(values(), values().length - 1);
282-
public static final PythonBuiltinClassType[] EXCEPTIONS;
282+
@CompilationFinal(dimensions = 1) public static final PythonBuiltinClassType[] VALUES = Arrays.copyOf(values(), values().length - 1);
283+
@CompilationFinal(dimensions = 1) public static final PythonBuiltinClassType[] EXCEPTIONS;
283284

284285
static {
285286
// fill the EXCEPTIONS array
@@ -577,4 +578,14 @@ static String getMetaSimpleName(PythonBuiltinClassType self) {
577578
static String getMetaQualifiedName(PythonBuiltinClassType self) {
578579
return self.getQualifiedName();
579580
}
581+
582+
@ExplodeLoop
583+
public static boolean isExceptionType(PythonBuiltinClassType type) {
584+
for (int i = 0; i < EXCEPTIONS.length; i++) {
585+
if (EXCEPTIONS[i] == type) {
586+
return true;
587+
}
588+
}
589+
return false;
590+
}
580591
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ static long doBuiltinClassType(PythonBuiltinClassType clazz) {
213213
// default case; this includes:
214214
// PythonObject, PByteArray, PCode, PInstancemethod, PFloat, PNone,
215215
// PNotImplemented, PEllipsis
216-
result = DEFAULT | (clazz.isAcceptableBase() ? BASETYPE : 0);
216+
result = DEFAULT | (clazz.isAcceptableBase() ? BASETYPE : 0) | (PythonBuiltinClassType.isExceptionType(clazz) ? BASE_EXC_SUBCLASS : 0L);
217217
break;
218218
}
219219
// we always claim that all types are fully initialized

0 commit comments

Comments
 (0)