*** cvsroot/emacs/lisp/emacs-lisp/bytecomp.el 2005-08-08 14:15:23.000000000 +0200 --- emacs/LH-work/byte-compile/bytecomp.2.178.patched.el 2005-10-22 11:20:11.898327320 +0200 *************** *** 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,2518 ---- ;; 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 &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)) --- 2764,2770 ---- (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. --- 3678,3684 ---- (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))) --- 3686,3692 ---- (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)))))) --- 3695,3701 ---- (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))))))