diff options
| author | Philipp Stephani | 2017-06-12 10:57:39 +0200 |
|---|---|---|
| committer | Philipp Stephani | 2017-06-12 10:57:39 +0200 |
| commit | b49dd3b047bf07994d9577e08daba55f143a8bb1 (patch) | |
| tree | 8d02bdc9f532e9005b0f56ca57fd3e1f2ec1f019 | |
| parent | 9dc6e93b77ce0d920771060756e65779751fd5f7 (diff) | |
| download | emacs-b49dd3b047bf07994d9577e08daba55f143a8bb1.tar.gz emacs-b49dd3b047bf07994d9577e08daba55f143a8bb1.zip | |
emacs-module: Use __attribute__((nonnull))
Annotate all parameters with __attribute__((nonnull)) that may not be
NULL.
| -rw-r--r-- | src/emacs-module.h | 98 |
1 files changed, 67 insertions, 31 deletions
diff --git a/src/emacs-module.h b/src/emacs-module.h index 26b519a39cf..88cc38191b1 100644 --- a/src/emacs-module.h +++ b/src/emacs-module.h | |||
| @@ -35,6 +35,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 35 | # define EMACS_NOEXCEPT | 35 | # define EMACS_NOEXCEPT |
| 36 | #endif | 36 | #endif |
| 37 | 37 | ||
| 38 | #if defined __has_attribute && __has_attribute(__nonnull__) | ||
| 39 | # define EMACS_ATTRIBUTE_NONNULL(...) __attribute__((__nonnull__(__VA_ARGS__))) | ||
| 40 | #else | ||
| 41 | # define EMACS_ATTRIBUTE_NONNULL(...) | ||
| 42 | #endif | ||
| 43 | |||
| 38 | #ifdef __cplusplus | 44 | #ifdef __cplusplus |
| 39 | extern "C" { | 45 | extern "C" { |
| 40 | #endif | 46 | #endif |
| @@ -58,7 +64,8 @@ struct emacs_runtime | |||
| 58 | struct emacs_runtime_private *private_members; | 64 | struct emacs_runtime_private *private_members; |
| 59 | 65 | ||
| 60 | /* Return an environment pointer. */ | 66 | /* Return an environment pointer. */ |
| 61 | emacs_env *(*get_environment) (struct emacs_runtime *ert); | 67 | emacs_env *(*get_environment) (struct emacs_runtime *ert) |
| 68 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 62 | }; | 69 | }; |
| 63 | 70 | ||
| 64 | 71 | ||
| @@ -86,29 +93,36 @@ struct emacs_env_25 | |||
| 86 | /* Memory management. */ | 93 | /* Memory management. */ |
| 87 | 94 | ||
| 88 | emacs_value (*make_global_ref) (emacs_env *env, | 95 | emacs_value (*make_global_ref) (emacs_env *env, |
| 89 | emacs_value any_reference); | 96 | emacs_value any_reference) |
| 97 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 90 | 98 | ||
| 91 | void (*free_global_ref) (emacs_env *env, | 99 | void (*free_global_ref) (emacs_env *env, |
| 92 | emacs_value global_reference); | 100 | emacs_value global_reference) |
| 101 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 93 | 102 | ||
| 94 | /* Non-local exit handling. */ | 103 | /* Non-local exit handling. */ |
| 95 | 104 | ||
| 96 | enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env); | 105 | enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) |
| 106 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 97 | 107 | ||
| 98 | void (*non_local_exit_clear) (emacs_env *env); | 108 | void (*non_local_exit_clear) (emacs_env *env) |
| 109 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 99 | 110 | ||
| 100 | enum emacs_funcall_exit (*non_local_exit_get) | 111 | enum emacs_funcall_exit (*non_local_exit_get) |
| 101 | (emacs_env *env, | 112 | (emacs_env *env, |
| 102 | emacs_value *non_local_exit_symbol_out, | 113 | emacs_value *non_local_exit_symbol_out, |
| 103 | emacs_value *non_local_exit_data_out); | 114 | emacs_value *non_local_exit_data_out) |
| 115 | EMACS_ATTRIBUTE_NONNULL(1, 2, 3); | ||
| 104 | 116 | ||
| 105 | void (*non_local_exit_signal) (emacs_env *env, | 117 | void (*non_local_exit_signal) (emacs_env *env, |
| 106 | emacs_value non_local_exit_symbol, | 118 | emacs_value non_local_exit_symbol, |
| 107 | emacs_value non_local_exit_data); | 119 | emacs_value non_local_exit_data) |
| 120 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 108 | 121 | ||
| 109 | void (*non_local_exit_throw) (emacs_env *env, | 122 | void (*non_local_exit_throw) (emacs_env *env, |
| 110 | emacs_value tag, | 123 | emacs_value tag, |
| 111 | emacs_value value); | 124 | emacs_value value) |
| 125 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 112 | 126 | ||
| 113 | /* Function registration. */ | 127 | /* Function registration. */ |
| 114 | 128 | ||
| @@ -119,34 +133,45 @@ struct emacs_env_25 | |||
| 119 | ptrdiff_t nargs, | 133 | ptrdiff_t nargs, |
| 120 | emacs_value args[], | 134 | emacs_value args[], |
| 121 | void *) | 135 | void *) |
| 122 | EMACS_NOEXCEPT, | 136 | EMACS_NOEXCEPT |
| 137 | EMACS_ATTRIBUTE_NONNULL(1), | ||
| 123 | const char *documentation, | 138 | const char *documentation, |
| 124 | void *data); | 139 | void *data) |
| 140 | EMACS_ATTRIBUTE_NONNULL(1, 4); | ||
| 125 | 141 | ||
| 126 | emacs_value (*funcall) (emacs_env *env, | 142 | emacs_value (*funcall) (emacs_env *env, |
| 127 | emacs_value function, | 143 | emacs_value function, |
| 128 | ptrdiff_t nargs, | 144 | ptrdiff_t nargs, |
| 129 | emacs_value args[]); | 145 | emacs_value args[]) |
| 146 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 130 | 147 | ||
| 131 | emacs_value (*intern) (emacs_env *env, | 148 | emacs_value (*intern) (emacs_env *env, |
| 132 | const char *symbol_name); | 149 | const char *symbol_name) |
| 150 | EMACS_ATTRIBUTE_NONNULL(1, 2); | ||
| 133 | 151 | ||
| 134 | /* Type conversion. */ | 152 | /* Type conversion. */ |
| 135 | 153 | ||
| 136 | emacs_value (*type_of) (emacs_env *env, | 154 | emacs_value (*type_of) (emacs_env *env, |
| 137 | emacs_value value); | 155 | emacs_value value) |
| 156 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 138 | 157 | ||
| 139 | bool (*is_not_nil) (emacs_env *env, emacs_value value); | 158 | bool (*is_not_nil) (emacs_env *env, emacs_value value) |
| 159 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 140 | 160 | ||
| 141 | bool (*eq) (emacs_env *env, emacs_value a, emacs_value b); | 161 | bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) |
| 162 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 142 | 163 | ||
| 143 | intmax_t (*extract_integer) (emacs_env *env, emacs_value value); | 164 | intmax_t (*extract_integer) (emacs_env *env, emacs_value value) |
| 165 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 144 | 166 | ||
| 145 | emacs_value (*make_integer) (emacs_env *env, intmax_t value); | 167 | emacs_value (*make_integer) (emacs_env *env, intmax_t value) |
| 168 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 146 | 169 | ||
| 147 | double (*extract_float) (emacs_env *env, emacs_value value); | 170 | double (*extract_float) (emacs_env *env, emacs_value value) |
| 171 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 148 | 172 | ||
| 149 | emacs_value (*make_float) (emacs_env *env, double value); | 173 | emacs_value (*make_float) (emacs_env *env, double value) |
| 174 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 150 | 175 | ||
| 151 | /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 | 176 | /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 |
| 152 | null-terminated string. | 177 | null-terminated string. |
| @@ -163,40 +188,51 @@ struct emacs_env_25 | |||
| 163 | bool (*copy_string_contents) (emacs_env *env, | 188 | bool (*copy_string_contents) (emacs_env *env, |
| 164 | emacs_value value, | 189 | emacs_value value, |
| 165 | char *buffer, | 190 | char *buffer, |
| 166 | ptrdiff_t *size_inout); | 191 | ptrdiff_t *size_inout) |
| 192 | EMACS_ATTRIBUTE_NONNULL(1, 4); | ||
| 167 | 193 | ||
| 168 | /* Create a Lisp string from a utf8 encoded string. */ | 194 | /* Create a Lisp string from a utf8 encoded string. */ |
| 169 | emacs_value (*make_string) (emacs_env *env, | 195 | emacs_value (*make_string) (emacs_env *env, |
| 170 | const char *contents, ptrdiff_t length); | 196 | const char *contents, ptrdiff_t length) |
| 197 | EMACS_ATTRIBUTE_NONNULL(1, 2); | ||
| 171 | 198 | ||
| 172 | /* Embedded pointer type. */ | 199 | /* Embedded pointer type. */ |
| 173 | emacs_value (*make_user_ptr) (emacs_env *env, | 200 | emacs_value (*make_user_ptr) (emacs_env *env, |
| 174 | void (*fin) (void *) EMACS_NOEXCEPT, | 201 | void (*fin) (void *) EMACS_NOEXCEPT, |
| 175 | void *ptr); | 202 | void *ptr) |
| 203 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 176 | 204 | ||
| 177 | void *(*get_user_ptr) (emacs_env *env, emacs_value uptr); | 205 | void *(*get_user_ptr) (emacs_env *env, emacs_value uptr) |
| 178 | void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr); | 206 | EMACS_ATTRIBUTE_NONNULL(1); |
| 207 | void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr) | ||
| 208 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 179 | 209 | ||
| 180 | void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) | 210 | void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) |
| 181 | (void *) EMACS_NOEXCEPT; | 211 | (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); |
| 182 | void (*set_user_finalizer) (emacs_env *env, | 212 | void (*set_user_finalizer) (emacs_env *env, |
| 183 | emacs_value uptr, | 213 | emacs_value uptr, |
| 184 | void (*fin) (void *) EMACS_NOEXCEPT); | 214 | void (*fin) (void *) EMACS_NOEXCEPT) |
| 215 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 185 | 216 | ||
| 186 | /* Vector functions. */ | 217 | /* Vector functions. */ |
| 187 | emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i); | 218 | emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i) |
| 219 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 188 | 220 | ||
| 189 | void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i, | 221 | void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i, |
| 190 | emacs_value val); | 222 | emacs_value val) |
| 223 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 191 | 224 | ||
| 192 | ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec); | 225 | ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec) |
| 226 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 193 | 227 | ||
| 194 | /* Returns whether a quit is pending. */ | 228 | /* Returns whether a quit is pending. */ |
| 195 | bool (*should_quit) (emacs_env *env); | 229 | bool (*should_quit) (emacs_env *env) |
| 230 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 196 | }; | 231 | }; |
| 197 | 232 | ||
| 198 | /* Every module should define a function as follows. */ | 233 | /* Every module should define a function as follows. */ |
| 199 | extern int emacs_module_init (struct emacs_runtime *ert); | 234 | extern int emacs_module_init (struct emacs_runtime *ert) |
| 235 | EMACS_ATTRIBUTE_NONNULL(1); | ||
| 200 | 236 | ||
| 201 | #ifdef __cplusplus | 237 | #ifdef __cplusplus |
| 202 | } | 238 | } |