diff options
| author | Paul Eggert | 2015-01-05 09:07:45 -0800 |
|---|---|---|
| committer | Paul Eggert | 2015-01-05 10:14:58 -0800 |
| commit | 58f2d6ef32b28a787fcc4e0d98b3f331ceb2a68c (patch) | |
| tree | d6d79ad7b7cceafc78c5a9c54f5be1ac441a8ed7 /src/xfaces.c | |
| parent | d2cf05d1bac19d8564d0806f515b9f40fe57f4df (diff) | |
| download | emacs-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/xfaces.c')
| -rw-r--r-- | src/xfaces.c | 111 |
1 files changed, 28 insertions, 83 deletions
diff --git a/src/xfaces.c b/src/xfaces.c index 0600f53ba1e..6ecd857d685 100644 --- a/src/xfaces.c +++ b/src/xfaces.c | |||
| @@ -278,57 +278,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 278 | 278 | ||
| 279 | #define FACE_CACHE_BUCKETS_SIZE 1001 | 279 | #define FACE_CACHE_BUCKETS_SIZE 1001 |
| 280 | 280 | ||
| 281 | /* Keyword symbols used for face attribute names. */ | ||
| 282 | |||
| 283 | Lisp_Object QCfamily, QCheight, QCweight, QCslant; | ||
| 284 | static Lisp_Object QCunderline; | ||
| 285 | static Lisp_Object QCinverse_video, QCstipple; | ||
| 286 | Lisp_Object QCforeground, QCbackground; | ||
| 287 | Lisp_Object QCwidth; | ||
| 288 | static Lisp_Object QCfont, QCbold, QCitalic; | ||
| 289 | static Lisp_Object QCreverse_video; | ||
| 290 | static Lisp_Object QCoverline, QCstrike_through, QCbox, QCinherit; | ||
| 291 | static Lisp_Object QCfontset, QCdistant_foreground; | ||
| 292 | |||
| 293 | /* Symbols used for attribute values. */ | ||
| 294 | |||
| 295 | Lisp_Object Qnormal; | ||
| 296 | Lisp_Object Qbold; | ||
| 297 | static Lisp_Object Qline, Qwave; | ||
| 298 | Lisp_Object Qextra_light, Qlight; | ||
| 299 | Lisp_Object Qsemi_light, Qsemi_bold, Qextra_bold, Qultra_bold; | ||
| 300 | Lisp_Object Qoblique; | ||
| 301 | Lisp_Object Qitalic; | ||
| 302 | static Lisp_Object Qreleased_button, Qpressed_button; | ||
| 303 | static Lisp_Object QCstyle, QCcolor, QCline_width; | ||
| 304 | Lisp_Object Qunspecified; /* used in dosfns.c */ | ||
| 305 | static Lisp_Object QCignore_defface; | ||
| 306 | |||
| 307 | char unspecified_fg[] = "unspecified-fg", unspecified_bg[] = "unspecified-bg"; | 281 | char unspecified_fg[] = "unspecified-fg", unspecified_bg[] = "unspecified-bg"; |
| 308 | 282 | ||
| 309 | /* The name of the function to call when the background of the frame | ||
| 310 | has changed, frame_set_background_mode. */ | ||
| 311 | |||
| 312 | static Lisp_Object Qframe_set_background_mode; | ||
| 313 | |||
| 314 | /* Names of basic faces. */ | ||
| 315 | |||
| 316 | Lisp_Object Qdefault, Qtool_bar, Qfringe; | ||
| 317 | static Lisp_Object Qregion; | ||
| 318 | Lisp_Object Qheader_line, Qscroll_bar, Qcursor; | ||
| 319 | static Lisp_Object Qborder, Qmouse, Qmenu; | ||
| 320 | Lisp_Object Qmode_line_inactive; | ||
| 321 | static Lisp_Object Qvertical_border; | ||
| 322 | static Lisp_Object Qwindow_divider; | ||
| 323 | static Lisp_Object Qwindow_divider_first_pixel; | ||
| 324 | static Lisp_Object Qwindow_divider_last_pixel; | ||
| 325 | |||
| 326 | /* The symbol `face-alias'. A symbols having that property is an | ||
| 327 | alias for another face. Value of the property is the name of | ||
| 328 | the aliased face. */ | ||
| 329 | |||
| 330 | static Lisp_Object Qface_alias; | ||
| 331 | |||
| 332 | /* Alist of alternative font families. Each element is of the form | 283 | /* Alist of alternative font families. Each element is of the form |
| 333 | (FAMILY FAMILY1 FAMILY2 ...). If fonts of FAMILY can't be loaded, | 284 | (FAMILY FAMILY1 FAMILY2 ...). If fonts of FAMILY can't be loaded, |
| 334 | try FAMILY1, then FAMILY2, ... */ | 285 | try FAMILY1, then FAMILY2, ... */ |
| @@ -341,32 +292,6 @@ Lisp_Object Vface_alternative_font_family_alist; | |||
| 341 | 292 | ||
| 342 | Lisp_Object Vface_alternative_font_registry_alist; | 293 | Lisp_Object Vface_alternative_font_registry_alist; |
| 343 | 294 | ||
| 344 | /* Allowed scalable fonts. A value of nil means don't allow any | ||
| 345 | scalable fonts. A value of t means allow the use of any scalable | ||
| 346 | font. Otherwise, value must be a list of regular expressions. A | ||
| 347 | font may be scaled if its name matches a regular expression in the | ||
| 348 | list. */ | ||
| 349 | |||
| 350 | static Lisp_Object Qscalable_fonts_allowed; | ||
| 351 | |||
| 352 | /* The symbols `foreground-color' and `background-color' which can be | ||
| 353 | used as part of a `face' property. This is for compatibility with | ||
| 354 | Emacs 20.2. */ | ||
| 355 | |||
| 356 | Lisp_Object Qforeground_color, Qbackground_color; | ||
| 357 | |||
| 358 | /* The symbols `face' and `mouse-face' used as text properties. */ | ||
| 359 | |||
| 360 | Lisp_Object Qface; | ||
| 361 | |||
| 362 | /* Property for basic faces which other faces cannot inherit. */ | ||
| 363 | |||
| 364 | static Lisp_Object Qface_no_inherit; | ||
| 365 | |||
| 366 | /* Error symbol for wrong_type_argument in load_pixmap. */ | ||
| 367 | |||
| 368 | static Lisp_Object Qbitmap_spec_p; | ||
| 369 | |||
| 370 | /* The next ID to assign to Lisp faces. */ | 295 | /* The next ID to assign to Lisp faces. */ |
| 371 | 296 | ||
| 372 | static int next_lface_id; | 297 | static int next_lface_id; |
| @@ -376,14 +301,6 @@ static int next_lface_id; | |||
| 376 | static Lisp_Object *lface_id_to_name; | 301 | static Lisp_Object *lface_id_to_name; |
| 377 | static ptrdiff_t lface_id_to_name_size; | 302 | static ptrdiff_t lface_id_to_name_size; |
| 378 | 303 | ||
| 379 | /* TTY color-related functions (defined in tty-colors.el). */ | ||
| 380 | |||
| 381 | static Lisp_Object Qtty_color_desc, Qtty_color_by_index, Qtty_color_standard_values; | ||
| 382 | |||
| 383 | /* The name of the function used to compute colors on TTYs. */ | ||
| 384 | |||
| 385 | static Lisp_Object Qtty_color_alist; | ||
| 386 | |||
| 387 | #ifdef HAVE_WINDOW_SYSTEM | 304 | #ifdef HAVE_WINDOW_SYSTEM |
| 388 | 305 | ||
| 389 | /* Counter for calls to clear_face_cache. If this counter reaches | 306 | /* Counter for calls to clear_face_cache. If this counter reaches |
| @@ -6397,9 +6314,17 @@ DEFUN ("show-face-resources", Fshow_face_resources, Sshow_face_resources, | |||
| 6397 | void | 6314 | void |
| 6398 | syms_of_xfaces (void) | 6315 | syms_of_xfaces (void) |
| 6399 | { | 6316 | { |
| 6317 | /* The symbols `face' and `mouse-face' used as text properties. */ | ||
| 6400 | DEFSYM (Qface, "face"); | 6318 | DEFSYM (Qface, "face"); |
| 6319 | |||
| 6320 | /* Property for basic faces which other faces cannot inherit. */ | ||
| 6401 | DEFSYM (Qface_no_inherit, "face-no-inherit"); | 6321 | DEFSYM (Qface_no_inherit, "face-no-inherit"); |
| 6322 | |||
| 6323 | /* Error symbol for wrong_type_argument in load_pixmap. */ | ||
| 6402 | DEFSYM (Qbitmap_spec_p, "bitmap-spec-p"); | 6324 | DEFSYM (Qbitmap_spec_p, "bitmap-spec-p"); |
| 6325 | |||
| 6326 | /* The name of the function to call when the background of the frame | ||
| 6327 | has changed, frame_set_background_mode. */ | ||
| 6403 | DEFSYM (Qframe_set_background_mode, "frame-set-background-mode"); | 6328 | DEFSYM (Qframe_set_background_mode, "frame-set-background-mode"); |
| 6404 | 6329 | ||
| 6405 | /* Lisp face attribute keywords. */ | 6330 | /* Lisp face attribute keywords. */ |
| @@ -6442,12 +6367,22 @@ syms_of_xfaces (void) | |||
| 6442 | DEFSYM (Qultra_bold, "ultra-bold"); | 6367 | DEFSYM (Qultra_bold, "ultra-bold"); |
| 6443 | DEFSYM (Qoblique, "oblique"); | 6368 | DEFSYM (Qoblique, "oblique"); |
| 6444 | DEFSYM (Qitalic, "italic"); | 6369 | DEFSYM (Qitalic, "italic"); |
| 6370 | |||
| 6371 | /* The symbols `foreground-color' and `background-color' which can be | ||
| 6372 | used as part of a `face' property. This is for compatibility with | ||
| 6373 | Emacs 20.2. */ | ||
| 6445 | DEFSYM (Qbackground_color, "background-color"); | 6374 | DEFSYM (Qbackground_color, "background-color"); |
| 6446 | DEFSYM (Qforeground_color, "foreground-color"); | 6375 | DEFSYM (Qforeground_color, "foreground-color"); |
| 6376 | |||
| 6447 | DEFSYM (Qunspecified, "unspecified"); | 6377 | DEFSYM (Qunspecified, "unspecified"); |
| 6448 | DEFSYM (QCignore_defface, ":ignore-defface"); | 6378 | DEFSYM (QCignore_defface, ":ignore-defface"); |
| 6449 | 6379 | ||
| 6380 | /* The symbol `face-alias'. A symbol having that property is an | ||
| 6381 | alias for another face. Value of the property is the name of | ||
| 6382 | the aliased face. */ | ||
| 6450 | DEFSYM (Qface_alias, "face-alias"); | 6383 | DEFSYM (Qface_alias, "face-alias"); |
| 6384 | |||
| 6385 | /* Names of basic faces. */ | ||
| 6451 | DEFSYM (Qdefault, "default"); | 6386 | DEFSYM (Qdefault, "default"); |
| 6452 | DEFSYM (Qtool_bar, "tool-bar"); | 6387 | DEFSYM (Qtool_bar, "tool-bar"); |
| 6453 | DEFSYM (Qregion, "region"); | 6388 | DEFSYM (Qregion, "region"); |
| @@ -6460,13 +6395,23 @@ syms_of_xfaces (void) | |||
| 6460 | DEFSYM (Qmouse, "mouse"); | 6395 | DEFSYM (Qmouse, "mouse"); |
| 6461 | DEFSYM (Qmode_line_inactive, "mode-line-inactive"); | 6396 | DEFSYM (Qmode_line_inactive, "mode-line-inactive"); |
| 6462 | DEFSYM (Qvertical_border, "vertical-border"); | 6397 | DEFSYM (Qvertical_border, "vertical-border"); |
| 6398 | |||
| 6399 | /* TTY color-related functions (defined in tty-colors.el). */ | ||
| 6463 | DEFSYM (Qwindow_divider, "window-divider"); | 6400 | DEFSYM (Qwindow_divider, "window-divider"); |
| 6464 | DEFSYM (Qwindow_divider_first_pixel, "window-divider-first-pixel"); | 6401 | DEFSYM (Qwindow_divider_first_pixel, "window-divider-first-pixel"); |
| 6465 | DEFSYM (Qwindow_divider_last_pixel, "window-divider-last-pixel"); | 6402 | DEFSYM (Qwindow_divider_last_pixel, "window-divider-last-pixel"); |
| 6466 | DEFSYM (Qtty_color_desc, "tty-color-desc"); | 6403 | DEFSYM (Qtty_color_desc, "tty-color-desc"); |
| 6467 | DEFSYM (Qtty_color_standard_values, "tty-color-standard-values"); | 6404 | DEFSYM (Qtty_color_standard_values, "tty-color-standard-values"); |
| 6468 | DEFSYM (Qtty_color_by_index, "tty-color-by-index"); | 6405 | DEFSYM (Qtty_color_by_index, "tty-color-by-index"); |
| 6406 | |||
| 6407 | /* The name of the function used to compute colors on TTYs. */ | ||
| 6469 | DEFSYM (Qtty_color_alist, "tty-color-alist"); | 6408 | DEFSYM (Qtty_color_alist, "tty-color-alist"); |
| 6409 | |||
| 6410 | /* Allowed scalable fonts. A value of nil means don't allow any | ||
| 6411 | scalable fonts. A value of t means allow the use of any scalable | ||
| 6412 | font. Otherwise, value must be a list of regular expressions. A | ||
| 6413 | font may be scaled if its name matches a regular expression in the | ||
| 6414 | list. */ | ||
| 6470 | DEFSYM (Qscalable_fonts_allowed, "scalable-fonts-allowed"); | 6415 | DEFSYM (Qscalable_fonts_allowed, "scalable-fonts-allowed"); |
| 6471 | 6416 | ||
| 6472 | Vparam_value_alist = list1 (Fcons (Qnil, Qnil)); | 6417 | Vparam_value_alist = list1 (Fcons (Qnil, Qnil)); |