aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Ingebrigtsen2022-05-16 15:01:08 +0200
committerLars Ingebrigtsen2022-05-16 15:01:08 +0200
commitf5ee56c5eae8a42a1bb83e31e0c12e14a2571860 (patch)
treeaf6699c1958ee9baca42552e517a364cc0894e21
parent5a6e727ddb155e6d4210bc7b7a30cf8933d556c8 (diff)
downloademacs-f5ee56c5eae8a42a1bb83e31e0c12e14a2571860.tar.gz
emacs-f5ee56c5eae8a42a1bb83e31e0c12e14a2571860.zip
Don't expose Vprint_variable_mapping to Lisp
* src/print.c: Don't expose Vprint_variable_mapping to the Lisp world, because it really should be immutable. (print_create_variable_mapping): Initialization moved here from syms_of_print. (print_bind_overrides): Call it. (syms_of_print): Protect the mapping variable.
-rw-r--r--src/print.c72
1 files changed, 39 insertions, 33 deletions
diff --git a/src/print.c b/src/print.c
index 41c0a188163..55f4c2345a3 100644
--- a/src/print.c
+++ b/src/print.c
@@ -620,10 +620,12 @@ If PRINTCHARFUN is omitted or nil, the value of `standard-output' is used. */)
620 return val; 620 return val;
621} 621}
622 622
623static Lisp_Object Vprint_variable_mapping;
624
623static void 625static void
624print_bind_all_defaults (void) 626print_bind_all_defaults (void)
625{ 627{
626 for (Lisp_Object vars = Vprint__variable_mapping; !NILP (vars); 628 for (Lisp_Object vars = Vprint_variable_mapping; !NILP (vars);
627 vars = XCDR (vars)) 629 vars = XCDR (vars))
628 { 630 {
629 Lisp_Object elem = XCDR (XCAR (vars)); 631 Lisp_Object elem = XCDR (XCAR (vars));
@@ -632,8 +634,41 @@ print_bind_all_defaults (void)
632} 634}
633 635
634static void 636static void
637print_create_variable_mapping (void)
638{
639 Lisp_Object total[] = {
640 list3 (intern ("length"), intern ("print-length"), Qnil),
641 list3 (intern ("level"), intern ("print-level"), Qnil),
642 list3 (intern ("circle"), intern ("print-circle"), Qnil),
643 list3 (intern ("quoted"), intern ("print-quoted"), Qt),
644 list3 (intern ("escape-newlines"), intern ("print-escape-newlines"), Qnil),
645 list3 (intern ("escape-control-characters"),
646 intern ("print-escape-control-characters"), Qnil),
647 list3 (intern ("escape-nonascii"), intern ("print-escape-nonascii"), Qnil),
648 list3 (intern ("escape-multibyte"),
649 intern ("print-escape-multibyte"), Qnil),
650 list3 (intern ("charset-text-property"),
651 intern ("print-charset-text-property"), Qnil),
652 list3 (intern ("unreadeable-function"),
653 intern ("print-unreadable-function"), Qnil),
654 list3 (intern ("gensym"), intern ("print-gensym"), Qnil),
655 list3 (intern ("continuous-numbering"),
656 intern ("print-continuous-numbering"), Qnil),
657 list3 (intern ("number-table"), intern ("print-number-table"), Qnil),
658 list3 (intern ("float-format"), intern ("float-output-format"), Qnil),
659 list3 (intern ("integers-as-characters"),
660 intern ("print-integers-as-characters"), Qnil),
661 };
662
663 Vprint_variable_mapping = CALLMANY (Flist, total);
664}
665
666static void
635print_bind_overrides (Lisp_Object overrides) 667print_bind_overrides (Lisp_Object overrides)
636{ 668{
669 if (NILP (Vprint_variable_mapping))
670 print_create_variable_mapping ();
671
637 if (EQ (overrides, Qt)) 672 if (EQ (overrides, Qt))
638 print_bind_all_defaults (); 673 print_bind_all_defaults ();
639 else if (!CONSP (overrides)) 674 else if (!CONSP (overrides))
@@ -651,7 +686,7 @@ print_bind_overrides (Lisp_Object overrides)
651 { 686 {
652 Lisp_Object key = XCAR (setting), 687 Lisp_Object key = XCAR (setting),
653 value = XCDR (setting); 688 value = XCDR (setting);
654 Lisp_Object map = Fassq (key, Vprint__variable_mapping); 689 Lisp_Object map = Fassq (key, Vprint_variable_mapping);
655 if (NILP (map)) 690 if (NILP (map))
656 xsignal2 (Qwrong_type_argument, Qsymbolp, map); 691 xsignal2 (Qwrong_type_argument, Qsymbolp, map);
657 specbind (XCAR (XCDR (map)), value); 692 specbind (XCAR (XCDR (map)), value);
@@ -2643,35 +2678,6 @@ be printed. */);
2643 2678
2644 defsubr (&Sflush_standard_output); 2679 defsubr (&Sflush_standard_output);
2645 2680
2646 DEFVAR_LISP ("print--variable-mapping", Vprint__variable_mapping, 2681 /* Initialized in print_create_variable_mapping. */
2647 doc: /* Mapping for print variables in `prin1'. 2682 staticpro (&Vprint_variable_mapping);
2648Internal use only.
2649Do not modify this list. */);
2650 Vprint__variable_mapping = Qnil;
2651 Lisp_Object total[] = {
2652 list3 (intern ("length"), intern ("print-length"), Qnil),
2653 list3 (intern ("level"), intern ("print-level"), Qnil),
2654 list3 (intern ("circle"), intern ("print-circle"), Qnil),
2655 list3 (intern ("quoted"), intern ("print-quoted"), Qt),
2656 list3 (intern ("escape-newlines"), intern ("print-escape-newlines"), Qnil),
2657 list3 (intern ("escape-control-characters"),
2658 intern ("print-escape-control-characters"), Qnil),
2659 list3 (intern ("escape-nonascii"), intern ("print-escape-nonascii"), Qnil),
2660 list3 (intern ("escape-multibyte"),
2661 intern ("print-escape-multibyte"), Qnil),
2662 list3 (intern ("charset-text-property"),
2663 intern ("print-charset-text-property"), Qnil),
2664 list3 (intern ("unreadeable-function"),
2665 intern ("print-unreadable-function"), Qnil),
2666 list3 (intern ("gensym"), intern ("print-gensym"), Qnil),
2667 list3 (intern ("continuous-numbering"),
2668 intern ("print-continuous-numbering"), Qnil),
2669 list3 (intern ("number-table"), intern ("print-number-table"), Qnil),
2670 list3 (intern ("float-format"), intern ("float-output-format"), Qnil),
2671 list3 (intern ("integers-as-characters"),
2672 intern ("print-integers-as-characters"), Qnil),
2673 };
2674
2675 Vprint__variable_mapping = CALLMANY (Flist, total);
2676 make_symbol_constant (intern_c_string ("print--variable-mapping"));
2677} 2683}