changeset 105744:b0a732611398

* keymap.c (Fmake_sparse_keymap): Purecopy the name. * eval.c (Fautoload): Purecopy the filename. Simplify. * category.c (Fdefine_category): Purecopy docstring. * international/mule-cmds.el (set-language-info-alist): Purecopy lang-env. (leim-list-header, leim-list-entry-regexp): Change defvars to defconst. (charset): Purecopy the name. (define-char-code-property): Purecopy string arguments. * emacs-lisp/byte-run.el (make-obsolete, make-obsolete-variable): Purecopy string arguments. * emacs-lisp/lisp-mode.el (emacs-lisp-mode-map): * ediff-hook.el (menu-bar-ediff-menu): * buff-menu.el (Buffer-menu-mode-map): Purecopy names and tooltips. * bookmark.el (menu-bar-bookmark-map): Add :help and purecopy the name.
author Dan Nicolaescu <dann@ics.uci.edu>
date Sat, 24 Oct 2009 06:32:03 +0000
parents f8478bbd8ebe
children 0a74e9b3065f
files lisp/ChangeLog lisp/bookmark.el lisp/buff-menu.el lisp/ediff-hook.el lisp/emacs-lisp/byte-run.el lisp/emacs-lisp/lisp-mode.el lisp/international/mule-cmds.el src/ChangeLog src/category.c src/eval.c src/keymap.c
diffstat 11 files changed, 190 insertions(+), 138 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/ChangeLog	Sat Oct 24 06:32:03 2009 +0000
@@ -1,3 +1,18 @@
+2009-10-24  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* international/mule-cmds.el (set-language-info-alist): Purecopy lang-env.
+	(leim-list-header, leim-list-entry-regexp): Change defvars to defconst.
+	(charset): Purecopy the name.
+	(define-char-code-property): Purecopy string arguments.
+
+	* emacs-lisp/byte-run.el (make-obsolete, make-obsolete-variable):
+	Purecopy string arguments.
+
+	* emacs-lisp/lisp-mode.el (emacs-lisp-mode-map):
+	* ediff-hook.el (menu-bar-ediff-menu):
+	* buff-menu.el (Buffer-menu-mode-map): Purecopy names and tooltips.
+	* bookmark.el (menu-bar-bookmark-map): Add :help and purecopy the name.
+
 2009-10-24  Glenn Morris  <rgm@gnu.org>
 
 	* comint.el (comint-dynamic-list-completions):
--- a/lisp/bookmark.el	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/bookmark.el	Sat Oct 24 06:32:03 2009 +0000
@@ -2101,16 +2101,36 @@
 ;;;###autoload
 (defvar menu-bar-bookmark-map
   (let ((map (make-sparse-keymap "Bookmark functions")))
-    (define-key map [load]	'("Load a Bookmark File..." . bookmark-load))
-    (define-key map [write]	'("Save Bookmarks As..." . bookmark-write))
-    (define-key map [save]	'("Save Bookmarks" . bookmark-save))
-    (define-key map [edit]	'("Edit Bookmark List" . bookmark-bmenu-list))
-    (define-key map [delete]	'("Delete Bookmark..." . bookmark-delete))
-    (define-key map [rename]	'("Rename Bookmark..." . bookmark-rename))
-    (define-key map [locate]	'("Insert Location..." . bookmark-locate))
-    (define-key map [insert]	'("Insert Contents..." . bookmark-insert))
-    (define-key map [set]	'("Set Bookmark..." . bookmark-set))
-    (define-key map [jump]	'("Jump to Bookmark..." . bookmark-jump))
+    (define-key map [load]
+      `(menu-item ,(purecopy "Load a Bookmark File...") bookmark-load
+		  :help ,(purecopy "Load bookmarks from a bookmark file)")))
+    (define-key map [write]
+      `(menu-item ,(purecopy "Save Bookmarks As...") bookmark-write
+		  :help ,(purecopy "Write bookmarks to a file (reading the file name with the minibuffer)")))
+    (define-key map [save]
+      `(menu-item ,(purecopy "Save Bookmarks") bookmark-save
+		  :help ,(purecopy "Save currently defined bookmarks")))
+    (define-key map [edit]
+      `(menu-item ,(purecopy "Edit Bookmark List") bookmark-bmenu-list
+		  :help ,(purecopy "Display a list of existing bookmarks")))
+    (define-key map [delete]
+      `(menu-item ,(purecopy "Delete Bookmark...") bookmark-delete
+		  :help ,(purecopy "Delete a bookmark from the bookmark list")))
+    (define-key map [rename]
+      `(menu-item ,(purecopy "Rename Bookmark...") bookmark-rename
+		  :help ,(purecopy "Change the name of a bookmark")))
+    (define-key map [locate]
+      `(menu-item ,(purecopy "Insert Location...") bookmark-locate
+		  :help ,(purecopy "Insert the name of the file associated with a bookmark")))
+    (define-key map [insert]
+      `(menu-item ,(purecopy "Insert Contents...") bookmark-insert
+		  :help ,(purecopy "Insert the text of the file pointed to by a bookmark")))
+    (define-key map [set]
+      `(menu-item ,(purecopy "Set Bookmark...") bookmark-set
+		  :help ,(purecopy "Set a bookmark named inside a file.")))
+    (define-key map [jump]
+      `(menu-item ,(purecopy "Jump to Bookmark...") bookmark-jump
+		  :help ,(purecopy "Jump to a bookmark (a point in some file)")))
     map))
 
 ;;;###autoload
--- a/lisp/buff-menu.el	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/buff-menu.el	Sat Oct 24 06:32:03 2009 +0000
@@ -153,67 +153,67 @@
     (define-key map (kbd "M-s a M-C-s") 'Buffer-menu-isearch-buffers-regexp)
     (define-key map [menu-bar Buffer-menu-mode] (cons "Buffer Menu" menu-map))
     (define-key menu-map [quit]
-      '(menu-item "Quit" quit-window
-		 :help "Mark buffer on this line to be deleted by x command"))
+      `(menu-item ,(purecopy "Quit") quit-window
+		 :help ,(purecopy "Mark buffer on this line to be deleted by x command")))
     (define-key menu-map [rev]
-      '(menu-item "Refresh" revert-buffer
-		 :help "Refresh the *Buffer List* buffer contents"))
+      `(menu-item ,(purecopy "Refresh") revert-buffer
+		 :help ,(purecopy "Refresh the *Buffer List* buffer contents")))
     (define-key menu-map [s0] '("--"))
     (define-key menu-map [tf]
-      '(menu-item "Show only file buffers" Buffer-menu-toggle-files-only
+      `(menu-item ,(purecopy "Show only file buffers") Buffer-menu-toggle-files-only
 		  :button (:toggle . Buffer-menu-files-only)
-		  :help "Toggle whether the current buffer-menu displays only file buffers"))
+		  :help ,(purecopy "Toggle whether the current buffer-menu displays only file buffers")))
     (define-key menu-map [s1] '("--"))
     ;; FIXME: The "Select" entries could use better names...
     (define-key menu-map [sel]
-      '(menu-item "Select marked" Buffer-menu-select
-		 :help "Select this line's buffer; also display buffers marked with `>'"))
+      `(menu-item ,(purecopy "Select marked") Buffer-menu-select
+		 :help ,(purecopy "Select this line's buffer; also display buffers marked with `>'")))
     (define-key menu-map [bm2]
-      '(menu-item "Select two" Buffer-menu-2-window
-		 :help "Select this line's buffer, with previous buffer in second window"))
+      `(menu-item ,(purecopy "Select two") Buffer-menu-2-window
+		 :help ,(purecopy "Select this line's buffer, with previous buffer in second window")))
     (define-key menu-map [bm1]
-      '(menu-item "Select current" Buffer-menu-1-window
-		 :help "Select this line's buffer, alone, in full frame"))
+      `(menu-item ,(purecopy "Select current") Buffer-menu-1-window
+		 :help ,(purecopy "Select this line's buffer, alone, in full frame")))
     (define-key menu-map [ow]
-      '(menu-item "Select in other window" Buffer-menu-other-window
-		 :help "Select this line's buffer in other window, leaving buffer menu visible"))
+      `(menu-item ,(purecopy "Select in other window") Buffer-menu-other-window
+		 :help ,(purecopy "Select this line's buffer in other window, leaving buffer menu visible")))
     (define-key menu-map [tw]
-      '(menu-item "Select in current window" Buffer-menu-this-window
-		 :help "Select this line's buffer in this window"))
+      `(menu-item ,(purecopy "Select in current window") Buffer-menu-this-window
+		 :help ,(purecopy "Select this line's buffer in this window")))
     (define-key menu-map [s2] '("--"))
     (define-key menu-map [is]
-      '(menu-item "Regexp Isearch marked buffers" Buffer-menu-isearch-buffers-regexp
-		 :help "Search for a regexp through all marked buffers using Isearch"))
+      `(menu-item ,(purecopy "Regexp Isearch marked buffers") Buffer-menu-isearch-buffers-regexp
+		 :help ,(purecopy "Search for a regexp through all marked buffers using Isearch")))
     (define-key menu-map [ir]
-      '(menu-item "Isearch marked buffers" Buffer-menu-isearch-buffers
-		 :help "Search for a string through all marked buffers using Isearch"))
+      `(menu-item ,(purecopy "Isearch marked buffers") Buffer-menu-isearch-buffers
+		 :help ,(purecopy "Search for a string through all marked buffers using Isearch")))
     (define-key menu-map [s3] '("--"))
     (define-key menu-map [by]
-      '(menu-item "Bury" Buffer-menu-bury
-		 :help "Bury the buffer listed on this line"))
+      `(menu-item ,(purecopy "Bury") Buffer-menu-bury
+		 :help ,(purecopy "Bury the buffer listed on this line")))
     (define-key menu-map [vt]
-      '(menu-item "Set unmodified" Buffer-menu-not-modified
-		 :help "Mark buffer on this line as unmodified (no changes to save)"))
+      `(menu-item ,(purecopy "Set unmodified") Buffer-menu-not-modified
+		 :help ,(purecopy "Mark buffer on this line as unmodified (no changes to save)")))
     (define-key menu-map [ex]
-      '(menu-item "Execute" Buffer-menu-execute
-		 :help "Save and/or delete buffers marked with s or k commands"))
+      `(menu-item ,(purecopy "Execute") Buffer-menu-execute
+		 :help ,(purecopy "Save and/or delete buffers marked with s or k commands")))
     (define-key menu-map [s4] '("--"))
     (define-key menu-map [delb]
-      '(menu-item "Mark for delete and move backwards" Buffer-menu-delete-backwards
-		 :help "Mark buffer on this line to be deleted by x command and move up one line"))
+      `(menu-item ,(purecopy "Mark for delete and move backwards") Buffer-menu-delete-backwards
+		 :help ,(purecopy "Mark buffer on this line to be deleted by x command and move up one line")))
     (define-key menu-map [del]
-      '(menu-item "Mark for delete" Buffer-menu-delete
-		 :help "Mark buffer on this line to be deleted by x command"))
+      `(menu-item ,(purecopy "Mark for delete") Buffer-menu-delete
+		 :help ,(purecopy "Mark buffer on this line to be deleted by x command")))
 
     (define-key menu-map [sv]
-      '(menu-item "Mark for save" Buffer-menu-save
-		 :help "Mark buffer on this line to be saved by x command"))
+      `(menu-item ,(purecopy "Mark for save") Buffer-menu-save
+		 :help ,(purecopy "Mark buffer on this line to be saved by x command")))
     (define-key menu-map [umk]
-      '(menu-item "Unmark" Buffer-menu-unmark
-		 :help "Cancel all requested operations on buffer on this line and move down"))
+      `(menu-item ,(purecopy "Unmark") Buffer-menu-unmark
+		 :help ,(purecopy "Cancel all requested operations on buffer on this line and move down")))
     (define-key menu-map [mk]
-      '(menu-item "Mark" Buffer-menu-mark
-		 :help "Mark buffer on this line for being displayed by v command"))
+      `(menu-item ,(purecopy "Mark") Buffer-menu-mark
+		 :help ,(purecopy "Mark buffer on this line for being displayed by v command")))
     map)
   "Local keymap for `Buffer-menu-mode' buffers.")
 
--- a/lisp/ediff-hook.el	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/ediff-hook.el	Sat Oct 24 06:32:03 2009 +0000
@@ -144,7 +144,7 @@
 
   ;; define ediff compare menu
   (define-key menu-bar-ediff-menu [ediff-misc]
-    (list 'menu-item "Ediff Miscellanea" menu-bar-ediff-misc-menu))
+    `(menu-item ,(purecopy "Ediff Miscellanea") menu-bar-ediff-misc-menu))
   (define-key menu-bar-ediff-menu [separator-ediff-misc] '("--"))
   (define-key menu-bar-ediff-menu [window]
     `(menu-item ,(purecopy "This Window and Next Window") compare-windows
--- a/lisp/emacs-lisp/byte-run.el	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/emacs-lisp/byte-run.el	Sat Oct 24 06:32:03 2009 +0000
@@ -127,7 +127,7 @@
     (if (eq 'byte-compile-obsolete handler)
 	(setq handler (nth 1 (get obsolete-name 'byte-obsolete-info)))
       (put obsolete-name 'byte-compile 'byte-compile-obsolete))
-    (put obsolete-name 'byte-obsolete-info (list current-name handler when)))
+    (put obsolete-name 'byte-obsolete-info (list current-name handler (purecopy when))))
   obsolete-name)
 (set-advertised-calling-convention
  ;; New code should always provide the `when' argument.
@@ -166,7 +166,11 @@
       (if (equal str "") (error ""))
       (intern str))
     (car (read-from-string (read-string "Obsoletion replacement: ")))))
-  (put obsolete-name 'byte-obsolete-variable (cons current-name when))
+  (put obsolete-name 'byte-obsolete-variable
+       (cons
+	(if (stringp current-name)
+	    (purecopy current-name)
+	  current-name) (purecopy when)))
   obsolete-name)
 (set-advertised-calling-convention
  ;; New code should always provide the `when' argument.
--- a/lisp/emacs-lisp/lisp-mode.el	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/emacs-lisp/lisp-mode.el	Sat Oct 24 06:32:03 2009 +0000
@@ -285,105 +285,105 @@
     (define-key map "\e\C-q" 'indent-pp-sexp)
     (define-key map [menu-bar emacs-lisp] (cons "Emacs-Lisp" menu-map))
     (define-key menu-map [eldoc]
-      '(menu-item "Auto-Display Documentation Strings" eldoc-mode
+      `(menu-item ,(purecopy "Auto-Display Documentation Strings") eldoc-mode
 		  :button (:toggle . (bound-and-true-p eldoc-mode))
-		  :help "Display the documentation string for the item under cursor"))
+		  :help ,(purecopy "Display the documentation string for the item under cursor")))
     (define-key menu-map [checkdoc]
-      '(menu-item "Check Documentation Strings" checkdoc
-		  :help "Check documentation strings for style requirements"))
+      `(menu-item ,(purecopy "Check Documentation Strings") checkdoc
+		  :help ,(purecopy "Check documentation strings for style requirements")))
     (define-key menu-map [re-builder]
-      '(menu-item "Construct Regexp" re-builder
-		  :help "Construct a regexp interactively"))
+      `(menu-item ,(purecopy "Construct Regexp") re-builder
+		  :help ,(purecopy "Construct a regexp interactively")))
     (define-key menu-map [tracing] (cons "Tracing" tracing-map))
     (define-key tracing-map [tr-a]
-      '(menu-item "Untrace all" untrace-all
-		  :help "Untrace all currently traced functions"))
+      `(menu-item ,(purecopy "Untrace all") untrace-all
+		  :help ,(purecopy "Untrace all currently traced functions")))
     (define-key tracing-map [tr-uf]
-      '(menu-item "Untrace function..." untrace-function
-		  :help "Untrace function, and possibly activate all remaining advice"))
+      `(menu-item ,(purecopy "Untrace function...") untrace-function
+		  :help ,(purecopy "Untrace function, and possibly activate all remaining advice")))
     (define-key tracing-map [tr-sep] '("--"))
     (define-key tracing-map [tr-q]
-      '(menu-item "Trace function quietly..." trace-function-background
-		  :help "Trace the function with trace output going quietly to a buffer"))
+      `(menu-item ,(purecopy "Trace function quietly...") trace-function-background
+		  :help ,(purecopy "Trace the function with trace output going quietly to a buffer")))
     (define-key tracing-map [tr-f]
-      '(menu-item "Trace function..." trace-function
-		  :help "Trace the function given as an argument"))
+      `(menu-item ,(purecopy "Trace function...") trace-function
+		  :help ,(purecopy "Trace the function given as an argument")))
     (define-key menu-map [profiling] (cons "Profiling" prof-map))
     (define-key prof-map [prof-restall]
-      '(menu-item "Remove Instrumentation for All Functions" elp-restore-all
-		  :help "Restore the original definitions of all functions being profiled"))
+      `(menu-item ,(purecopy "Remove Instrumentation for All Functions") elp-restore-all
+		  :help ,(purecopy "Restore the original definitions of all functions being profiled")))
     (define-key prof-map [prof-restfunc]
-      '(menu-item "Remove Instrumentation for Function..." elp-restore-function
-		  :help "Restore an instrumented function to its original definition"))
+      `(menu-item ,(purecopy "Remove Instrumentation for Function...") elp-restore-function
+		  :help ,(purecopy "Restore an instrumented function to its original definition")))
 
     (define-key prof-map [sep-rem] '("--"))
     (define-key prof-map [prof-resall]
-      '(menu-item "Reset Counters for All Functions" elp-reset-all
-		  :help "Reset the profiling information for all functions being profiled"))
+      `(menu-item ,(purecopy "Reset Counters for All Functions") elp-reset-all
+		  :help ,(purecopy "Reset the profiling information for all functions being profiled")))
     (define-key prof-map [prof-resfunc]
-      '(menu-item "Reset Counters for Function..." elp-reset-function
-		  :help "Reset the profiling information for a function"))
+      `(menu-item ,(purecopy "Reset Counters for Function...") elp-reset-function
+		  :help ,(purecopy "Reset the profiling information for a function")))
     (define-key prof-map [prof-res]
-      '(menu-item "Show Profiling Results" elp-results
-		  :help "Display current profiling results"))
+      `(menu-item ,(purecopy "Show Profiling Results") elp-results
+		  :help ,(purecopy "Display current profiling results")))
     (define-key prof-map [prof-pack]
-      '(menu-item "Instrument Package..." elp-instrument-package
-		  :help "Instrument for profiling all function that start with a prefix"))
+      `(menu-item ,(purecopy "Instrument Package...") elp-instrument-package
+		  :help ,(purecopy "Instrument for profiling all function that start with a prefix")))
     (define-key prof-map [prof-func]
-      '(menu-item "Instrument Function..." elp-instrument-function
-		  :help "Instrument a function for profiling"))
+      `(menu-item ,(purecopy "Instrument Function...") elp-instrument-function
+		  :help ,(purecopy "Instrument a function for profiling")))
     (define-key menu-map [lint] (cons "Linting" lint-map))
     (define-key lint-map [lint-di]
-      '(menu-item "Lint Directory..." elint-directory
-		  :help "Lint a directory"))
+      `(menu-item ,(purecopy "Lint Directory...") elint-directory
+		  :help ,(purecopy "Lint a directory")))
     (define-key lint-map [lint-f]
-      '(menu-item "Lint File..." elint-file
-		  :help "Lint a file"))
+      `(menu-item ,(purecopy "Lint File...") elint-file
+		  :help ,(purecopy "Lint a file")))
     (define-key lint-map [lint-b]
-      '(menu-item "Lint Buffer" elint-current-buffer
-		  :help "Lint the current buffer"))
+      `(menu-item ,(purecopy "Lint Buffer") elint-current-buffer
+		  :help ,(purecopy "Lint the current buffer")))
     (define-key lint-map [lint-d]
-      '(menu-item "Lint Defun" elint-defun
-		  :help "Lint the function at point"))
+      `(menu-item ,(purecopy "Lint Defun") elint-defun
+		  :help ,(purecopy "Lint the function at point")))
     (define-key menu-map [edebug-defun]
-      '(menu-item "Instrument Function for Debugging" edebug-defun
-		  :help "Evaluate the top level form point is in, stepping through with Edebug"
+      `(menu-item ,(purecopy "Instrument Function for Debugging") edebug-defun
+		  :help ,(purecopy "Evaluate the top level form point is in, stepping through with Edebug")
 		  :keys "C-u C-M-x"))
     (define-key menu-map [separator-byte] '("--"))
     (define-key menu-map [disas]
-      '(menu-item "Disassemble byte compiled object..." disassemble
-		  :help "Print disassembled code for OBJECT in a buffer"))
+      `(menu-item ,(purecopy "Disassemble byte compiled object...") disassemble
+		  :help ,(purecopy "Print disassembled code for OBJECT in a buffer")))
     (define-key menu-map [byte-recompile]
-      '(menu-item "Byte-recompile Directory..." byte-recompile-directory
-		  :help "Recompile every `.el' file in DIRECTORY that needs recompilation"))
+      `(menu-item ,(purecopy "Byte-recompile Directory...") byte-recompile-directory
+		  :help ,(purecopy "Recompile every `.el' file in DIRECTORY that needs recompilation")))
     (define-key menu-map [emacs-byte-compile-and-load]
-      '(menu-item "Byte-compile And Load" emacs-lisp-byte-compile-and-load
-		  :help "Byte-compile the current file (if it has changed), then load compiled code"))
+      `(menu-item ,(purecopy "Byte-compile And Load") emacs-lisp-byte-compile-and-load
+		  :help ,(purecopy "Byte-compile the current file (if it has changed), then load compiled code")))
     (define-key menu-map [byte-compile]
-      '(menu-item "Byte-compile This File" emacs-lisp-byte-compile
-		  :help "Byte compile the file containing the current buffer"))
+      `(menu-item ,(purecopy "Byte-compile This File") emacs-lisp-byte-compile
+		  :help ,(purecopy "Byte compile the file containing the current buffer")))
     (define-key menu-map [separator-eval] '("--"))
     (define-key menu-map [ielm]
-      '(menu-item "Interactive Expression Evaluation" ielm
-		  :help "Interactively evaluate Emacs Lisp expressions"))
+      `(menu-item ,(purecopy "Interactive Expression Evaluation") ielm
+		  :help ,(purecopy "Interactively evaluate Emacs Lisp expressions")))
     (define-key menu-map [eval-buffer]
-      '(menu-item "Evaluate Buffer" eval-buffer
-		  :help "Execute the current buffer as Lisp code"))
+      `(menu-item ,(purecopy "Evaluate Buffer") eval-buffer
+		  :help ,(purecopy "Execute the current buffer as Lisp code")))
     (define-key menu-map [eval-region]
-      '(menu-item "Evaluate Region" eval-region
-		  :help "Execute the region as Lisp code"
+      `(menu-item ,(purecopy "Evaluate Region") eval-region
+		  :help ,(purecopy "Execute the region as Lisp code")
 		  :enable mark-active))
     (define-key menu-map [eval-sexp]
-      '(menu-item "Evaluate Last S-expression" eval-last-sexp
-		  :help "Evaluate sexp before point; print value in minibuffer"))
+      `(menu-item ,(purecopy "Evaluate Last S-expression") eval-last-sexp
+		  :help ,(purecopy "Evaluate sexp before point; print value in minibuffer")))
     (define-key menu-map [separator-format] '("--"))
     (define-key menu-map [comment-region]
-      '(menu-item "Comment Out Region" comment-region
-		  :help "Comment or uncomment each line in the region"
+      `(menu-item ,(purecopy "Comment Out Region") comment-region
+		  :help ,(purecopy "Comment or uncomment each line in the region")
 		  :enable mark-active))
     (define-key menu-map [indent-region]
-      '(menu-item "Indent Region" indent-region
-		  :help "Indent each nonblank line in the region"
+      `(menu-item ,(purecopy "Indent Region") indent-region
+		  :help ,(purecopy "Indent each nonblank line in the region")
 		  :enable mark-active))
     (define-key menu-map [indent-line] '("Indent Line" . lisp-indent-line))
     map)
@@ -458,14 +458,14 @@
     (define-key map "\C-c\C-z" 'run-lisp)
     (define-key map [menu-bar lisp] (cons "Lisp" menu-map))
     (define-key menu-map [run-lisp]
-      '(menu-item "Run inferior Lisp" run-lisp
-		  :help "Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'"))
+      `(menu-item ,(purecopy "Run inferior Lisp") run-lisp
+		  :help ,(purecopy "Run an inferior Lisp process, input and output via buffer `*inferior-lisp*'")))
     (define-key menu-map [ev-def]
-      '(menu-item "Eval defun" lisp-eval-defun
-		  :help "Send the current defun to the Lisp process made by M-x run-lisp"))
+      `(menu-item ,(purecopy "Eval defun") lisp-eval-defun
+		  :help ,(purecopy "Send the current defun to the Lisp process made by M-x run-lisp")))
     (define-key menu-map [ind-sexp]
-      '(menu-item "Indent sexp" indent-sexp
-		  :help "Indent each line of the list starting just after point"))
+      `(menu-item ,(purecopy "Indent sexp") indent-sexp
+		  :help ,(purecopy "Indent each line of the list starting just after point")))
     map)
   "Keymap for ordinary Lisp mode.
 All commands in `lisp-mode-shared-map' are inherited by this map.")
@@ -522,21 +522,21 @@
     (define-key map "\n" 'eval-print-last-sexp)
     (define-key map [menu-bar lisp-interaction] (cons "Lisp-Interaction" menu-map))
     (define-key menu-map [eval-defun]
-      '(menu-item "Evaluate Defun" eval-defun
-		  :help "Evaluate the top-level form containing point, or after point"))
+      `(menu-item ,(purecopy "Evaluate Defun") eval-defun
+		  :help ,(purecopy "Evaluate the top-level form containing point, or after point")))
     (define-key menu-map [eval-print-last-sexp]
-      '(menu-item "Evaluate and print" eval-print-last-sexp
-		  :help "Evaluate sexp before point; print value into current buffer"))
+      `(menu-item ,(purecopy "Evaluate and print") eval-print-last-sexp
+		  :help ,(purecopy "Evaluate sexp before point; print value into current buffer")))
     (define-key menu-map [edebug-defun-lisp-interaction]
-      '(menu-item "Instrument Function for Debugging" edebug-defun
-		  :help "Evaluate the top level form point is in, stepping through with Edebug"
+      `(menu-item ,(purecopy "Instrument Function for Debugging") edebug-defun
+		  :help ,(purecopy "Evaluate the top level form point is in, stepping through with Edebug")
 		  :keys "C-u C-M-x"))
     (define-key menu-map [indent-pp-sexp]
-      '(menu-item "Indent or Pretty-Print" indent-pp-sexp
-		  :help "Indent each line of the list starting just after point, or prettyprint it"))
+      `(menu-item ,(purecopy "Indent or Pretty-Print") indent-pp-sexp
+		  :help ,(purecopy "Indent each line of the list starting just after point, or prettyprint it")))
     (define-key menu-map [lisp-complete-symbol]
-      '(menu-item "Complete Lisp Symbol" lisp-complete-symbol
-		  :help "Perform completion on Lisp symbol preceding point"))
+      `(menu-item ,(purecopy "Complete Lisp Symbol") lisp-complete-symbol
+		  :help ,(purecopy "Perform completion on Lisp symbol preceding point")))
     map)
   "Keymap for Lisp Interaction mode.
 All commands in `lisp-mode-shared-map' are inherited by this map.")
--- a/lisp/international/mule-cmds.el	Sat Oct 24 03:54:58 2009 +0000
+++ b/lisp/international/mule-cmds.el	Sat Oct 24 06:32:03 2009 +0000
@@ -1174,8 +1174,10 @@
 Describe Language Environment and Set Language Environment menus.
 For example, (\"European\") means to put this language environment
 in the European submenu in each of those two menus."
-  (if (symbolp lang-env)
-      (setq lang-env (symbol-name lang-env)))
+  (cond ((symbolp lang-env)
+	 (setq lang-env (symbol-name lang-env)))
+	((stringp lang-env)
+	 (setq lang-env (purecopy lang-env))))
   (let ((describe-map describe-language-environment-map)
 	(setup-map setup-language-environment-map))
     (if parents
@@ -1249,7 +1251,7 @@
 in the format of Lisp expression for registering each input method.
 Emacs loads this file at startup time.")
 
-(defvar leim-list-header (format
+(defconst leim-list-header (format
 ";;; %s -- list of LEIM (Library of Emacs Input Method) -*-coding: utf-8;-*-
 ;;
 ;; This file is automatically generated.
@@ -1272,7 +1274,7 @@
 				 leim-list-file-name)
   "Header to be inserted in LEIM list file.")
 
-(defvar leim-list-entry-regexp "^(register-input-method"
+(defconst leim-list-entry-regexp "^(register-input-method"
   "Regexp matching head of each entry in LEIM list file.
 See also the variable `leim-list-header'.")
 
@@ -1865,7 +1867,7 @@
   (force-mode-line-update t))
 
 (define-widget 'charset 'symbol
-  "An Emacs charset."
+  (purecopy "An Emacs charset.")
   :tag "Charset"
   :complete-function (lambda ()
 		       (interactive)
@@ -2745,12 +2747,13 @@
 	  (error "Invalid char-table: %s" table))
     (or (stringp table)
 	(error "Not a char-table nor a file name: %s" table)))
+  (if (stringp table) (purecopy table))
   (let ((slot (assq name char-code-property-alist)))
     (if slot
 	(setcdr slot table)
       (setq char-code-property-alist
 	    (cons (cons name table) char-code-property-alist))))
-  (put name 'char-code-property-documentation docstring))
+  (put name 'char-code-property-documentation (purecopy docstring)))
 
 (defvar char-code-property-table
   (make-char-table 'char-code-property-table)
--- a/src/ChangeLog	Sat Oct 24 03:54:58 2009 +0000
+++ b/src/ChangeLog	Sat Oct 24 06:32:03 2009 +0000
@@ -1,3 +1,11 @@
+2009-10-24  Dan Nicolaescu  <dann@ics.uci.edu>
+
+	* keymap.c (Fmake_sparse_keymap): Purecopy the name.
+
+	* eval.c (Fautoload): Purecopy the filename.  Simplify.
+
+	* category.c (Fdefine_category): Purecopy docstring.
+
 2009-10-23  Andreas Schwab  <schwab@linux-m68k.org>
 
 	* lisp.h (FIXNUM_OVERFLOW_P): Remove cast to avoid overflow.
--- a/src/category.c	Sat Oct 24 03:54:58 2009 +0000
+++ b/src/category.c	Sat Oct 24 06:32:03 2009 +0000
@@ -136,6 +136,8 @@
 
   if (!NILP (CATEGORY_DOCSTRING (table, XFASTINT (category))))
     error ("Category `%c' is already defined", XFASTINT (category));
+  if (!NILP (Vpurify_flag))
+    docstring = Fpurecopy (docstring);
   CATEGORY_DOCSTRING (table, XFASTINT (category)) = docstring;
 
   return Qnil;
--- a/src/eval.c	Sat Oct 24 03:54:58 2009 +0000
+++ b/src/eval.c	Sat Oct 24 06:32:03 2009 +0000
@@ -2096,7 +2096,6 @@
     return Qnil;
 }
 
-/* ARGSUSED */
 DEFUN ("autoload", Fautoload, Sautoload, 2, 5, 0,
        doc: /* Define FUNCTION to autoload from FILE.
 FUNCTION is a symbol; FILE is a file name string to pass to `load'.
@@ -2113,9 +2112,7 @@
      (function, file, docstring, interactive, type)
      Lisp_Object function, file, docstring, interactive, type;
 {
-#ifdef NO_ARG_ARRAY
   Lisp_Object args[4];
-#endif
 
   CHECK_SYMBOL (function);
   CHECK_STRING (file);
@@ -2131,16 +2128,15 @@
        not useful and else we get loads of them from the loaddefs.el.  */
     LOADHIST_ATTACH (Fcons (Qautoload, function));
 
-#ifdef NO_ARG_ARRAY
-  args[0] = file;
+  if (NILP (Vpurify_flag))
+    args[0] = file;
+  else
+    args[0] = Fpurecopy (file);
   args[1] = docstring;
   args[2] = interactive;
   args[3] = type;
 
   return Ffset (function, Fcons (Qautoload, Flist (4, &args[0])));
-#else /* NO_ARG_ARRAY */
-  return Ffset (function, Fcons (Qautoload, Flist (4, &file)));
-#endif /* not NO_ARG_ARRAY */
 }
 
 Lisp_Object
--- a/src/keymap.c	Sat Oct 24 03:54:58 2009 +0000
+++ b/src/keymap.c	Sat Oct 24 06:32:03 2009 +0000
@@ -170,7 +170,11 @@
      Lisp_Object string;
 {
   if (!NILP (string))
-    return Fcons (Qkeymap, Fcons (string, Qnil));
+    {
+      if (!NILP (Vpurify_flag))
+	string = Fpurecopy (string);
+      return Fcons (Qkeymap, Fcons (string, Qnil));
+    }
   return Fcons (Qkeymap, Qnil);
 }