Mercurial > emacs
changeset 56198:a803de48faef
(SAFE_ALLOCA_LISP): New macro to allocate Lisp_Objects.
Temporarily inhibits GC if memory is xmalloc'ed, as the Lisp_Objects
in that memory area are unknown to GC. Add comments.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Mon, 21 Jun 2004 22:35:29 +0000 |
parents | fb8588385aac |
children | c0ad262446d6 |
files | src/lisp.h |
diffstat | 1 files changed, 20 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lisp.h Mon Jun 21 22:35:00 2004 +0000 +++ b/src/lisp.h Mon Jun 21 22:35:29 2004 +0000 @@ -3256,6 +3256,8 @@ #define USE_SAFE_ALLOCA \ int sa_count = SPECPDL_INDEX () +/* SAFE_ALLOCA allocates a simple buffer. */ + #define SAFE_ALLOCA(buf, type, size) \ do { \ if ((size) < MAX_ALLOCA) \ @@ -3268,6 +3270,24 @@ } \ } while (0) +/* SAFE_ALLOCA_LISP allocates an array of Lisp_Objects. + Temporarily inhibits GC since that array is unknow to GC. */ + +#define SAFE_ALLOCA_LISP(buf, size) \ + do { \ + if ((size) < MAX_ALLOCA) \ + buf = (Lisp_Object *) alloca (size); \ + else \ + { \ + buf = (Lisp_Object *) xmalloc (size); \ + inhibit_garbage_collection(); \ + record_unwind_protect (safe_alloca_unwind, \ + make_save_value (buf, 0)); \ + } \ + } while (0) + +/* SAFE_FREE frees xmalloced memory and enables GC as needed. */ + #define SAFE_FREE(size) \ do { \ if ((size) >= MAX_ALLOCA) \