Move union emacs_align_type to alloc.c
* src/alloc.c (union emacs_align_type): Move to here ... * src/lisp.h: ... from here, and uncomment out some of the types that alloc.c can see but lisp.h cannot.
This commit is contained in:
parent
92278640ba
commit
c4faf78a98
2 changed files with 41 additions and 41 deletions
40
src/alloc.c
40
src/alloc.c
|
@ -104,6 +104,46 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
|
|||
#include "w32heap.h" /* for sbrk */
|
||||
#endif
|
||||
|
||||
/* A type with alignment at least as large as any object that Emacs
|
||||
allocates. This is not max_align_t because some platforms (e.g.,
|
||||
mingw) have buggy malloc implementations that do not align for
|
||||
max_align_t. This union contains types of all GCALIGNED_STRUCT
|
||||
components visible here. */
|
||||
union emacs_align_type
|
||||
{
|
||||
struct frame frame;
|
||||
struct Lisp_Bignum Lisp_Bignum;
|
||||
struct Lisp_Bool_Vector Lisp_Bool_Vector;
|
||||
struct Lisp_Char_Table Lisp_Char_Table;
|
||||
struct Lisp_CondVar Lisp_CondVar;
|
||||
struct Lisp_Finalizer Lisp_Finalizer;
|
||||
struct Lisp_Float Lisp_Float;
|
||||
struct Lisp_Hash_Table Lisp_Hash_Table;
|
||||
struct Lisp_Marker Lisp_Marker;
|
||||
struct Lisp_Misc_Ptr Lisp_Misc_Ptr;
|
||||
struct Lisp_Mutex Lisp_Mutex;
|
||||
struct Lisp_Overlay Lisp_Overlay;
|
||||
struct Lisp_Sub_Char_Table Lisp_Sub_Char_Table;
|
||||
struct Lisp_Subr Lisp_Subr;
|
||||
struct Lisp_User_Ptr Lisp_User_Ptr;
|
||||
struct Lisp_Vector Lisp_Vector;
|
||||
struct terminal terminal;
|
||||
struct thread_state thread_state;
|
||||
struct window window;
|
||||
|
||||
/* Omit the following since they would require including process.h
|
||||
etc. In practice their alignments never exceed that of the
|
||||
structs already listed. */
|
||||
#if 0
|
||||
struct Lisp_Module_Function Lisp_Module_Function;
|
||||
struct Lisp_Process Lisp_Process;
|
||||
struct save_window_data save_window_data;
|
||||
struct scroll_bar scroll_bar;
|
||||
struct xwidget_view xwidget_view;
|
||||
struct xwidget xwidget;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* MALLOC_SIZE_NEAR (N) is a good number to pass to malloc when
|
||||
allocating a block of memory with size close to N bytes.
|
||||
For best results N should be a power of 2.
|
||||
|
|
42
src/lisp.h
42
src/lisp.h
|
@ -278,7 +278,7 @@ error !;
|
|||
and does not contain a GC-aligned struct or union, putting
|
||||
GCALIGNED_STRUCT after its closing '}' can help the compiler
|
||||
generate better code. Also, such structs should be added to the
|
||||
emacs_align_type union.
|
||||
emacs_align_type union in alloc.c.
|
||||
|
||||
Although these macros are reasonably portable, they are not
|
||||
guaranteed on non-GCC platforms, as C11 does not require support
|
||||
|
@ -5060,46 +5060,6 @@ maybe_gc (void)
|
|||
maybe_garbage_collect ();
|
||||
}
|
||||
|
||||
/* A type with alignment at least as large as any object that Emacs
|
||||
allocates. This is not max_align_t because some platforms (e.g.,
|
||||
mingw) have buggy malloc implementations that do not align for
|
||||
max_align_t. This union contains types of all GCALIGNED_STRUCT
|
||||
components visible here. */
|
||||
union emacs_align_type
|
||||
{
|
||||
struct Lisp_Bool_Vector Lisp_Bool_Vector;
|
||||
struct Lisp_Char_Table Lisp_Char_Table;
|
||||
struct Lisp_CondVar Lisp_CondVar;
|
||||
struct Lisp_Finalizer Lisp_Finalizer;
|
||||
struct Lisp_Float Lisp_Float;
|
||||
struct Lisp_Hash_Table Lisp_Hash_Table;
|
||||
struct Lisp_Marker Lisp_Marker;
|
||||
struct Lisp_Misc_Ptr Lisp_Misc_Ptr;
|
||||
struct Lisp_Mutex Lisp_Mutex;
|
||||
struct Lisp_Overlay Lisp_Overlay;
|
||||
struct Lisp_Sub_Char_Table Lisp_Sub_Char_Table;
|
||||
struct Lisp_Subr Lisp_Subr;
|
||||
struct Lisp_User_Ptr Lisp_User_Ptr;
|
||||
struct Lisp_Vector Lisp_Vector;
|
||||
struct thread_state thread_state;
|
||||
|
||||
/* Omit the following since they would require including bignum.h,
|
||||
frame.h etc., and in practice their alignments never exceed that
|
||||
of the structs already listed. */
|
||||
#if 0
|
||||
struct frame frame;
|
||||
struct Lisp_Bignum Lisp_Bignum;
|
||||
struct Lisp_Module_Function Lisp_Module_Function;
|
||||
struct Lisp_Process Lisp_Process;
|
||||
struct save_window_data save_window_data;
|
||||
struct scroll_bar scroll_bar;
|
||||
struct terminal terminal;
|
||||
struct window window;
|
||||
struct xwidget xwidget;
|
||||
struct xwidget_view xwidget_view;
|
||||
#endif
|
||||
};
|
||||
|
||||
INLINE_HEADER_END
|
||||
|
||||
#endif /* EMACS_LISP_H */
|
||||
|
|
Loading…
Add table
Reference in a new issue