]> code.delx.au - gnu-emacs/blobdiff - lisp/emacs-lisp/bytecomp.el
ert-x trivia
[gnu-emacs] / lisp / emacs-lisp / bytecomp.el
index 9aa230cfe9b12320071823277c8c555397566ee7..80e380f07ead93423c6361a7b1a60df8d3f362bb 100644 (file)
@@ -1,6 +1,6 @@
 ;;; bytecomp.el --- compilation of Lisp code into byte code -*- lexical-binding: t -*-
 
-;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2011
+;; Copyright (C) 1985-1987, 1992, 1994, 1998, 2000-2012
 ;;   Free Software Foundation, Inc.
 
 ;; Author: Jamie Zawinski <jwz@lucid.com>
@@ -1745,7 +1745,9 @@ The value is non-nil if there were no errors, nil if errors."
              (enable-local-eval nil))
        ;; Arg of t means don't alter enable-local-variables.
         (normal-mode t)
-        (setq filename buffer-file-name))
+        ;; There may be a file local variable setting (bug#10419).
+        (setq buffer-read-only nil
+              filename buffer-file-name))
       ;; Set the default directory, in case an eval-when-compile uses it.
       (setq default-directory (file-name-directory filename)))
     ;; Check if the file's local variables explicitly specify not to
@@ -1779,37 +1781,37 @@ The value is non-nil if there were no errors, nil if errors."
        (with-current-buffer output-buffer
          (goto-char (point-max))
          (insert "\n")                 ; aaah, unix.
-           (if (file-writable-p target-file)
-               ;; We must disable any code conversion here.
-               (let* ((coding-system-for-write 'no-conversion)
-                      ;; Write to a tempfile so that if another Emacs
-                      ;; process is trying to load target-file (eg in a
-                      ;; parallel bootstrap), it does not risk getting a
-                      ;; half-finished file.  (Bug#4196)
-                      (tempfile (make-temp-name target-file))
-                      (kill-emacs-hook
-                       (cons (lambda () (ignore-errors (delete-file tempfile)))
-                             kill-emacs-hook)))
-                 (if (memq system-type '(ms-dos 'windows-nt))
-                     (setq buffer-file-type t))
-                 (write-region (point-min) (point-max) tempfile nil 1)
-                 ;; This has the intentional side effect that any
-                 ;; hard-links to target-file continue to
-                 ;; point to the old file (this makes it possible
-                 ;; for installed files to share disk space with
-                 ;; the build tree, without causing problems when
-                 ;; emacs-lisp files in the build tree are
-                 ;; recompiled).  Previously this was accomplished by
-                 ;; deleting target-file before writing it.
-                 (rename-file tempfile target-file t)
-                 (message "Wrote %s" target-file))
-             ;; This is just to give a better error message than write-region
-             (signal 'file-error
-                     (list "Opening output file"
-                           (if (file-exists-p target-file)
-                               "cannot overwrite file"
-                             "directory not writable or nonexistent")
-                           target-file)))
+         (if (file-writable-p target-file)
+             ;; We must disable any code conversion here.
+             (let* ((coding-system-for-write 'no-conversion)
+                    ;; Write to a tempfile so that if another Emacs
+                    ;; process is trying to load target-file (eg in a
+                    ;; parallel bootstrap), it does not risk getting a
+                    ;; half-finished file.  (Bug#4196)
+                    (tempfile (make-temp-name target-file))
+                    (kill-emacs-hook
+                     (cons (lambda () (ignore-errors (delete-file tempfile)))
+                           kill-emacs-hook)))
+               (if (memq system-type '(ms-dos 'windows-nt))
+                   (setq buffer-file-type t))
+               (write-region (point-min) (point-max) tempfile nil 1)
+               ;; This has the intentional side effect that any
+               ;; hard-links to target-file continue to
+               ;; point to the old file (this makes it possible
+               ;; for installed files to share disk space with
+               ;; the build tree, without causing problems when
+               ;; emacs-lisp files in the build tree are
+               ;; recompiled).  Previously this was accomplished by
+               ;; deleting target-file before writing it.
+               (rename-file tempfile target-file t)
+               (message "Wrote %s" target-file))
+           ;; This is just to give a better error message than write-region
+           (signal 'file-error
+                   (list "Opening output file"
+                         (if (file-exists-p target-file)
+                             "cannot overwrite file"
+                           "directory not writable or nonexistent")
+                         target-file)))
          (kill-buffer (current-buffer)))
        (if (and byte-compile-generate-call-tree
                 (or (eq t byte-compile-generate-call-tree)
@@ -2637,7 +2639,7 @@ If FORM is a lambda or a macro, byte-compile it as a function."
                   (setq form (cdr form)))
                 (setq form (car form)))
               (if (and (eq (car-safe form) 'list)
-                        ;; The spec is evaled in callint.c in dynamic-scoping
+                        ;; The spec is evalled in callint.c in dynamic-scoping
                         ;; mode, so just leaving the form unchanged would mean
                         ;; it won't be eval'd in the right mode.
                         (not lexical-binding))
@@ -3725,7 +3727,7 @@ that suppresses all warnings during execution of BODY."
 (defun byte-compile-if (form)
   (byte-compile-form (car (cdr form)))
   ;; Check whether we have `(if (fboundp ...' or `(if (boundp ...'
-  ;; and avoid warnings about the relevent symbols in the consequent.
+  ;; and avoid warnings about the relevant symbols in the consequent.
   (let ((clause (nth 1 form))
        (donetag (byte-compile-make-tag)))
     (if (null (nthcdr 3 form))