diff options
| author | Paul Eggert | 2017-12-12 12:59:57 -0800 |
|---|---|---|
| committer | Paul Eggert | 2017-12-12 15:17:12 -0800 |
| commit | 244346c744a6700d320a0a0fe8c796be3b3ff023 (patch) | |
| tree | 145dc0ba87fcf82de44e62ecbdeb70fe86c28c7a /etc/DEBUG | |
| parent | c705f7250d6f17f1682ee5ad7eec516dbf6c3916 (diff) | |
| download | emacs-244346c744a6700d320a0a0fe8c796be3b3ff023.tar.gz emacs-244346c744a6700d320a0a0fe8c796be3b3ff023.zip | |
Reimplement Lisp_Object as pointer-to-incomplete
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.
Diffstat (limited to 'etc/DEBUG')
| -rw-r--r-- | etc/DEBUG | 7 |
1 files changed, 4 insertions, 3 deletions
| @@ -140,9 +140,10 @@ If you attached the debugger to a running Emacs, type "continue" into | |||
| 140 | the *gud-emacs* buffer and press RET. | 140 | the *gud-emacs* buffer and press RET. |
| 141 | 141 | ||
| 142 | Many variables you will encounter while debugging are Lisp objects. | 142 | Many variables you will encounter while debugging are Lisp objects. |
| 143 | These are displayed as integer values (or structures, if you used the | 143 | These are normally displayed as opaque pointers or integers that are |
| 144 | "--enable-check-lisp-object-type" option at configure time) that are | 144 | hard to interpret, especially if they represent long lists. |
| 145 | hard to interpret, especially if they represent long lists. You can | 145 | (They are instead displayed as structures containing these opaque |
| 146 | values, if --enable-check-lisp-object-type is in effect.) You can | ||
| 146 | use the 'pp' command to display them in their Lisp form. That command | 147 | use the 'pp' command to display them in their Lisp form. That command |
| 147 | displays its output on the standard error stream, which you | 148 | displays its output on the standard error stream, which you |
| 148 | can redirect to a file using "M-x redirect-debugging-output". | 149 | can redirect to a file using "M-x redirect-debugging-output". |