• Paul Eggert's avatar
    Reimplement Lisp_Object as pointer-to-incomplete · 244346c7
    Paul Eggert authored
    This makes Lisp_Object values opaque pointers instead of integers,
    which helps avoid the same sort of typos that
    CHECK_LISP_OBJECT_TYPE helps to avoid, without having to wrap
    pointers inside structures.  This also looks forward to supporting
    -fcheck-pointer-bounds.
    * etc/DEBUG:
    * src/.gdbinit (Lisp_Object_Printer.to_string):
    Lisp_Object can be a pointer type now.
    * src/alloc.c (macro_XPNTR, XPNTR):
    * src/emacs-module.c (value_to_lisp_bits, lisp_to_value_bits):
    * src/lisp.h (lisp_h_XLI, lisp_h_XIL):
    (lisp_h_XUNTAG) [USE_LSB_TAG]:
    (XUNTAG) [!USE_LSB_TAG]:
    (Lisp_Object, TAG_PTR, make_lisp_symbol):
    Support new Lisp_Object implementation as a pointer to an
    incomplete type.  Keep pointers pointers, as much as possible.
    * src/alloc.c (macro_XPNTR_OR_SYMBOL_OFFSET, XPNTR_OR_SYMBOL_OFFSET):
    Remove.  All uses replaced by plain XPNTR.
    * src/emacs-module.c: Work around GCC bug 83162.
    * src/lisp.h (LISP_WORDS_ARE_POINTERS, lisp_h_XLP, lisp_h_XPL):
    (XLP, XPL) [DEFINE_KEY_OPS_AS_MACROS]:
    New macros.
    (Lisp_Word, untagged_ptr, Lisp_Word_tag): New types.
    (XLP, XPL): New inline functions.
    (TAG_PTR): Now expands to an initializer, not an expression.
    All uses changed.
    (TAG_SYMOFFSET, XLI_BUILTIN_LISPSYM): Remove.  All uses removed.
    (LISPSYM_INITIALLY): Redo in terms of the new TAG_PTR.
    (NIL_IS_ZERO): Redo without XLI_BUILTIN_LISPSYM.
    * src/xwidget.c (webkit_javascript_finished_cb): Use XPL
    instead of XIL with a non-EMACS_INT arg.
    (Fxwidget_webkit_execute_script): Use XLP instead of XLI
    followed by two conversions.
    244346c7
.gdbinit 32.7 KB