aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.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/coding.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/coding.c')
-rw-r--r--src/coding.c51
1 files changed, 6 insertions, 45 deletions
diff --git a/src/coding.c b/src/coding.c
index f3f8dc18875..20c64762160 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -303,35 +303,6 @@ encode_coding_XXX (struct coding_system *coding)
303 303
304Lisp_Object Vcoding_system_hash_table; 304Lisp_Object Vcoding_system_hash_table;
305 305
306static Lisp_Object Qcoding_system, Qeol_type;
307static Lisp_Object Qcoding_aliases;
308Lisp_Object Qunix, Qdos;
309static Lisp_Object Qmac;
310Lisp_Object Qbuffer_file_coding_system;
311static Lisp_Object Qpost_read_conversion, Qpre_write_conversion;
312static Lisp_Object Qdefault_char;
313Lisp_Object Qno_conversion, Qundecided;
314Lisp_Object Qcharset, Qutf_8;
315static Lisp_Object Qiso_2022;
316static Lisp_Object Qutf_16, Qshift_jis, Qbig5;
317static Lisp_Object Qbig, Qlittle;
318static Lisp_Object Qcoding_system_history;
319static Lisp_Object Qvalid_codes;
320static Lisp_Object QCcategory, QCmnemonic, QCdefault_char;
321static Lisp_Object QCdecode_translation_table, QCencode_translation_table;
322static Lisp_Object QCpost_read_conversion, QCpre_write_conversion;
323static Lisp_Object QCascii_compatible_p;
324
325Lisp_Object Qcall_process, Qcall_process_region;
326Lisp_Object Qstart_process, Qopen_network_stream;
327static Lisp_Object Qtarget_idx;
328
329static Lisp_Object Qinsufficient_source, Qinvalid_source, Qinterrupted;
330
331/* If a symbol has this property, evaluate the value to define the
332 symbol as a coding system. */
333static Lisp_Object Qcoding_system_define_form;
334
335/* Format of end-of-line decided by system. This is Qunix on 306/* Format of end-of-line decided by system. This is Qunix on
336 Unix and Mac, Qdos on DOS/Windows. 307 Unix and Mac, Qdos on DOS/Windows.
337 This has an effect only for external encoding (i.e. for output to 308 This has an effect only for external encoding (i.e. for output to
@@ -340,17 +311,6 @@ static Lisp_Object system_eol_type;
340 311
341#ifdef emacs 312#ifdef emacs
342 313
343Lisp_Object Qcoding_system_p, Qcoding_system_error;
344
345/* Coding system emacs-mule and raw-text are for converting only
346 end-of-line format. */
347Lisp_Object Qemacs_mule, Qraw_text;
348Lisp_Object Qutf_8_emacs;
349
350#if defined (WINDOWSNT) || defined (CYGWIN)
351static Lisp_Object Qutf_16le;
352#endif
353
354/* Coding-systems are handed between Emacs Lisp programs and C internal 314/* Coding-systems are handed between Emacs Lisp programs and C internal
355 routines by the following three variables. */ 315 routines by the following three variables. */
356/* Coding system to be used to encode text for terminal display when 316/* Coding system to be used to encode text for terminal display when
@@ -359,11 +319,6 @@ struct coding_system safe_terminal_coding;
359 319
360#endif /* emacs */ 320#endif /* emacs */
361 321
362Lisp_Object Qtranslation_table;
363Lisp_Object Qtranslation_table_id;
364static Lisp_Object Qtranslation_table_for_decode;
365static Lisp_Object Qtranslation_table_for_encode;
366
367/* Two special coding systems. */ 322/* Two special coding systems. */
368static Lisp_Object Vsjis_coding_system; 323static Lisp_Object Vsjis_coding_system;
369static Lisp_Object Vbig5_coding_system; 324static Lisp_Object Vbig5_coding_system;
@@ -10903,6 +10858,7 @@ syms_of_coding (void)
10903 10858
10904 DEFSYM (Qcoding_system_p, "coding-system-p"); 10859 DEFSYM (Qcoding_system_p, "coding-system-p");
10905 10860
10861 /* Error signaled when there's a problem with detecting a coding system. */
10906 DEFSYM (Qcoding_system_error, "coding-system-error"); 10862 DEFSYM (Qcoding_system_error, "coding-system-error");
10907 Fput (Qcoding_system_error, Qerror_conditions, 10863 Fput (Qcoding_system_error, Qerror_conditions,
10908 listn (CONSTYPE_PURE, 2, Qcoding_system_error, Qerror)); 10864 listn (CONSTYPE_PURE, 2, Qcoding_system_error, Qerror));
@@ -10917,6 +10873,8 @@ syms_of_coding (void)
10917 10873
10918 DEFSYM (Qvalid_codes, "valid-codes"); 10874 DEFSYM (Qvalid_codes, "valid-codes");
10919 10875
10876 /* Coding system emacs-mule and raw-text are for converting only
10877 end-of-line format. */
10920 DEFSYM (Qemacs_mule, "emacs-mule"); 10878 DEFSYM (Qemacs_mule, "emacs-mule");
10921 10879
10922 DEFSYM (QCcategory, ":category"); 10880 DEFSYM (QCcategory, ":category");
@@ -10979,6 +10937,9 @@ syms_of_coding (void)
10979 DEFSYM (Qinsufficient_source, "insufficient-source"); 10937 DEFSYM (Qinsufficient_source, "insufficient-source");
10980 DEFSYM (Qinvalid_source, "invalid-source"); 10938 DEFSYM (Qinvalid_source, "invalid-source");
10981 DEFSYM (Qinterrupted, "interrupted"); 10939 DEFSYM (Qinterrupted, "interrupted");
10940
10941 /* If a symbol has this property, evaluate the value to define the
10942 symbol as a coding system. */
10982 DEFSYM (Qcoding_system_define_form, "coding-system-define-form"); 10943 DEFSYM (Qcoding_system_define_form, "coding-system-define-form");
10983 10944
10984 defsubr (&Scoding_system_p); 10945 defsubr (&Scoding_system_p);