aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 3ac2bda94c5..31028e14679 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -1418,13 +1418,25 @@ struct Lisp_Save_Value
1418 } data[4]; 1418 } data[4];
1419 }; 1419 };
1420 1420
1421/* Compatibility macro to set and extract saved pointer. */ 1421/* Macro to set and extract Nth saved pointer. Type
1422 checking is ugly because it's used as an lvalue. */
1422 1423
1423#define XSAVE_POINTER(obj) XSAVE_VALUE (obj)->data[0].pointer 1424#define XSAVE_POINTER(obj, n) \
1425 XSAVE_VALUE (obj)->data[(eassert (XSAVE_VALUE (obj)->type \
1426 ## n == SAVE_POINTER), n)].pointer
1424 1427
1425/* Likewise for the saved integer. */ 1428/* Likewise for the saved integer. */
1426 1429
1427#define XSAVE_INTEGER(obj) XSAVE_VALUE (obj)->data[1].integer 1430#define XSAVE_INTEGER(obj, n) \
1431 XSAVE_VALUE (obj)->data[(eassert (XSAVE_VALUE (obj)->type \
1432 ## n == SAVE_INTEGER), n)].integer
1433
1434/* Macro to extract Nth saved object. This is never used as
1435 an lvalue, so we can do more convenient type checking. */
1436
1437#define XSAVE_OBJECT(obj, n) \
1438 (eassert (XSAVE_VALUE (obj)->type ## n == SAVE_OBJECT), \
1439 XSAVE_VALUE (obj)->data[n].object)
1428 1440
1429/* A miscellaneous object, when it's on the free list. */ 1441/* A miscellaneous object, when it's on the free list. */
1430struct Lisp_Free 1442struct Lisp_Free
@@ -2926,7 +2938,6 @@ extern void memory_warnings (void *, void (*warnfun) (const char *));
2926 2938
2927/* Defined in alloc.c. */ 2939/* Defined in alloc.c. */
2928extern void check_pure_size (void); 2940extern void check_pure_size (void);
2929extern Lisp_Object allocate_misc (enum Lisp_Misc_Type);
2930extern void free_misc (Lisp_Object); 2941extern void free_misc (Lisp_Object);
2931extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT); 2942extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT);
2932extern void malloc_warning (const char *); 2943extern void malloc_warning (const char *);
@@ -3012,8 +3023,8 @@ extern bool abort_on_gc;
3012extern Lisp_Object make_float (double); 3023extern Lisp_Object make_float (double);
3013extern void display_malloc_warning (void); 3024extern void display_malloc_warning (void);
3014extern ptrdiff_t inhibit_garbage_collection (void); 3025extern ptrdiff_t inhibit_garbage_collection (void);
3026extern Lisp_Object format_save_value (const char *, ...);
3015extern Lisp_Object make_save_value (void *, ptrdiff_t); 3027extern Lisp_Object make_save_value (void *, ptrdiff_t);
3016extern void free_save_value (Lisp_Object);
3017extern Lisp_Object build_overlay (Lisp_Object, Lisp_Object, Lisp_Object); 3028extern Lisp_Object build_overlay (Lisp_Object, Lisp_Object, Lisp_Object);
3018extern void free_marker (Lisp_Object); 3029extern void free_marker (Lisp_Object);
3019extern void free_cons (struct Lisp_Cons *); 3030extern void free_cons (struct Lisp_Cons *);