1 /**
2 Mirror _pyerrors.h
3 */
4 module deimos.python.pyerrors;
5
6 import core.stdc.stdarg;
7 import deimos.python.pyport;
8 import deimos.python.object;
9 import deimos.python.unicodeobject;
10
11 extern(C):
12 // Python-header-file: Include/pyerrors.h:
13
14 version(Python_3_0_Or_Later) {
15 /// _
16 mixin template PyException_HEAD() {
17 mixin PyObject_HEAD;
18 /// _
19 PyObject* dict;
20 /// _
21 PyObject* args;
22 /// _
23 PyObject* traceback;
24 /// _
25 PyObject* context;
26 /// _
27 PyObject* cause;
28 }
29 }else version(Python_2_5_Or_Later) {
30 /// _
31 mixin template PyException_HEAD() {
32 mixin PyObject_HEAD;
33 /// _
34 PyObject* dict;
35 /// _
36 PyObject* args;
37 /// _
38 PyObject* message;
39 }
40 }
41
42 version(Python_2_5_Or_Later) {
43 /* Error objects */
44
45 /// Availability: >= 2.5
46 struct PyBaseExceptionObject {
47 mixin PyException_HEAD;
48 }
49
50 /// subclass of PyBaseExceptionObject
51 /// Availability: >= 2.5
52 struct PySyntaxErrorObject {
53 mixin PyException_HEAD;
54 /// _
55 PyObject* msg;
56 /// _
57 PyObject* filename;
58 /// _
59 PyObject* lineno;
60 /// _
61 PyObject* offset;
62 /// _
63 PyObject* text;
64 /// _
65 PyObject* print_file_and_line;
66 }
67
68 /// subclass of PyBaseExceptionObject
69 /// Availability: >= 2.5
70 struct PyUnicodeErrorObject {
71 mixin PyException_HEAD;
72 /// _
73 PyObject* encoding;
74 /// _
75 PyObject* object;
76 version(Python_2_6_Or_Later){
77 /// Availability: >= 2.6
78 Py_ssize_t start;
79 /// Availability: >= 2.6
80 Py_ssize_t end;
81 }else{
82 /// Availability: <= 2.5
83 PyObject* start;
84 /// Availability: <= 2.5
85 PyObject* end;
86 }
87 /// _
88 PyObject* reason;
89 }
90
91 /// subclass of PyBaseExceptionObject
92 /// Availability: >= 2.5
93 struct PySystemExitObject {
94 mixin PyException_HEAD;
95 /// _
96 PyObject* code;
97 }
98
99 /// subclass of PyBaseExceptionObject
100 /// Availability: >= 2.5
101 struct PyEnvironmentErrorObject {
102 mixin PyException_HEAD;
103 /// _
104 PyObject* myerrno;
105 /// _
106 PyObject* strerror;
107 /// _
108 PyObject* filename;
109 }
110
111 version(Windows) {
112 /// subclass of PyBaseExceptionObject
113 /// Availability: >= 2.5, Windows only
114 struct PyWindowsErrorObject {
115 mixin PyException_HEAD;
116 /// _
117 PyObject* myerrno;
118 /// _
119 PyObject* strerror;
120 /// _
121 PyObject* filename;
122 /// _
123 PyObject* winerror;
124 }
125 }
126 }
127
128 /// _
129 void PyErr_SetNone(PyObject*);
130 /// _
131 void PyErr_SetObject(PyObject*, PyObject*);
132 /// _
133 void PyErr_SetString(PyObject* exception, const(char)* string);
134 /// _
135 PyObject* PyErr_Occurred();
136 /// _
137 void PyErr_Clear();
138 /// _
139 void PyErr_Fetch(PyObject**, PyObject**, PyObject**);
140 /// _
141 void PyErr_Restore(PyObject*, PyObject*, PyObject*);
142 version(Python_3_0_Or_Later) {
143 /// Availability: 3.*
144 void Py_FatalError(const(char)* message);
145 }
146
147 /// _
148 int PyErr_GivenExceptionMatches(PyObject*, PyObject*);
149 /// _
150 int PyErr_ExceptionMatches(PyObject*);
151 /// _
152 void PyErr_NormalizeException(PyObject**, PyObject**, PyObject**);
153 version(Python_2_5_Or_Later) {
154 /// Availability: >= 2.5
155 int PyExceptionClass_Check()(PyObject* x) {
156 version(Python_3_0_Or_Later) {
157 return (PyType_Check((x)) &&
158 PyType_FastSubclass(cast(PyTypeObject*)x,
159 Py_TPFLAGS_BASE_EXC_SUBCLASS));
160 }else version(Python_2_6_Or_Later) {
161 return (PyClass_Check(x) || (PyType_Check(x) &&
162 PyType_FastSubclass(cast(PyTypeObject*)x,
163 Py_TPFLAGS_BASE_EXC_SUBCLASS)));
164 }else{
165 return (PyClass_Check(x) || (PyType_Check(x) &&
166 PyType_IsSubtype(cast(PyTypeObject*)x,
167 cast(PyTypeObject*) PyExc_BaseException)));
168 }
169 }
170
171 /// Availability: >= 2.5
172 int PyExceptionInstance_Check()(PyObject* x) {
173 version(Python_3_0_Or_Later) {
174 return PyType_FastSubclass(x.ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS);
175 }else version(Python_2_6_Or_Later) {
176 return (PyInstance_Check(x) ||
177 PyType_FastSubclass(x.ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS));
178 }else{
179 return (PyInstance_Check(x) ||
180 PyType_IsSubtype(x.ob_type,
181 cast(PyTypeObject*) PyExc_BaseException));
182 }
183 }
184
185 /// Availability: >= 2.5
186 int PyExceptionClass_Name()(PyObject* x) {
187 version(Python_3_0_Or_Later) {
188 return cast(char*)((cast(PyTypeObject*)x).tp_name);
189 }else {
190 return (PyClass_Check(x)
191 ? PyString_AS_STRING((cast(PyClassObject*)x).cl_name)
192 : cast(char*)(cast(PyTypeObject*)x).tp_name);
193 }
194 }
195
196 /// Availability: >= 2.5
197 int PyExceptionInstance_Class()(PyObject* x) {
198 version(Python_3_0_Or_Later) {
199 return cast(PyObject*)(x.ob_type);
200 }else{
201 return ((PyInstance_Check(x)
202 ? cast(PyObject*)(cast(PyInstanceObject*)x).in_class
203 : cast(PyObject*)(x.ob_type)));
204 }
205 }
206 }
207
208
209 /* Predefined exceptions */
210
211 version(Python_2_5_Or_Later) {
212 /// Availability: >= 2.5
213 mixin(PyAPI_DATA!"PyObject* PyExc_BaseException");
214 }
215 /// _
216 mixin(PyAPI_DATA!"PyObject* PyExc_Exception");
217 version(Python_3_5_Or_Later) {
218 /// _
219 mixin(PyAPI_DATA!"PyObject* PyExc_StopAsyncIteration");
220 }
221 /// _
222 mixin(PyAPI_DATA!"PyObject* PyExc_StopIteration");
223 version(Python_2_5_Or_Later) {
224 /// Availability: >= 2.5
225 mixin(PyAPI_DATA!"PyObject* PyExc_GeneratorExit");
226 }
227 version(Python_3_0_Or_Later) {
228 }else{
229 /// Availability: 2.*
230 mixin(PyAPI_DATA!"PyObject* PyExc_StandardError");
231 }
232 /// _
233 mixin(PyAPI_DATA!"PyObject* PyExc_ArithmeticError");
234 /// _
235 mixin(PyAPI_DATA!"PyObject* PyExc_LookupError");
236
237 /// _
238 mixin(PyAPI_DATA!"PyObject* PyExc_AssertionError");
239 /// _
240 mixin(PyAPI_DATA!"PyObject* PyExc_AttributeError");
241 /// _
242 mixin(PyAPI_DATA!"PyObject* PyExc_EOFError");
243 /// _
244 mixin(PyAPI_DATA!"PyObject* PyExc_FloatingPointError");
245 /// _
246 mixin(PyAPI_DATA!"PyObject* PyExc_EnvironmentError");
247 /// _
248 mixin(PyAPI_DATA!"PyObject* PyExc_IOError");
249 /// _
250 mixin(PyAPI_DATA!"PyObject* PyExc_OSError");
251 /// _
252 mixin(PyAPI_DATA!"PyObject* PyExc_ImportError");
253
254 version(Python_3_6_Or_Later) {
255 /// _
256 mixin(PyAPI_DATA!"PyObject* PyExc_ModuleNotFoundError");
257 }
258 /// _
259 mixin(PyAPI_DATA!"PyObject* PyExc_IndexError");
260 /// _
261 mixin(PyAPI_DATA!"PyObject* PyExc_KeyError");
262 /// _
263 mixin(PyAPI_DATA!"PyObject* PyExc_KeyboardInterrupt");
264 /// _
265 mixin(PyAPI_DATA!"PyObject* PyExc_MemoryError");
266 /// _
267 mixin(PyAPI_DATA!"PyObject* PyExc_NameError");
268 /// _
269 mixin(PyAPI_DATA!"PyObject* PyExc_OverflowError");
270 /// _
271 mixin(PyAPI_DATA!"PyObject* PyExc_RuntimeError");
272 version(Python_3_5_Or_Later) {
273 /// _
274 mixin(PyAPI_DATA!"PyObject* PyExc_RecursionError;");
275 }
276 /// _
277 mixin(PyAPI_DATA!"PyObject* PyExc_NotImplementedError");
278 /// _
279 mixin(PyAPI_DATA!"PyObject* PyExc_SyntaxError");
280 /// _
281 mixin(PyAPI_DATA!"PyObject* PyExc_IndentationError");
282 /// _
283 mixin(PyAPI_DATA!"PyObject* PyExc_TabError");
284 /// _
285 mixin(PyAPI_DATA!"PyObject* PyExc_ReferenceError");
286 /// _
287 mixin(PyAPI_DATA!"PyObject* PyExc_SystemError");
288 /// _
289 mixin(PyAPI_DATA!"PyObject* PyExc_SystemExit");
290 /// _
291 mixin(PyAPI_DATA!"PyObject* PyExc_TypeError");
292 /// _
293 mixin(PyAPI_DATA!"PyObject* PyExc_UnboundLocalError");
294 /// _
295 mixin(PyAPI_DATA!"PyObject* PyExc_UnicodeError");
296 /// _
297 mixin(PyAPI_DATA!"PyObject* PyExc_UnicodeEncodeError");
298 /// _
299 mixin(PyAPI_DATA!"PyObject* PyExc_UnicodeDecodeError");
300 /// _
301 mixin(PyAPI_DATA!"PyObject* PyExc_UnicodeTranslateError");
302 /// _
303 mixin(PyAPI_DATA!"PyObject* PyExc_ValueError");
304 /// _
305 mixin(PyAPI_DATA!"PyObject* PyExc_ZeroDivisionError");
306 version(Windows) {
307 /// Availability: Windows only
308 mixin(PyAPI_DATA!"PyObject* PyExc_WindowsError");
309 }
310 // ??!
311 version(VMS) {
312 /// Availability: VMS only
313 mixin(PyAPI_DATA!"PyObject* PyExc_VMSError");
314 }
315 version(Python_2_6_Or_Later) {
316 /// Availability: >= 2.6
317 mixin(PyAPI_DATA!"PyObject* PyExc_BufferError");
318 }
319
320 version(Python_3_0_Or_Later) {
321 }else{
322 /// Availability: 2.*
323 mixin(PyAPI_DATA!"PyObject* PyExc_MemoryErrorInst");
324 }
325 version(Python_2_6_Or_Later) {
326 /// Availability: >= 2.6
327 mixin(PyAPI_DATA!"PyObject* PyExc_RecursionErrorInst");
328 }
329
330 /** Predefined warning categories */
331 mixin(PyAPI_DATA!"PyObject* PyExc_Warning");
332 /// ditto
333 mixin(PyAPI_DATA!"PyObject* PyExc_UserWarning");
334 /// ditto
335 mixin(PyAPI_DATA!"PyObject* PyExc_DeprecationWarning");
336 /// ditto
337 mixin(PyAPI_DATA!"PyObject* PyExc_PendingDeprecationWarning");
338 /// ditto
339 mixin(PyAPI_DATA!"PyObject* PyExc_SyntaxWarning");
340 /* PyExc_OverflowWarning will go away for Python 2.5 */
341 version(Python_2_5_Or_Later) {
342 }else{
343 /// Availability: 2.4
344 mixin(PyAPI_DATA!"PyObject* PyExc_OverflowWarning");
345 }
346 /// _
347 mixin(PyAPI_DATA!"PyObject* PyExc_RuntimeWarning");
348 /// _
349 mixin(PyAPI_DATA!"PyObject* PyExc_FutureWarning");
350 version(Python_2_5_Or_Later) {
351 /// Availability: >= 2.5
352 mixin(PyAPI_DATA!"PyObject* PyExc_ImportWarning");
353 /// Availability: >= 2.5
354 mixin(PyAPI_DATA!"PyObject* PyExc_UnicodeWarning");
355 }
356 version(Python_2_6_Or_Later) {
357 /// Availability: >= 2.6
358 mixin(PyAPI_DATA!"PyObject* PyExc_BytesWarning");
359 }
360
361 version(Python_3_0_Or_Later) {
362 /// Availability: 3.*
363 mixin(PyAPI_DATA!"PyObject* PyExc_ResourceWarning");
364
365 /** Traceback manipulation (PEP 3134) */
366 int PyException_SetTraceback(PyObject*, PyObject*);
367 /// ditto
368 PyObject* PyException_GetTraceback(PyObject*);
369
370 /** Cause manipulation (PEP 3134) */
371 PyObject* PyException_GetCause(PyObject*);
372 /// ditto
373 void PyException_SetCause(PyObject*, PyObject*);
374
375 /** Context manipulation (PEP 3134) */
376 PyObject* PyException_GetContext(PyObject*);
377 /// ditto
378 void PyException_SetContext(PyObject*, PyObject*);
379 }
380
381 /// _
382 int PyErr_BadArgument();
383 /// _
384 PyObject* PyErr_NoMemory();
385 /// _
386 PyObject* PyErr_SetFromErrno(PyObject*);
387 /// _
388 PyObject* PyErr_SetFromErrnoWithFilenameObject(PyObject*, PyObject*);
389 /// _
390 PyObject* PyErr_SetFromErrnoWithFilename(PyObject* exc, char* filename);
391 /// _
392 PyObject* PyErr_SetFromErrnoWithUnicodeFilename(PyObject*, Py_UNICODE*);
393
394 /// _
395 PyObject* PyErr_Format(PyObject* exception, const(char)* format, ...);
396
397 version (Windows) {
398 /// Availability: Windows only
399 PyObject* PyErr_SetFromWindowsErrWithFilenameObject(int, const(char)*);
400 /// Availability: Windows only
401 PyObject* PyErr_SetFromWindowsErrWithFilename(int ierr, const(char)* filename);
402 /// Availability: Windows only
403 PyObject* PyErr_SetFromWindowsErrWithUnicodeFilename(int, Py_UNICODE*);
404 /// Availability: Windows only
405 PyObject* PyErr_SetFromWindowsErr(int);
406 /// Availability: Windows only
407 PyObject* PyErr_SetExcFromWindowsErrWithFilenameObject(PyObject*, int, PyObject*);
408 /// Availability: Windows only
409 PyObject* PyErr_SetExcFromWindowsErrWithFilename(PyObject* exc, int ierr, const(char)* filename);
410 /// Availability: Windows only
411 PyObject* PyErr_SetExcFromWindowsErrWithUnicodeFilename(PyObject*, int, Py_UNICODE*);
412 /// Availability: Windows only
413 PyObject* PyErr_SetExcFromWindowsErr(PyObject*, int);
414 }
415
416 version(Python_3_6_Or_Later) {
417 PyObject* PyErr_SetImportErrorSubclass(PyObject*, PyObject*, PyObject*, PyObject*);
418 }
419
420 version(Python_3_5_Or_Later) {
421 PyObject* PyErr_SetImportError(PyObject*, PyObject*, PyObject*);
422 }
423
424 // PyErr_BadInternalCall and friends purposely omitted.
425 /// _
426 void PyErr_BadInternalall();
427 /// _
428 void _PyErr_BadInternalCall(const(char)* filename, int lineno);
429
430 /// _
431 PyObject* PyErr_NewException(const(char)* name, PyObject* base, PyObject* dict);
432 version(Python_2_7_Or_Later) {
433 /// Availability: >= 2.7
434 PyObject* PyErr_NewExceptionWithDoc(
435 const(char)* name, const(char)* doc, PyObject* base, PyObject* dict);
436 }
437 /// _
438 void PyErr_WriteUnraisable(PyObject*);
439
440 version(Python_2_5_Or_Later){
441 /// Availability: >= 2.5
442 int PyErr_WarnEx(PyObject*, char*, Py_ssize_t);
443 }else{
444 /// Availability: 2.4
445 int PyErr_Warn(PyObject*, char*);
446 }
447 /// _
448 int PyErr_WarnExplicit(PyObject*, const(char)*, const(char)*, int, const(char)*, PyObject*);
449
450 /// _
451 int PyErr_CheckSignals();
452 /// _
453 void PyErr_SetInterrupt();
454
455 /// _
456 void PyErr_SyntaxLocation(const(char)* filename, int lineno);
457 version(Python_3_0_Or_Later) {
458 /// Availability: 3.*
459 void PyErr_SyntaxLocationEx(
460 const(char)* filename,
461 int lineno,
462 int col_offset);
463 }
464 /// _
465 PyObject* PyErr_ProgramText(const(char)* filename, int lineno);
466
467 //-//////////////////////////////////////////////////////////////////////////
468 // UNICODE ENCODING ERROR HANDLING INTERFACE
469 //-//////////////////////////////////////////////////////////////////////////
470 /** create a UnicodeDecodeError object */
471 PyObject* PyUnicodeDecodeError_Create(
472 const(char)* encoding,
473 const(char)* object,
474 Py_ssize_t length,
475 Py_ssize_t start,
476 Py_ssize_t end,
477 const(char)* reason);
478
479 /** create a UnicodeEncodeError object */
480 PyObject* PyUnicodeEncodeError_Create(
481 const(char)* encoding,
482 Py_UNICODE* object,
483 Py_ssize_t length,
484 Py_ssize_t start,
485 Py_ssize_t end,
486 const(char)* reason);
487
488 /** create a UnicodeTranslateError object */
489 PyObject* PyUnicodeTranslateError_Create(
490 Py_UNICODE* object,
491 Py_ssize_t length,
492 Py_ssize_t start,
493 Py_ssize_t end,
494 const(char)* reason);
495
496 /** get the encoding attribute */
497 PyObject* PyUnicodeEncodeError_GetEncoding(PyObject*);
498 /// ditto
499 PyObject* PyUnicodeDecodeError_GetEncoding(PyObject*);
500
501 /** get the object attribute */
502 PyObject* PyUnicodeEncodeError_GetObject(PyObject*);
503 /// ditto
504 PyObject* PyUnicodeDecodeError_GetObject(PyObject*);
505 /// ditto
506 PyObject* PyUnicodeTranslateError_GetObject(PyObject*);
507
508 /** get the value of the start attribute (the int * may not be NULL)
509 return 0 on success, -1 on failure */
510 int PyUnicodeEncodeError_GetStart(PyObject*, Py_ssize_t*);
511 /// ditto
512 int PyUnicodeDecodeError_GetStart(PyObject*, Py_ssize_t*);
513 /// ditto
514 int PyUnicodeTranslateError_GetStart(PyObject*, Py_ssize_t*);
515
516 /** assign a new value to the start attribute
517 return 0 on success, -1 on failure */
518 int PyUnicodeEncodeError_SetStart(PyObject*, Py_ssize_t);
519 /// ditto
520 int PyUnicodeDecodeError_SetStart(PyObject*, Py_ssize_t);
521 /// ditto
522 int PyUnicodeTranslateError_SetStart(PyObject* , Py_ssize_t);
523
524 /** get the value of the end attribute (the int *may not be NULL)
525 return 0 on success, -1 on failure */
526 int PyUnicodeEncodeError_GetEnd(PyObject*, Py_ssize_t*);
527 /// ditto
528 int PyUnicodeDecodeError_GetEnd(PyObject*, Py_ssize_t*);
529 /// ditto
530 int PyUnicodeTranslateError_GetEnd(PyObject* , Py_ssize_t*);
531
532 /** assign a new value to the end attribute
533 return 0 on success, -1 on failure */
534 int PyUnicodeEncodeError_SetEnd(PyObject*, Py_ssize_t);
535 /// ditto
536 int PyUnicodeDecodeError_SetEnd(PyObject*, Py_ssize_t);
537 /// ditto
538 int PyUnicodeTranslateError_SetEnd(PyObject*, Py_ssize_t);
539
540 /** get the value of the reason attribute */
541 PyObject* PyUnicodeEncodeError_GetReason(PyObject*);
542 /// ditto
543 PyObject* PyUnicodeDecodeError_GetReason(PyObject*);
544 /// ditto
545 PyObject* PyUnicodeTranslateError_GetReason(PyObject*);
546
547 /** assign a new value to the reason attribute
548 return 0 on success, -1 on failure */
549 int PyUnicodeEncodeError_SetReason(PyObject* exc, const(char)* reason);
550 /// ditto
551 int PyUnicodeDecodeError_SetReason(PyObject* exc, const(char)* reason);
552 /// ditto
553 int PyUnicodeTranslateError_SetReason(PyObject* exc, const(char)* reason);
554
555 /// _
556 int PyOS_snprintf(char* str, size_t size, const(char)* format, ...);
557 /// _
558 int PyOS_vsnprintf(char* str, size_t size, const(char)* format, va_list va);
559
560