aboutsummaryrefslogtreecommitdiffstats
path: root/src/dbusbind.c
diff options
context:
space:
mode:
authorPaul Eggert2015-01-05 09:07:45 -0800
committerPaul Eggert2015-01-05 10:14:58 -0800
commit58f2d6ef32b28a787fcc4e0d98b3f331ceb2a68c (patch)
treed6d79ad7b7cceafc78c5a9c54f5be1ac441a8ed7 /src/dbusbind.c
parentd2cf05d1bac19d8564d0806f515b9f40fe57f4df (diff)
downloademacs-58f2d6ef32b28a787fcc4e0d98b3f331ceb2a68c.tar.gz
emacs-58f2d6ef32b28a787fcc4e0d98b3f331ceb2a68c.zip
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.
Diffstat (limited to 'src/dbusbind.c')
-rw-r--r--src/dbusbind.c39
1 files changed, 8 insertions, 31 deletions
diff --git a/src/dbusbind.c b/src/dbusbind.c
index 9de694954d4..3bdec0fa4a6 100644
--- a/src/dbusbind.c
+++ b/src/dbusbind.c
@@ -41,37 +41,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
41#endif 41#endif
42 42
43 43
44/* Subroutines. */
45static Lisp_Object Qdbus__init_bus;
46static Lisp_Object Qdbus_get_unique_name;
47static Lisp_Object Qdbus_message_internal;
48
49/* D-Bus error symbol. */
50static Lisp_Object Qdbus_error;
51
52/* Lisp symbols of the system and session buses. */
53static Lisp_Object QCdbus_system_bus, QCdbus_session_bus;
54
55/* Lisp symbol for method call timeout. */
56static Lisp_Object QCdbus_timeout;
57
58/* Lisp symbols of D-Bus types. */
59static Lisp_Object QCdbus_type_byte, QCdbus_type_boolean;
60static Lisp_Object QCdbus_type_int16, QCdbus_type_uint16;
61static Lisp_Object QCdbus_type_int32, QCdbus_type_uint32;
62static Lisp_Object QCdbus_type_int64, QCdbus_type_uint64;
63static Lisp_Object QCdbus_type_double, QCdbus_type_string;
64static Lisp_Object QCdbus_type_object_path, QCdbus_type_signature;
65#ifdef DBUS_TYPE_UNIX_FD
66static Lisp_Object QCdbus_type_unix_fd;
67#endif
68static Lisp_Object QCdbus_type_array, QCdbus_type_variant;
69static Lisp_Object QCdbus_type_struct, QCdbus_type_dict_entry;
70
71/* Lisp symbols of objects in `dbus-registered-objects-table'. */
72static Lisp_Object QCdbus_registered_serial, QCdbus_registered_method;
73static Lisp_Object QCdbus_registered_signal;
74
75/* Alist of D-Bus buses we are polling for messages. 44/* Alist of D-Bus buses we are polling for messages.
76 The key is the symbol or string of the bus, and the value is the 45 The key is the symbol or string of the bus, and the value is the
77 connection address. */ 46 connection address. */
@@ -1755,15 +1724,21 @@ syms_of_dbusbind (void)
1755 DEFSYM (Qdbus_message_internal, "dbus-message-internal"); 1724 DEFSYM (Qdbus_message_internal, "dbus-message-internal");
1756 defsubr (&Sdbus_message_internal); 1725 defsubr (&Sdbus_message_internal);
1757 1726
1727 /* D-Bus error symbol. */
1758 DEFSYM (Qdbus_error, "dbus-error"); 1728 DEFSYM (Qdbus_error, "dbus-error");
1759 Fput (Qdbus_error, Qerror_conditions, 1729 Fput (Qdbus_error, Qerror_conditions,
1760 list2 (Qdbus_error, Qerror)); 1730 list2 (Qdbus_error, Qerror));
1761 Fput (Qdbus_error, Qerror_message, 1731 Fput (Qdbus_error, Qerror_message,
1762 build_pure_c_string ("D-Bus error")); 1732 build_pure_c_string ("D-Bus error"));
1763 1733
1734 /* Lisp symbols of the system and session buses. */
1764 DEFSYM (QCdbus_system_bus, ":system"); 1735 DEFSYM (QCdbus_system_bus, ":system");
1765 DEFSYM (QCdbus_session_bus, ":session"); 1736 DEFSYM (QCdbus_session_bus, ":session");
1737
1738 /* Lisp symbol for method call timeout. */
1766 DEFSYM (QCdbus_timeout, ":timeout"); 1739 DEFSYM (QCdbus_timeout, ":timeout");
1740
1741 /* Lisp symbols of D-Bus types. */
1767 DEFSYM (QCdbus_type_byte, ":byte"); 1742 DEFSYM (QCdbus_type_byte, ":byte");
1768 DEFSYM (QCdbus_type_boolean, ":boolean"); 1743 DEFSYM (QCdbus_type_boolean, ":boolean");
1769 DEFSYM (QCdbus_type_int16, ":int16"); 1744 DEFSYM (QCdbus_type_int16, ":int16");
@@ -1783,6 +1758,8 @@ syms_of_dbusbind (void)
1783 DEFSYM (QCdbus_type_variant, ":variant"); 1758 DEFSYM (QCdbus_type_variant, ":variant");
1784 DEFSYM (QCdbus_type_struct, ":struct"); 1759 DEFSYM (QCdbus_type_struct, ":struct");
1785 DEFSYM (QCdbus_type_dict_entry, ":dict-entry"); 1760 DEFSYM (QCdbus_type_dict_entry, ":dict-entry");
1761
1762 /* Lisp symbols of objects in `dbus-registered-objects-table'. */
1786 DEFSYM (QCdbus_registered_serial, ":serial"); 1763 DEFSYM (QCdbus_registered_serial, ":serial");
1787 DEFSYM (QCdbus_registered_method, ":method"); 1764 DEFSYM (QCdbus_registered_method, ":method");
1788 DEFSYM (QCdbus_registered_signal, ":signal"); 1765 DEFSYM (QCdbus_registered_signal, ":signal");