]> git.eshelyaron.com Git - emacs.git/commitdiff
Intern keywords differently
authorGerd Möllmann <gerd@gnu.org>
Wed, 12 Oct 2022 11:53:07 +0000 (13:53 +0200)
committerGerd Möllmann <gerd@gnu.org>
Wed, 12 Oct 2022 12:09:33 +0000 (14:09 +0200)
Instead of something like (intern (format ":%s" ...)) do
(intern (format "%s" :keyword).  Likewise in C.

14 files changed:
lisp/auth-source.el
lisp/emacs-lisp/cl-macs.el
lisp/emacs-lisp/macroexp.el
lisp/net/nsm.el
lisp/obsolete/cl-compat.el
lisp/org/ox-ascii.el
lisp/org/ox-html.el
lisp/org/ox-koma-letter.el
lisp/org/ox.el
src/image.c
src/lisp.h
src/lread.c
src/pkg.c
test/lisp/erc/resources/erc-d/erc-d.el

index feefd391a877cbb146a5b815b0042674048e767e..5d1e58d303bf0297e347b2339dfb053bf512b941 100644 (file)
@@ -1160,7 +1160,7 @@ FILE is the file from which we obtained this token."
                       (point-max))))))
 
 (defun auth-source--symbol-keyword (symbol)
-  (intern (format ":%s" symbol)))
+  (intern (format "%s" symbol) :keyword))
 
 (defun auth-source-netrc-normalize (alist filename)
   (mapcar (lambda (entry)
index beafee1d631fec98465d64741a18f643d33a9205..394ba1e1e0ee7b0f106d828044d95676c0a0d3de 100644 (file)
@@ -611,7 +611,7 @@ its argument list allows full Common Lisp conventions."
                              ;; shouldn't affect the key's name (bug#12367).
                              (if (eq ?_ (aref name 0))
                                  (setq name (substring name 1)))
-                             (intern (format ":%s" name)))))
+                             (intern (format "%s" name) :keyword))))
                    (varg (if (consp (car arg)) (cadar arg) (car arg)))
                   (def (if (cdr arg) (cadr arg)
                           ;; The ordering between those two or clauses is
index f4df40249de94ca29a25edf7623b45b201c82a0b..abcb3e3e6b5b7b5da2e59ffdfefa8c0c78deb189 100644 (file)
@@ -819,7 +819,7 @@ test of free variables in the following ways:
          ;; Hopefully this shouldn't happen thanks to the cycle detection,
          ;; but in case it does happen, let's catch the error and give the
          ;; code a chance to macro-expand later.
-         (error "Eager macro-expansion failure: %S" err)
+         (error "Eager macro-expansion failure: %S in %S" err form)
          form))))))
 
 ;; ¡¡¡ Big Ugly Hack !!!
index 3146189be63535af6d63b3636a03901490b64ac5..ed8228d97e9867d0949f437f52501c475e63b562 100644 (file)
@@ -273,7 +273,7 @@ See also: `network-security-protocol-checks' and `nsm-noninteractive'"
     (let* ((results
             (cl-loop
              for check in network-security-protocol-checks
-             for type = (intern (format ":%s" (car check)))
+             for type = (intern (format "%s" (car check)) :keyword)
              ;; Skip the check if the user has already said that this
              ;; host is OK for this type of "error".
              for result = (and (not (memq type
index e58f475d1c2a8653da862952e23e84c3c0d4134c..a68bec8d2de15072beaadf0e666464712fc6ed9a 100644 (file)
@@ -56,7 +56,7 @@
   (cl-list* 'defconst x (list 'quote x) (and doc (list doc))))
 
 (defun keyword-of (sym)
-  (or (keywordp sym) (keywordp (intern (format ":%s" sym)))))
+  (or (keywordp sym) (keywordp (intern (format "%s" sym) :keyword))))
 
 
 ;; Multiple values.  Note that the new package uses a different
index 76a1a71fabe526aa6d2367eaff9e2278925d0f2d..c488d6d10b927c7c1e0a1cffcf8d51dd6cda9cb6 100644 (file)
@@ -1157,7 +1157,7 @@ holding export options."
 (defun org-ascii--translate (s info)
   "Translate string S according to specified language and charset.
 INFO is a plist used as a communication channel."
-  (let ((charset (intern (format ":%s" (plist-get info :ascii-charset)))))
+  (let ((charset (intern (format "%s" (plist-get info :ascii-charset)) :keyword)))
     (org-export-translate s charset info)))
 
 
index 9cf9125aebd08ec46992e330f0a335c79b792d5a..e3f0cb569f590d4279c1a4267ee342b41e5779d9 100644 (file)
@@ -1979,7 +1979,7 @@ INFO is a plist used as a communication channel."
   "Return document preamble or postamble as a string, or nil.
 TYPE is either `preamble' or `postamble', INFO is a plist used as a
 communication channel."
-  (let ((section (plist-get info (intern (format ":html-%s" type))))
+  (let ((section (plist-get info (intern (format "html-%s" type) :keyword)))
        (spec (org-html-format-spec info)))
     (when section
       (let ((section-contents
index 5f62cd1c0403bbf11837696e3a5f8605c3f38c9d..dbc23be5875039a1ef755ced1d4210d338e06cbd 100644 (file)
@@ -774,7 +774,7 @@ a communication channel."
   (let* ((check-scope
           ;; Non-nil value when SETTING was defined in SCOPE.
           (lambda (setting)
-            (let ((property (intern (format ":inbuffer-%s" setting))))
+            (let ((property (intern (format "inbuffer-%s" setting) :keyword)))
               (if (eq scope 'global)
                   (eq (plist-get info property) 'koma-letter:empty)
                 (not (eq (plist-get info property) 'koma-letter:empty))))))
index 56bb4b74df3595551ff123560d72c0a5ca933253..6b8925b0db47630b601bcf441f29c2a92c34851a 100644 (file)
@@ -1969,7 +1969,7 @@ Return a string."
            ;; as in the original buffer, and call appropriate filters.
            (t
             (org-export-filter-apply-functions
-             (plist-get info (intern (format ":filter-%s" type)))
+             (plist-get info (intern (format "filter-%s" type) :keyword))
              (let ((blank (or (org-element-property :post-blank data) 0)))
                (if (eq (org-element-class data parent) 'object)
                    (concat results (make-string blank ?\s))
index 1e323ba66a012eecba7c19eb5fc99a19f97ec5bf..f6209149313e4c728b191364af5fbcd0f4fdfe48 100644 (file)
@@ -10072,7 +10072,7 @@ imagemagick_filename_hint (Lisp_Object spec, char hint_buffer[MaxTextExtent])
   if (! CONSP (val))
     return NULL;
 
-  format = image_spec_value (spec, intern (":format"), NULL);
+  format = image_spec_value (spec, QCformat, NULL);
   val = Fcar_safe (Fcdr_safe (Fassq (format, val)));
   if (! STRINGP (val))
     return NULL;
index 68a7233abd006fa48560a3a932c2ee1c72697b45..c5ce309306fe780b1cc6c9466be4e89eed99fea3 100644 (file)
@@ -2268,6 +2268,8 @@ extern Lisp_Object pkg_emacs_intern_soft (Lisp_Object name, Lisp_Object package)
 extern Lisp_Object pkg_emacs_unintern (Lisp_Object name, Lisp_Object package);
 extern bool pkg_intern_name_c_string (const char *p, ptrdiff_t len, Lisp_Object *symbol);
 extern void pkg_early_intern_symbol (Lisp_Object symbol);
+extern Lisp_Object pkg_lookup_c_string (const char *ptr, ptrdiff_t nchars, ptrdiff_t nbytes);
+extern void pkg_break (void);
 
 extern bool package_system_ready;
 
index 4260850399fc40f26da762156d0562165b6f1fe7..edd50efd16b1139aab1f5155f587743b1a73cdbb 100644 (file)
@@ -4138,7 +4138,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms)
        /* If of the form ||, everything except '|' is considered quoted.
           the bars doesn't belong to the symbol name.  */
        bool in_vertical_bar = false;
-       if (c == '|')
+       if (!read_emacs_syntax && c == '|')
          {
            in_vertical_bar = true;
            c = READCHAR;
@@ -4160,19 +4160,22 @@ read0 (Lisp_Object readcharfun, bool locate_syms)
          {
            if (c == ':' && !last_was_backslash && !in_vertical_bar)
              {
-               /* #:xyz should not contain a colon.  */
-               if (uninterned_symbol)
-                 invalid_syntax ("colon in uninterned symbol", readcharfun);
-
                /* Remember where the first : is.  */
                if (colon == NULL)
                  colon = p;
                ++ncolons;
 
-               /* Up to two colons are allowed if they are
-                  consecutive.  PKG-FIXME check consecutive :.  */
-               if (ncolons > 2)
-                 invalid_syntax ("too many colons", readcharfun);
+               if (!read_emacs_syntax)
+                 {
+                   /* #:xyz should not contain a colon.  */
+                   if (uninterned_symbol)
+                     invalid_syntax ("colon in uninterned symbol", readcharfun);
+
+                   /* Up to two colons are allowed if they are
+                      consecutive.  PKG-FIXME check consecutive :.  */
+                   if (ncolons > 2)
+                     invalid_syntax ("too many colons", readcharfun);
+                 }
              }
 
            /* Handle backslash.  The first backslash is not part of
@@ -4219,6 +4222,7 @@ read0 (Lisp_Object readcharfun, bool locate_syms)
               symbol.  */
            if (in_vertical_bar)
              {
+               eassert (!read_emacs_syntax);
                if (c < 0)
                  end_of_file_error ();
                if (c == '|')
@@ -4826,6 +4830,8 @@ A second optional argument specifies the obarray to use;
 it defaults to the value of `obarray'.  */)
   (Lisp_Object string, Lisp_Object package)
 {
+  /* PKG-FIXME: Remove this eassert.  */
+  eassert (SREF (string, 0) != ':' || !package_system_ready);
   return pkg_emacs_intern (string, package);
 }
 
@@ -4862,6 +4868,10 @@ usage: (unintern NAME OBARRAY)  */)
 Lisp_Object
 oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff_t size_byte)
 {
+  const Lisp_Object found = pkg_lookup_c_string (ptr, size, size_byte);
+  if (!EQ (found, Qunbound))
+    return found;
+
   size_t hash;
   size_t obsize;
   register Lisp_Object tail;
@@ -4897,6 +4907,7 @@ oblookup (Lisp_Object obarray, register const char *ptr, ptrdiff_t size, ptrdiff
 void
 map_obarray (Lisp_Object obarray, void (*fn) (Lisp_Object, Lisp_Object), Lisp_Object arg)
 {
+  eassert (package_system_ready);
   ptrdiff_t i;
   register Lisp_Object tail;
   CHECK_VECTOR (obarray);
@@ -4917,6 +4928,7 @@ map_obarray (Lisp_Object obarray, void (*fn) (Lisp_Object, Lisp_Object), Lisp_Ob
 static void
 mapatoms_1 (Lisp_Object sym, Lisp_Object function)
 {
+  eassert (package_system_ready);
   call1 (function, sym);
 }
 
@@ -4925,6 +4937,7 @@ DEFUN ("mapatoms", Fmapatoms, Smapatoms, 1, 2, 0,
 OBARRAY defaults to the value of `obarray'.  */)
   (Lisp_Object function, Lisp_Object obarray)
 {
+  eassert (package_system_ready);
   if (NILP (obarray)) obarray = Vobarray;
   obarray = check_obarray (obarray);
 
@@ -5575,6 +5588,10 @@ that are loaded before your customizations are read!  */);
                doc: /* Non-nil means not to load a .eln file when a .elc was requested.  */);
   load_no_native = false;
 
+  DEFVAR_BOOL ("read-emacs-syntax", read_emacs_syntax,
+               doc: /* Non-nil means don't treat ':' or '|' specially in symbols.  */);
+  read_emacs_syntax = true;
+
   /* Vsource_directory was initialized in init_lread.  */
 
   DEFSYM (Qcurrent_load_list, "current-load-list");
index 03533dceacd728ac952a2ff739e592c6fbedf85a..5a021ac39dede94157442d3695856eb81ebc385f 100644 (file)
--- a/src/pkg.c
+++ b/src/pkg.c
@@ -555,6 +555,15 @@ pkg_intern_name_c_string (const char *p, ptrdiff_t len, Lisp_Object *symbol)
   return true;
 }
 
+Lisp_Object
+pkg_lookup_c_string (const char *ptr, ptrdiff_t nchars, ptrdiff_t nbytes)
+{
+  if (!package_system_ready)
+    return Qunbound;
+  const Lisp_Object name = make_string_from_bytes (ptr, nchars, nbytes);
+  return lookup_symbol (name, Vearmuffs_package);
+}
+
 void
 pkg_early_intern_symbol (Lisp_Object symbol)
 {
@@ -582,6 +591,10 @@ pkg_unintern_symbol (Lisp_Object symbol, Lisp_Object package)
   return Qnil;
 }
 
+void pkg_break (void)
+{
+}
+
 \f
 /***********************************************************************
                        Old Emacs intern stuff
index d6082227c5270b9aecb7c27d87739de51088bf41..6cbe26bb8b4b956b030cba2067faebd6e6c60788 100644 (file)
@@ -951,7 +951,7 @@ appearing among DIALOGS."
                                              erc-d-match-handlers))))
     (pcase-dolist (`(,var . ,def) defaults)
       (push (or (plist-get kwds var) def) args)
-      (push (intern (format ":dialog-%s" var)) args))
+      (push (intern (format "dialog-%s" var) :keyword) args))
     (apply #'erc-d--start host service (or server-name erc-d-server-name)
            args)))