@@ -39,7 +39,6 @@ public enum PythonBuiltinClassType implements LazyPythonClass {
3939 GetSetDescriptor ("get_set_desc" ),
4040 PArray ("array" , "array" ),
4141 PArrayIterator ("arrayiterator" ),
42- PBaseException ("BaseException" , "builtins" ),
4342 PIterator ("iterator" ),
4443 PBuiltinFunction ("method_descriptor" ),
4544 PBuiltinMethod ("builtin_function_or_method" ),
@@ -85,27 +84,100 @@ public enum PythonBuiltinClassType implements LazyPythonClass {
8584 Super ("super" , "builtins" ),
8685 PCode ("code" ),
8786 PZip ("zip" , "builtins" ),
88- PBuffer ("buffer" );
87+ PBuffer ("buffer" ),
88+
89+ // Errors and exceptions:
90+
91+ // everything after BaseException is considered to be an exception
92+ PBaseException ("BaseException" , "builtins" ),
93+ SystemExit ("SystemExit" , "builtins" ),
94+ KeyboardInterrupt ("KeyboardInterrupt" , "builtins" ),
95+ GeneratorExit ("GeneratorExit" , "builtins" ),
96+ Exception ("Exception" , "builtins" ),
97+ StopIteration ("StopIteration" , "builtins" ),
98+ ArithmeticError ("ArithmeticError" , "builtins" ),
99+ FloatingPointError ("FloatingPointError" , "builtins" ),
100+ OverflowError ("OverflowError" , "builtins" ),
101+ ZeroDivisionError ("ZeroDivisionError" , "builtins" ),
102+ AssertionError ("AssertionError" , "builtins" ),
103+ AttributeError ("AttributeError" , "builtins" ),
104+ BufferError ("BufferError" , "builtins" ),
105+ EOFError ("EOFError" , "builtins" ),
106+ ImportError ("ImportError" , "builtins" ),
107+ ModuleNotFoundError ("ModuleNotFoundError" , "builtins" ),
108+ LookupError ("LookupError" , "builtins" ),
109+ IndexError ("IndexError" , "builtins" ),
110+ KeyError ("KeyError" , "builtins" ),
111+ MemoryError ("MemoryError" , "builtins" ),
112+ NameError ("NameError" , "builtins" ),
113+ UnboundLocalError ("UnboundLocalError" , "builtins" ),
114+ OSError ("OSError" , "builtins" ),
115+ IOError ("IOError" , "builtins" ),
116+ BlockingIOError ("BlockingIOError" , "builtins" ),
117+ ChildProcessError ("ChildProcessError" , "builtins" ),
118+ ConnectionError ("ConnectionError" , "builtins" ),
119+ BrokenPipeError ("BrokenPipeError" , "builtins" ),
120+ ConnectionAbortedError ("ConnectionAbortedError" , "builtins" ),
121+ ConnectionRefusedError ("ConnectionRefusedError" , "builtins" ),
122+ ConnectionResetError ("ConnectionResetError" , "builtins" ),
123+ FileExistsError ("FileExistsError" , "builtins" ),
124+ FileNotFoundError ("FileNotFoundError" , "builtins" ),
125+ InterruptedError ("InterruptedError" , "builtins" ),
126+ IsADirectoryError ("IsADirectoryError" , "builtins" ),
127+ NotADirectoryError ("NotADirectoryError" , "builtins" ),
128+ PermissionError ("PermissionError" , "builtins" ),
129+ ProcessLookupError ("ProcessLookupError" , "builtins" ),
130+ TimeoutError ("TimeoutError" , "builtins" ),
89131
90- private final String shortName ;
132+ // todo: all OS errors
133+
134+ ReferenceError ("ReferenceError" , "builtins" ),
135+ RuntimeError ("RuntimeError" , "builtins" ),
136+ NotImplementedError ("NotImplementedError" , "builtins" ),
137+ SyntaxError ("SyntaxError" , "builtins" ),
138+ IndentationError ("IndentationError" , "builtins" ),
139+ TabError ("TabError" , "builtins" ),
140+ SystemError ("SystemError" , "builtins" ),
141+ TypeError ("TypeError" , "builtins" ),
142+ ValueError ("ValueError" , "builtins" ),
143+ UnicodeError ("UnicodeError" , "builtins" ),
144+ UnicodeDecodeError ("UnicodeDecodeError" , "builtins" ),
145+ UnicodeEncodeError ("UnicodeEncodeError" , "builtins" ),
146+ UnicodeTranslateError ("UnicodeTranslateError" , "builtins" ),
147+ RecursionError ("RecursionError" , "builtins" ),
148+
149+ // warnings
150+ Warning ("Warning" , "builtins" ),
151+ BytesWarning ("BytesWarning" , "builtins" ),
152+ DeprecationWarning ("DeprecationWarning" , "builtins" ),
153+ FutureWarning ("FutureWarning" , "builtins" ),
154+ ImportWarning ("ImportWarning" , "builtins" ),
155+ PendingDeprecationWarning ("PendingDeprecationWarning" , "builtins" ),
156+ ResourceWarning ("ResourceWarning" , "builtins" ),
157+ RuntimeWarning ("RuntimeWarning" , "builtins" ),
158+ SyntaxWarning ("SyntaxWarning" , "builtins" ),
159+ UnicodeWarning ("UnicodeWarning" , "builtins" ),
160+ UserWarning ("UserWarning" , "builtins" );
161+
162+ private final String name ;
91163 private final Shape instanceShape ;
92164 private final String publicInModule ;
93165
94166 // initialized in static constructor
95167 @ CompilationFinal private PythonBuiltinClassType base ;
96168
97- PythonBuiltinClassType (String shortName , String publicInModule ) {
98- this .shortName = shortName ;
169+ PythonBuiltinClassType (String name , String publicInModule ) {
170+ this .name = name ;
99171 this .publicInModule = publicInModule ;
100172 this .instanceShape = com .oracle .graal .python .builtins .objects .type .PythonClass .freshShape ();
101173 }
102174
103- PythonBuiltinClassType (String shortName ) {
104- this (shortName , null );
175+ PythonBuiltinClassType (String name ) {
176+ this (name , null );
105177 }
106178
107- public String getShortName () {
108- return shortName ;
179+ public String getName () {
180+ return name ;
109181 }
110182
111183 public PythonBuiltinClassType getBase () {
@@ -119,19 +191,99 @@ public String getPublicInModule() {
119191 @ Override
120192 public String toString () {
121193 CompilerAsserts .neverPartOfCompilation ();
122- return shortName ;
194+ return name ;
123195 }
124196
125197 public Shape getInstanceShape () {
126198 return instanceShape ;
127199 }
128200
201+ public static final PythonBuiltinClassType [] VALUES = values ();
202+ public static final PythonBuiltinClassType [] EXCEPTIONS ;
203+
129204 static {
205+ // fill the EXCEPTIONS array
206+
207+ EXCEPTIONS = new PythonBuiltinClassType [VALUES .length - PBaseException .ordinal ()];
208+ for (int i = 0 ; i < EXCEPTIONS .length ; i ++) {
209+ EXCEPTIONS [i ] = VALUES [i + PBaseException .ordinal ()];
210+ }
211+
212+ // set the base classes (and check uniqueness):
213+
130214 HashSet <String > set = new HashSet <>();
131215 for (PythonBuiltinClassType type : values ()) {
132- assert set .add (type .shortName ) : type .name ();
216+ assert set .add (type .name ) : type .name ();
133217 type .base = PythonObject ;
134218 }
219+
135220 Boolean .base = PInt ;
221+
222+ SystemExit .base = PBaseException ;
223+ KeyboardInterrupt .base = PBaseException ;
224+ GeneratorExit .base = PBaseException ;
225+ Exception .base = PBaseException ;
226+ StopIteration .base = Exception ;
227+ ArithmeticError .base = Exception ;
228+ FloatingPointError .base = ArithmeticError ;
229+ OverflowError .base = ArithmeticError ;
230+ ZeroDivisionError .base = ArithmeticError ;
231+ AssertionError .base = Exception ;
232+ AttributeError .base = Exception ;
233+ BufferError .base = Exception ;
234+ EOFError .base = Exception ;
235+ ImportError .base = Exception ;
236+ ModuleNotFoundError .base = ImportError ;
237+ LookupError .base = Exception ;
238+ IndexError .base = LookupError ;
239+ KeyError .base = LookupError ;
240+ MemoryError .base = Exception ;
241+ NameError .base = Exception ;
242+ UnboundLocalError .base = NameError ;
243+ OSError .base = Exception ;
244+ IOError .base = Exception ;
245+ BlockingIOError .base = OSError ;
246+ ChildProcessError .base = OSError ;
247+ ConnectionError .base = OSError ;
248+ BrokenPipeError .base = OSError ;
249+ ConnectionAbortedError .base = OSError ;
250+ ConnectionRefusedError .base = OSError ;
251+ ConnectionResetError .base = OSError ;
252+ FileExistsError .base = OSError ;
253+ FileNotFoundError .base = OSError ;
254+ InterruptedError .base = OSError ;
255+ IsADirectoryError .base = OSError ;
256+ NotADirectoryError .base = OSError ;
257+ PermissionError .base = OSError ;
258+ ProcessLookupError .base = OSError ;
259+ TimeoutError .base = OSError ;
260+
261+ ReferenceError .base = Exception ;
262+ RuntimeError .base = Exception ;
263+ NotImplementedError .base = Exception ;
264+ SyntaxError .base = Exception ;
265+ IndentationError .base = SyntaxError ;
266+ TabError .base = IndentationError ;
267+ SystemError .base = Exception ;
268+ TypeError .base = Exception ;
269+ ValueError .base = Exception ;
270+ UnicodeError .base = ValueError ;
271+ UnicodeDecodeError .base = UnicodeError ;
272+ UnicodeEncodeError .base = UnicodeError ;
273+ UnicodeTranslateError .base = UnicodeError ;
274+ RecursionError .base = RuntimeError ;
275+
276+ // warnings
277+ Warning .base = Exception ;
278+ BytesWarning .base = Warning ;
279+ DeprecationWarning .base = Warning ;
280+ FutureWarning .base = Warning ;
281+ ImportWarning .base = Warning ;
282+ PendingDeprecationWarning .base = Warning ;
283+ ResourceWarning .base = Warning ;
284+ RuntimeWarning .base = Warning ;
285+ SyntaxWarning .base = Warning ;
286+ UnicodeWarning .base = Warning ;
287+ UserWarning .base = Warning ;
136288 }
137289}
0 commit comments