1 /* Structure size (for version checking). */ 2 ptrdiff_t size; 3 4 /* Private data; users should not touch this. */ 5 struct emacs_env_private *private_members; 6 7 /* Memory management. */ 8 9 emacs_value (*make_global_ref) (emacs_env *env, 10 emacs_value any_reference) 11 EMACS_ATTRIBUTE_NONNULL(1); 12 13 void (*free_global_ref) (emacs_env *env, 14 emacs_value global_reference) 15 EMACS_ATTRIBUTE_NONNULL(1); 16 17 /* Non-local exit handling. */ 18 19 enum emacs_funcall_exit (*non_local_exit_check) (emacs_env *env) 20 EMACS_ATTRIBUTE_NONNULL(1); 21 22 void (*non_local_exit_clear) (emacs_env *env) 23 EMACS_ATTRIBUTE_NONNULL(1); 24 25 enum emacs_funcall_exit (*non_local_exit_get) 26 (emacs_env *env, 27 emacs_value *non_local_exit_symbol_out, 28 emacs_value *non_local_exit_data_out) 29 EMACS_ATTRIBUTE_NONNULL(1, 2, 3); 30 31 void (*non_local_exit_signal) (emacs_env *env, 32 emacs_value non_local_exit_symbol, 33 emacs_value non_local_exit_data) 34 EMACS_ATTRIBUTE_NONNULL(1); 35 36 void (*non_local_exit_throw) (emacs_env *env, 37 emacs_value tag, 38 emacs_value value) 39 EMACS_ATTRIBUTE_NONNULL(1); 40 41 /* Function registration. */ 42 43 emacs_value (*make_function) (emacs_env *env, 44 ptrdiff_t min_arity, 45 ptrdiff_t max_arity, 46 emacs_value (*function) (emacs_env *env, 47 ptrdiff_t nargs, 48 emacs_value args[], 49 void *) 50 EMACS_NOEXCEPT 51 EMACS_ATTRIBUTE_NONNULL(1), 52 const char *documentation, 53 void *data) 54 EMACS_ATTRIBUTE_NONNULL(1, 4); 55 56 emacs_value (*funcall) (emacs_env *env, 57 emacs_value function, 58 ptrdiff_t nargs, 59 emacs_value args[]) 60 EMACS_ATTRIBUTE_NONNULL(1); 61 62 emacs_value (*intern) (emacs_env *env, 63 const char *symbol_name) 64 EMACS_ATTRIBUTE_NONNULL(1, 2); 65 66 /* Type conversion. */ 67 68 emacs_value (*type_of) (emacs_env *env, 69 emacs_value value) 70 EMACS_ATTRIBUTE_NONNULL(1); 71 72 bool (*is_not_nil) (emacs_env *env, emacs_value value) 73 EMACS_ATTRIBUTE_NONNULL(1); 74 75 bool (*eq) (emacs_env *env, emacs_value a, emacs_value b) 76 EMACS_ATTRIBUTE_NONNULL(1); 77 78 intmax_t (*extract_integer) (emacs_env *env, emacs_value value) 79 EMACS_ATTRIBUTE_NONNULL(1); 80 81 emacs_value (*make_integer) (emacs_env *env, intmax_t value) 82 EMACS_ATTRIBUTE_NONNULL(1); 83 84 double (*extract_float) (emacs_env *env, emacs_value value) 85 EMACS_ATTRIBUTE_NONNULL(1); 86 87 emacs_value (*make_float) (emacs_env *env, double value) 88 EMACS_ATTRIBUTE_NONNULL(1); 89 90 /* Copy the content of the Lisp string VALUE to BUFFER as an utf8 91 NUL-terminated string. 92 93 SIZE must point to the total size of the buffer. If BUFFER is 94 NULL or if SIZE is not big enough, write the required buffer size 95 to SIZE and return true. 96 97 Note that SIZE must include the last NUL byte (e.g. "abc" needs 98 a buffer of size 4). 99 100 Return true if the string was successfully copied. */ 101 102 bool (*copy_string_contents) (emacs_env *env, 103 emacs_value value, 104 char *buffer, 105 ptrdiff_t *size_inout) 106 EMACS_ATTRIBUTE_NONNULL(1, 4); 107 108 /* Create a Lisp string from a utf8 encoded string. */ 109 emacs_value (*make_string) (emacs_env *env, 110 const char *contents, ptrdiff_t length) 111 EMACS_ATTRIBUTE_NONNULL(1, 2); 112 113 /* Embedded pointer type. */ 114 emacs_value (*make_user_ptr) (emacs_env *env, 115 void (*fin) (void *) EMACS_NOEXCEPT, 116 void *ptr) 117 EMACS_ATTRIBUTE_NONNULL(1); 118 119 void *(*get_user_ptr) (emacs_env *env, emacs_value uptr) 120 EMACS_ATTRIBUTE_NONNULL(1); 121 void (*set_user_ptr) (emacs_env *env, emacs_value uptr, void *ptr) 122 EMACS_ATTRIBUTE_NONNULL(1); 123 124 void (*(*get_user_finalizer) (emacs_env *env, emacs_value uptr)) 125 (void *) EMACS_NOEXCEPT EMACS_ATTRIBUTE_NONNULL(1); 126 void (*set_user_finalizer) (emacs_env *env, 127 emacs_value uptr, 128 void (*fin) (void *) EMACS_NOEXCEPT) 129 EMACS_ATTRIBUTE_NONNULL(1); 130 131 /* Vector functions. */ 132 emacs_value (*vec_get) (emacs_env *env, emacs_value vec, ptrdiff_t i) 133 EMACS_ATTRIBUTE_NONNULL(1); 134 135 void (*vec_set) (emacs_env *env, emacs_value vec, ptrdiff_t i, 136 emacs_value val) 137 EMACS_ATTRIBUTE_NONNULL(1); 138 139 ptrdiff_t (*vec_size) (emacs_env *env, emacs_value vec) 140 EMACS_ATTRIBUTE_NONNULL(1); 141