X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fopaque.c;h=976ecd7471ad6cb0d5b3c37184437074da5e00f1;hb=c9a88265cd5f978b60830d4ef5e6f8b2246c3072;hp=b36abf156fc411354b260b597edf28edab25d061;hpb=ea1ea793fe6e244ef5555ed983423a204101af13;p=chise%2Fxemacs-chise.git.1 diff --git a/src/opaque.c b/src/opaque.c index b36abf1..976ecd7 100644 --- a/src/opaque.c +++ b/src/opaque.c @@ -44,7 +44,7 @@ Lisp_Object Vopaque_ptr_free_list; static void print_opaque (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) { - CONST Lisp_Opaque *p = XOPAQUE (obj); + const Lisp_Opaque *p = XOPAQUE (obj); char buf[200]; sprintf (buf, "#", @@ -52,11 +52,17 @@ print_opaque (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) write_c_string (buf, printcharfun); } +inline static size_t +aligned_sizeof_opaque (size_t opaque_size) +{ + return ALIGN_SIZE (offsetof (Lisp_Opaque, data) + opaque_size, + ALIGNOF (max_align_t)); +} + static size_t -sizeof_opaque (CONST void *header) +sizeof_opaque (const void *header) { - CONST Lisp_Opaque *p = (CONST Lisp_Opaque *) header; - return offsetof (Lisp_Opaque, data) + p->size; + return aligned_sizeof_opaque (((const Lisp_Opaque *) header)->size); } /* Return an opaque object of size SIZE. @@ -64,10 +70,10 @@ sizeof_opaque (CONST void *header) If DATA is OPAQUE_UNINIT, the object's data is uninitialized. Else the object's data is initialized by copying from DATA. */ Lisp_Object -make_opaque (size_t size, CONST void *data) +make_opaque (const void *data, size_t size) { Lisp_Opaque *p = (Lisp_Opaque *) - alloc_lcrecord (offsetof (Lisp_Opaque, data) + size, &lrecord_opaque); + alloc_lcrecord (aligned_sizeof_opaque (size), &lrecord_opaque); p->size = size; if (data == OPAQUE_CLEAR) @@ -121,10 +127,10 @@ DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("opaque", opaque, static void print_opaque_ptr (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag) { - CONST Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj); + const Lisp_Opaque_Ptr *p = XOPAQUE_PTR (obj); char buf[200]; - sprintf (buf, "#", + sprintf (buf, "#", (long)(p->ptr), (unsigned long) p); write_c_string (buf, printcharfun); } @@ -141,7 +147,7 @@ hash_opaque_ptr (Lisp_Object obj, int depth) return (unsigned long) XOPAQUE_PTR (obj)->ptr; } -DEFINE_LRECORD_IMPLEMENTATION ("opaque_ptr", opaque_ptr, +DEFINE_LRECORD_IMPLEMENTATION ("opaque-ptr", opaque_ptr, 0, print_opaque_ptr, 0, equal_opaque_ptr, hash_opaque_ptr, 0, Lisp_Opaque_Ptr); @@ -173,5 +179,8 @@ reinit_opaque_once_early (void) void init_opaque_once_early (void) { + INIT_LRECORD_IMPLEMENTATION (opaque); + INIT_LRECORD_IMPLEMENTATION (opaque_ptr); + reinit_opaque_once_early (); }