mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-10 13:40:36 -08:00
Compute C decls for DEFSYMs automatically
Fixes Bug#15880. This patch also makes Q constants (e.g., Qnil) constant addresses from the C point of view. * make-docfile.c: Revamp to generate table of symbols, too. Include <stdbool.h>. (xstrdup): New function. (main): Don't process the same file twice. (SYMBOL): New constant in enum global_type. (struct symbol): Turn 'value' member into a union, either v.value for int or v.svalue for string. All uses changed. (add_global): New arg svalue, which overrides value, so that globals can have a string value. (close_emacs_global): New arg num_symbols; all uses changed. Output lispsym decl. (write_globals): Output symbol globals too. Output more ATTRIBUTE_CONST, now that Qnil etc. are C constants. Output defsym_name table. (scan_c_file): Move most of guts into ... (scan_c_stream): ... new function. Scan for DEFSYMs and record symbols found. Don't read past EOF if file doesn't end in newline. * alloc.c, bidi.c, buffer.c, bytecode.c, callint.c, casefiddle: * casetab.c, category.c, ccl.c, charset.c, chartab.c, cmds.c, coding.c: * composite.c, data.c, dbusbind.c, decompress.c, dired.c, dispnew.c: * doc.c, editfns.c, emacs.c, eval.c, fileio.c, fns.c, font.c, fontset.c: * frame.c, fringe.c, ftfont.c, ftxfont.c, gfilenotify.c, gnutls.c: * image.c, inotify.c, insdel.c, keyboard.c, keymap.c, lread.c: * macfont.m, macros.c, minibuf.c, nsfns.m, nsfont.m, nsimage.m: * nsmenu.m, nsselect.m, nsterm.m, print.c, process.c, profiler.c: * search.c, sound.c, syntax.c, term.c, terminal.c, textprop.c, undo.c: * window.c, xdisp.c, xfaces.c, xfns.c, xftfont.c, xmenu.c, xml.c: * xselect.c, xsettings.c, xterm.c: Remove Q vars that represent symbols (e.g., Qnil, Qt, Qemacs). These names are now defined automatically by make-docfile. * alloc.c (init_symbol): New function. (Fmake_symbol): Use it. (c_symbol_p): New function. (valid_lisp_object_p, purecopy): Use it. * alloc.c (marked_pinned_symbols): Use make_lisp_symbol instead of make_lisp_ptr. (garbage_collect_1): Mark lispsym symbols. (CHECK_ALLOCATED_AND_LIVE_SYMBOL): New macro. (mark_object): Use it. (sweep_symbols): Sweep lispsym symbols. (symbol_uses_obj): New function. (which_symbols): Use it. Work for lispsym symbols, too. (init_alloc_once): Initialize Vpurify_flag here; no need to wait, since Qt's address is already known now. (syms_of_alloc): Add lispsym count to symbols_consed. * buffer.c (init_buffer_once): Compare to Qnil, not to make_number (0), when testing whether storage is all bits zero. * dispextern (struct image_type): * font.c (font_property_table): * frame.c (struct frame_parm_table, frame_parms): * keyboard.c (scroll_bar_parts, struct event_head): * xdisp.c (struct props): Use XSYMBOL_INIT (Qfoo) and struct Lisp_Symbol * rather than &Qfoo and Lisp_Object *, since Qfoo is no longer an object whose address can be taken. All uses changed. * eval.c (run_hook): New function. Most uses of Frun_hooks changed to use it, so that they no longer need to take the address of a Lisp sym. (syms_of_eval): Don't use DEFSYM on Vrun_hooks, as it's a variable. * frame.c (syms_of_frame): Add defsyms for the frame_parms table. * keyboard.c (syms_of_keyboard): Don't DEFSYM Qmenu_bar here. DEFSYM Qdeactivate_mark before the corresponding var. * keymap.c (syms_of_keymap): Use DEFSYM for Qmenu_bar and Qmode_line instead of interning their symbols; this avoids duplicates. (LISP_INITIALLY, TAG_PTR) (DEFINE_LISP_SYMBOL_BEGIN, DEFINE_LISP_SYMBOL_END, XSYMBOL_INIT): New macros. (LISP_INITIALLY_ZERO): Use it. (enum symbol_interned, enum symbol_redirect, struct Lisp_Symbol) (EXFUN, DEFUN_ARGS_MANY, DEFUN_ARGS_UNEVALLED, DEFUN_ARGS_*): Move decls up, to avoid forward uses. Include globals.h earlier, too. (make_lisp_symbol): New function. (XSETSYMBOL): Use it. (DEFSYM): Now just a placeholder for make-docfile. * lread.c (DEFINE_SYMBOLS): Define, for globals.h. (intern_sym): New function, with body taken from old intern_driver. (intern_driver): Use it. Last arg is now Lisp integer, not ptrdiff_t. All uses changed. (define_symbol): New function. (init_obarray): Define the C symbols taken from lispsym. Use plain DEFSYM for Qt and Qnil. * syntax.c (init_syntax_once): No need to worry about Qchar_table_extra_slots.
This commit is contained in:
parent
d2cf05d1ba
commit
58f2d6ef32
94 changed files with 1015 additions and 1978 deletions
41
src/buffer.c
41
src/buffer.c
|
|
@ -115,41 +115,8 @@ static void reset_buffer_local_variables (struct buffer *, bool);
|
|||
due to user rplac'ing this alist or its elements. */
|
||||
Lisp_Object Vbuffer_alist;
|
||||
|
||||
static Lisp_Object Qkill_buffer_query_functions;
|
||||
|
||||
/* Hook run before changing a major mode. */
|
||||
static Lisp_Object Qchange_major_mode_hook;
|
||||
|
||||
Lisp_Object Qfirst_change_hook;
|
||||
Lisp_Object Qbefore_change_functions;
|
||||
Lisp_Object Qafter_change_functions;
|
||||
|
||||
static Lisp_Object Qfundamental_mode, Qmode_class, Qpermanent_local;
|
||||
static Lisp_Object Qpermanent_local_hook;
|
||||
|
||||
static Lisp_Object Qprotected_field;
|
||||
|
||||
static Lisp_Object QSFundamental; /* A string "Fundamental". */
|
||||
|
||||
static Lisp_Object Qkill_buffer_hook;
|
||||
static Lisp_Object Qbuffer_list_update_hook;
|
||||
|
||||
static Lisp_Object Qget_file_buffer;
|
||||
|
||||
static Lisp_Object Qoverlayp;
|
||||
|
||||
Lisp_Object Qpriority, Qbefore_string, Qafter_string;
|
||||
|
||||
static Lisp_Object Qevaporate;
|
||||
|
||||
Lisp_Object Qmodification_hooks;
|
||||
Lisp_Object Qinsert_in_front_hooks;
|
||||
Lisp_Object Qinsert_behind_hooks;
|
||||
|
||||
Lisp_Object Qchoice, Qrange, Qleft, Qright;
|
||||
Lisp_Object Qvertical_scroll_bar, Qhorizontal_scroll_bar;
|
||||
static Lisp_Object Qoverwrite_mode, Qfraction;
|
||||
|
||||
static void alloc_buffer_text (struct buffer *, ptrdiff_t);
|
||||
static void free_buffer_text (struct buffer *b);
|
||||
static struct Lisp_Overlay * copy_overlays (struct buffer *, struct Lisp_Overlay *);
|
||||
|
|
@ -1716,7 +1683,7 @@ cleaning up all windows currently displaying the buffer to be killed. */)
|
|||
return unbind_to (count, Qt);
|
||||
|
||||
/* Then run the hooks. */
|
||||
Frun_hooks (1, &Qkill_buffer_hook);
|
||||
run_hook (Qkill_buffer_hook);
|
||||
unbind_to (count, Qnil);
|
||||
}
|
||||
|
||||
|
|
@ -2740,7 +2707,7 @@ The first thing this function does is run
|
|||
the normal hook `change-major-mode-hook'. */)
|
||||
(void)
|
||||
{
|
||||
Frun_hooks (1, &Qchange_major_mode_hook);
|
||||
run_hook (Qchange_major_mode_hook);
|
||||
|
||||
/* Make sure none of the bindings in local_var_alist
|
||||
remain swapped in, in their symbols. */
|
||||
|
|
@ -5063,9 +5030,9 @@ init_buffer_once (void)
|
|||
/* Make sure all markable slots in buffer_defaults
|
||||
are initialized reasonably, so mark_buffer won't choke. */
|
||||
reset_buffer (&buffer_defaults);
|
||||
eassert (EQ (BVAR (&buffer_defaults, name), make_number (0)));
|
||||
eassert (NILP (BVAR (&buffer_defaults, name)));
|
||||
reset_buffer_local_variables (&buffer_defaults, 1);
|
||||
eassert (EQ (BVAR (&buffer_local_symbols, name), make_number (0)));
|
||||
eassert (NILP (BVAR (&buffer_local_symbols, name)));
|
||||
reset_buffer (&buffer_local_symbols);
|
||||
reset_buffer_local_variables (&buffer_local_symbols, 1);
|
||||
/* Prevent GC from getting confused. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue