annotate doc/docs/dev/api/core/panic.md @ 376:b75fa5f47bf0

doc: document presence of (panic|trace)_data
author David Demelier <markand@malikania.fr>
date Tue, 02 Nov 2021 15:35:53 +0100
parents c4da052c0def
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 # Module: panic
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
2
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 Synopsis
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
4
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 ```c
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 #include <core/panic.h>
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 ```
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
8
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 Unrecoverable error handling.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
10
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 This set of functions should be used to detect runtime errors that are
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 unexpected. They should be used only when the game cannot continue because it is
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 in a unrecoverable state.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
14
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 Examples of appropriate use cases:
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
16
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 - Game saved data is corrupt,
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
18 - Assets are missing,
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 - No more memory.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 In other contexts, use asserts to indicates programming error and appropriate
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
22 solutions to recover the game otherwise.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
23
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 ## Globals
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
25
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 | Variable | Type |
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
27 |---------------------------------|------------------|
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 | [panic_handler](#panic_handler) | `void (*)(void)` |
376
b75fa5f47bf0 doc: document presence of (panic|trace)_data
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
29 | [panic_data](#panic_data) | `void *` |
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
30
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
31 ### panic\_handler
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
32
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 Global panic handler.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
34
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 The default implementation shows the last error and exit with code 1. The
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
36 function must not return so you have to implement a setjmp/longjmp or a
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 exception to be thrown.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
38
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 If the user defined function returns, panic routines will finally exit with code
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 1.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
376
b75fa5f47bf0 doc: document presence of (panic|trace)_data
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
42 ### panic\_data
b75fa5f47bf0 doc: document presence of (panic|trace)_data
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
43
b75fa5f47bf0 doc: document presence of (panic|trace)_data
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
44 Placeholder data for the handler if needed.
b75fa5f47bf0 doc: document presence of (panic|trace)_data
David Demelier <markand@malikania.fr>
parents: 253
diff changeset
45
253
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 ## Functions
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 ### panicf
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
49
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 Terminate the program using the [panic_handler](#panic_handler) routine.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
51
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 This function will first set the global error with the provided format
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 string using the [printf][] format and then call the handler.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
54
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 ```c
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 noreturn void
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 panicf(const char *fmt, ...)
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 ```
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 ### panicva
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
61
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
62 Like [panicf](#panicf) but using a `va_list`.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
63
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 ```c
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 noreturn void
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 panicva(const char *fmt, va_list ap)
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 ```
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
68
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
69 ### panic
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
70
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 Call the [panic_handler](#panic_handler) using the last registered error.
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
72
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
73 ```c
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 noreturn void
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 panic(void)
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 ```
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
77
c4da052c0def core: goodbye doxygen
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 [printf]: https://en.cppreference.com/w/c/io/fprintf