aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorPaul Eggert2019-04-08 12:59:22 -0700
committerPaul Eggert2019-04-08 13:01:21 -0700
commita038df77de7b1aa2d73a6478493b8838b59e4982 (patch)
treefbaa0087bab52a815dfd249d189301e53de0d345 /src/alloc.c
parent31e9087cdcd0b78b2247c3d8532290881abfbb08 (diff)
downloademacs-a038df77de7b1aa2d73a6478493b8838b59e4982.tar.gz
emacs-a038df77de7b1aa2d73a6478493b8838b59e4982.zip
Allow gap before first non-Lisp pseudovec member
Problem reported by Keith David Bershatsky in: https://lists.gnu.org/r/emacs-devel/2019-04/msg00259.html Solution suggested by Stefan Monnier in: https://lists.gnu.org/r/emacs-devel/2019-04/msg00282.html * src/buffer.h (BUFFER_LISP_SIZE): Simplify by using PSEUDOVECSIZE. (BUFFER_REST_SIZE): Simplify by using VECSIZE and BUFFER_LISP_SIZE. * src/lisp.h (PSEUDOVECSIZE): Base it on the last Lisp field, not the first non-Lisp field. All callers changed. Callers without Lisp fields changed to use ALLOCATE_PLAIN_PSEUDOVECTOR. (ALLOCATE_PLAIN_PSEUDOVECTOR): New macro.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/alloc.c b/src/alloc.c
index e48807c49ad..dd783863be8 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -3718,8 +3718,8 @@ Its value is void, and its function definition and property list are nil. */)
3718Lisp_Object 3718Lisp_Object
3719make_misc_ptr (void *a) 3719make_misc_ptr (void *a)
3720{ 3720{
3721 struct Lisp_Misc_Ptr *p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Misc_Ptr, pointer, 3721 struct Lisp_Misc_Ptr *p = ALLOCATE_PLAIN_PSEUDOVECTOR (struct Lisp_Misc_Ptr,
3722 PVEC_MISC_PTR); 3722 PVEC_MISC_PTR);
3723 p->pointer = a; 3723 p->pointer = a;
3724 return make_lisp_ptr (p, Lisp_Vectorlike); 3724 return make_lisp_ptr (p, Lisp_Vectorlike);
3725} 3725}
@@ -3729,7 +3729,7 @@ make_misc_ptr (void *a)
3729Lisp_Object 3729Lisp_Object
3730build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist) 3730build_overlay (Lisp_Object start, Lisp_Object end, Lisp_Object plist)
3731{ 3731{
3732 struct Lisp_Overlay *p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Overlay, next, 3732 struct Lisp_Overlay *p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Overlay, plist,
3733 PVEC_OVERLAY); 3733 PVEC_OVERLAY);
3734 Lisp_Object overlay = make_lisp_ptr (p, Lisp_Vectorlike); 3734 Lisp_Object overlay = make_lisp_ptr (p, Lisp_Vectorlike);
3735 OVERLAY_START (overlay) = start; 3735 OVERLAY_START (overlay) = start;
@@ -3743,8 +3743,8 @@ DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
3743 doc: /* Return a newly allocated marker which does not point at any place. */) 3743 doc: /* Return a newly allocated marker which does not point at any place. */)
3744 (void) 3744 (void)
3745{ 3745{
3746 struct Lisp_Marker *p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Marker, buffer, 3746 struct Lisp_Marker *p = ALLOCATE_PLAIN_PSEUDOVECTOR (struct Lisp_Marker,
3747 PVEC_MARKER); 3747 PVEC_MARKER);
3748 p->buffer = 0; 3748 p->buffer = 0;
3749 p->bytepos = 0; 3749 p->bytepos = 0;
3750 p->charpos = 0; 3750 p->charpos = 0;
@@ -3766,8 +3766,8 @@ build_marker (struct buffer *buf, ptrdiff_t charpos, ptrdiff_t bytepos)
3766 /* Every character is at least one byte. */ 3766 /* Every character is at least one byte. */
3767 eassert (charpos <= bytepos); 3767 eassert (charpos <= bytepos);
3768 3768
3769 struct Lisp_Marker *m = ALLOCATE_PSEUDOVECTOR (struct Lisp_Marker, buffer, 3769 struct Lisp_Marker *m = ALLOCATE_PLAIN_PSEUDOVECTOR (struct Lisp_Marker,
3770 PVEC_MARKER); 3770 PVEC_MARKER);
3771 m->buffer = buf; 3771 m->buffer = buf;
3772 m->charpos = charpos; 3772 m->charpos = charpos;
3773 m->bytepos = bytepos; 3773 m->bytepos = bytepos;
@@ -3821,8 +3821,8 @@ make_event_array (ptrdiff_t nargs, Lisp_Object *args)
3821Lisp_Object 3821Lisp_Object
3822make_user_ptr (void (*finalizer) (void *), void *p) 3822make_user_ptr (void (*finalizer) (void *), void *p)
3823{ 3823{
3824 struct Lisp_User_Ptr *uptr = ALLOCATE_PSEUDOVECTOR (struct Lisp_User_Ptr, 3824 struct Lisp_User_Ptr *uptr
3825 finalizer, PVEC_USER_PTR); 3825 = ALLOCATE_PLAIN_PSEUDOVECTOR (struct Lisp_User_Ptr, PVEC_USER_PTR);
3826 uptr->finalizer = finalizer; 3826 uptr->finalizer = finalizer;
3827 uptr->p = p; 3827 uptr->p = p;
3828 return make_lisp_ptr (uptr, Lisp_Vectorlike); 3828 return make_lisp_ptr (uptr, Lisp_Vectorlike);
@@ -3945,7 +3945,7 @@ FUNCTION. FUNCTION will be run once per finalizer object. */)
3945 (Lisp_Object function) 3945 (Lisp_Object function)
3946{ 3946{
3947 struct Lisp_Finalizer *finalizer 3947 struct Lisp_Finalizer *finalizer
3948 = ALLOCATE_PSEUDOVECTOR (struct Lisp_Finalizer, prev, PVEC_FINALIZER); 3948 = ALLOCATE_PSEUDOVECTOR (struct Lisp_Finalizer, function, PVEC_FINALIZER);
3949 finalizer->function = function; 3949 finalizer->function = function;
3950 finalizer->prev = finalizer->next = NULL; 3950 finalizer->prev = finalizer->next = NULL;
3951 finalizer_insert (&finalizers, finalizer); 3951 finalizer_insert (&finalizers, finalizer);