emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/bytecomp.el


From: Lars Hansen
Subject: [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/bytecomp.el
Date: Sun, 23 Oct 2005 03:33:23 -0400

Index: emacs/lisp/emacs-lisp/bytecomp.el
diff -c emacs/lisp/emacs-lisp/bytecomp.el:2.178 
emacs/lisp/emacs-lisp/bytecomp.el:2.179
*** emacs/lisp/emacs-lisp/bytecomp.el:2.178     Sat Aug  6 17:08:59 2005
--- emacs/lisp/emacs-lisp/bytecomp.el   Sun Oct 23 07:33:18 2005
***************
*** 908,913 ****
--- 908,920 ----
  ;; list.  If our current position is after the symbol's position, we
  ;; assume we've already passed that point, and look for the next
  ;; occurrence of the symbol.
+ ;;
+ ;; This function should not be called twice for the same occurrence of
+ ;; a symbol, and it should not be called for symbols generated by the
+ ;; byte compiler itself; because rather than just fail looking up the
+ ;; symbol, we may find an occurrence of the symbol further ahead, and
+ ;; then `byte-compile-last-position' as advanced too far.
+ ;;
  ;; So your're probably asking yourself: Isn't this function a
  ;; gross hack?  And the answer, of course, would be yes.
  (defun byte-compile-set-symbol-position (sym &optional allow-previous)
***************
*** 2304,2310 ****
                                 ',name ',declaration))
                   outbuffer)))))
  
!     (let* ((new-one (byte-compile-lambda (cons 'lambda (nthcdr 2 form))))
           (code (byte-compile-byte-code-maker new-one)))
        (if this-one
          (setcdr this-one new-one)
--- 2311,2317 ----
                                 ',name ',declaration))
                   outbuffer)))))
  
!     (let* ((new-one (byte-compile-lambda (nthcdr 2 form) t))
           (code (byte-compile-byte-code-maker new-one)))
        (if this-one
          (setcdr this-one new-one)
***************
*** 2500,2509 ****
  ;; Byte-compile a lambda-expression and return a valid function.
  ;; The value is usually a compiled function but may be the original
  ;; lambda-expression.
! (defun byte-compile-lambda (fun)
!   (unless (eq 'lambda (car-safe fun))
!     (error "Not a lambda list: %S" fun))
!   (byte-compile-set-symbol-position 'lambda)
    (byte-compile-check-lambda-list (nth 1 fun))
    (let* ((arglist (nth 1 fun))
         (byte-compile-bound-variables
--- 2507,2522 ----
  ;; Byte-compile a lambda-expression and return a valid function.
  ;; The value is usually a compiled function but may be the original
  ;; lambda-expression.
! ;; When ADD-LAMBDA is non-nil, the symbol `lambda' is added as head
! ;; of the list FUN and `byte-compile-set-symbol-position' is not called.
! ;; Use this feature to avoid calling `byte-compile-set-symbol-position'
! ;; for symbols generated by the byte compiler itself.
! (defun byte-compile-lambda (fun &optional add-lambda)
!   (if add-lambda
!       (setq fun (cons 'lambda fun))
!     (unless (eq 'lambda (car-safe fun))
!       (error "Not a lambda list: %S" fun))
!     (byte-compile-set-symbol-position 'lambda))
    (byte-compile-check-lambda-list (nth 1 fun))
    (let* ((arglist (nth 1 fun))
         (byte-compile-bound-variables
***************
*** 2755,2763 ****
                    (or (not (byte-compile-version-cond
                              byte-compile-compatibility))
                        (not (get (get fn 'byte-opcode) 'emacs19-opcode))))
!              (progn
!                (byte-compile-set-symbol-position fn)
!                (funcall handler form))
             (when (memq 'callargs byte-compile-warnings)
               (if (memq fn '(custom-declare-group custom-declare-variable 
custom-declare-face))
                   (byte-compile-nogroup-warn form))
--- 2768,2774 ----
                    (or (not (byte-compile-version-cond
                              byte-compile-compatibility))
                        (not (get (get fn 'byte-opcode) 'emacs19-opcode))))
!                (funcall handler form)
             (when (memq 'callargs byte-compile-warnings)
               (if (memq fn '(custom-declare-group custom-declare-variable 
custom-declare-face))
                   (byte-compile-nogroup-warn form))
***************
*** 3671,3677 ****
         (list 'fset
               (list 'quote (nth 1 form))
               (byte-compile-byte-code-maker
!               (byte-compile-lambda (cons 'lambda (cdr (cdr form)))))))
        (byte-compile-discard))
      ;; We prefer to generate a defalias form so it will record the function
      ;; definition just like interpreting a defun.
--- 3682,3688 ----
         (list 'fset
               (list 'quote (nth 1 form))
               (byte-compile-byte-code-maker
!               (byte-compile-lambda (cdr (cdr form)) t))))
        (byte-compile-discard))
      ;; We prefer to generate a defalias form so it will record the function
      ;; definition just like interpreting a defun.
***************
*** 3679,3685 ****
       (list 'defalias
           (list 'quote (nth 1 form))
           (byte-compile-byte-code-maker
!           (byte-compile-lambda (cons 'lambda (cdr (cdr form))))))
       t))
    (byte-compile-constant (nth 1 form)))
  
--- 3690,3696 ----
       (list 'defalias
           (list 'quote (nth 1 form))
           (byte-compile-byte-code-maker
!           (byte-compile-lambda (cdr (cdr form)) t)))
       t))
    (byte-compile-constant (nth 1 form)))
  
***************
*** 3688,3695 ****
    (byte-compile-body-do-effect
     (list (list 'fset (list 'quote (nth 1 form))
               (let ((code (byte-compile-byte-code-maker
!                           (byte-compile-lambda
!                            (cons 'lambda (cdr (cdr form)))))))
                 (if (eq (car-safe code) 'make-byte-code)
                     (list 'cons ''macro code)
                   (list 'quote (cons 'macro (eval code))))))
--- 3699,3705 ----
    (byte-compile-body-do-effect
     (list (list 'fset (list 'quote (nth 1 form))
               (let ((code (byte-compile-byte-code-maker
!                           (byte-compile-lambda (cdr (cdr form)) t))))
                 (if (eq (car-safe code) 'make-byte-code)
                     (list 'cons ''macro code)
                   (list 'quote (cons 'macro (eval code))))))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]