]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/derived.el
Merge from trunk.
[gnu-emacs] / lisp / emacs-lisp / derived.el
index 425a77ee77fd13d4c9fb275c1743bfad435d0f3c..4fda2bf1d529059129f850877a29008dd0a0b99d 100644 (file)
@@ -201,7 +201,7 @@ No problems result if this variable is not bound.
                       name))))
        (unless (boundp ',map)
         (put ',map 'definition-name ',child))
-       (defvar ,map (make-sparse-keymap))
+       (with-no-warnings (defvar ,map (make-sparse-keymap)))
        (unless (get ',map 'variable-documentation)
         (put ',map 'variable-documentation
              (purecopy ,(format "Keymap for `%s'." child))))
@@ -253,8 +253,14 @@ No problems result if this variable is not bound.
                   `(let ((parent (char-table-parent ,syntax)))
                      (unless (and parent
                                   (not (eq parent (standard-syntax-table))))
-                       (set-char-table-parent ,syntax (syntax-table)))))))
-
+                       (set-char-table-parent ,syntax (syntax-table)))))
+                ,(when declare-abbrev
+                   `(unless (or (abbrev-table-get ,abbrev :parents)
+                                ;; This can happen if the major mode defines
+                                ;; the abbrev-table to be its parent's.
+                                (eq ,abbrev local-abbrev-table))
+                      (abbrev-table-put ,abbrev :parents
+                                        (list local-abbrev-table))))))
          (use-local-map ,map)
          ,(when syntax `(set-syntax-table ,syntax))
          ,(when abbrev `(setq local-abbrev-table ,abbrev))