emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] trunk r113557: * lisp/emacs-lisp/edebug.el: Use backtrace-


From: Stefan Monnier
Subject: [Emacs-diffs] trunk r113557: * lisp/emacs-lisp/edebug.el: Use backtrace-eval to handle lexical variables.
Date: Fri, 26 Jul 2013 15:09:10 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113557
revision-id: address@hidden
parent: address@hidden
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Fri 2013-07-26 11:09:04 -0400
message:
  * lisp/emacs-lisp/edebug.el: Use backtrace-eval to handle lexical variables.
  (edebug-eval): Use backtrace-eval.
  (edebug--display, edebug--recursive-edit): Don't let-bind the
  edebug-outer-* vars that keep track of variables we locally let-bind.
  (edebug-outside-excursion): Don't restore outside values of locally
  let-bound vars.
  (edebug--display): Use user-error.
  (cl-lexical-debug, cl-debug-env): Remove.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/emacs-lisp/edebug.el      edebug.el-20091113204419-o5vbwnq5f7feedwu-483
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-07-26 14:01:19 +0000
+++ b/lisp/ChangeLog    2013-07-26 15:09:04 +0000
@@ -1,3 +1,14 @@
+2013-07-26  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/edebug.el: Use backtrace-eval to handle lexical variables.
+       (edebug-eval): Use backtrace-eval.
+       (edebug--display, edebug--recursive-edit): Don't let-bind the
+       edebug-outer-* vars that keep track of variables we locally let-bind.
+       (edebug-outside-excursion): Don't restore outside values of locally
+       let-bound vars.
+       (edebug--display): Use user-error.
+       (cl-lexical-debug, cl-debug-env): Remove.
+
 2013-07-26  Juanma Barranquero  <address@hidden>
 
        * desktop.el (desktop-restore-frames): Call `sit-for' once all frames

=== modified file 'lisp/emacs-lisp/edebug.el'
--- a/lisp/emacs-lisp/edebug.el 2013-07-26 07:38:18 +0000
+++ b/lisp/emacs-lisp/edebug.el 2013-07-26 15:09:04 +0000
@@ -2088,8 +2088,6 @@
 (defvar edebug-coverage) ; the coverage results of each expression of function.
 
 (defvar edebug-buffer) ; which buffer the function is in.
-(defvar edebug-outside-executing-macro)
-(defvar edebug-outside-defining-kbd-macro)
 
 (defvar edebug-execution-mode 'step) ; Current edebug mode set by user.
 (defvar edebug-next-execution-mode nil) ; Use once instead of initial mode.
@@ -2097,12 +2095,6 @@
 (defvar edebug-outside-debug-on-error) ; the value of debug-on-error outside
 (defvar edebug-outside-debug-on-quit) ; the value of debug-on-quit outside
 
-
-(defvar edebug-outside-pre-command-hook)
-(defvar edebug-outside-post-command-hook)
-
-(defvar cl-lexical-debug)  ;; Defined in cl.el
-
 ;;; Handling signals
 
 (defun edebug-signal (signal-name signal-data)
@@ -2154,10 +2146,7 @@
               ;; Binding these may not be the right thing to do.
               ;; We want to allow the global values to be changed.
               (debug-on-error (or debug-on-error edebug-on-error))
-              (debug-on-quit edebug-on-quit)
-
-              ;; Lexical bindings must be uncompiled for this to work.
-              (cl-lexical-debug t))
+              (debug-on-quit edebug-on-quit))
           (unwind-protect
               (let ((signal-hook-function 'edebug-signal))
                 (setq edebug-execution-mode (or edebug-next-execution-mode
@@ -2386,9 +2375,6 @@
 (defvar edebug-window-data)  ; window and window-start for current function
 (defvar edebug-outside-windows) ; outside window configuration
 (defvar edebug-eval-buffer) ; for the evaluation list.
-(defvar edebug-outside-o-a-p) ; outside overlay-arrow-position
-(defvar edebug-outside-o-a-s) ; outside overlay-arrow-string
-(defvar edebug-outside-c-i-e-a) ; outside cursor-in-echo-area
 (defvar edebug-outside-d-c-i-n-s-w) ; outside 
default-cursor-in-non-selected-windows
 
 (defvar edebug-eval-list nil) ;; List of expressions to evaluate.
@@ -2398,8 +2384,6 @@
 ;; Emacs 19 adds an arg to mark and mark-marker.
 (defalias 'edebug-mark-marker 'mark-marker)
 
-(defvar edebug-outside-unread-command-events)
-
 (defun edebug--display (value offset-index arg-mode)
   (unless (marker-position edebug-def-mark)
     ;; The buffer holding the source has been killed.
@@ -2421,7 +2405,6 @@
        (edebug-outside-buffer (current-buffer))
        (edebug-outside-point (point))
        (edebug-outside-mark (edebug-mark))
-       (edebug-outside-unread-command-events unread-command-events)
        edebug-outside-windows          ; Window or screen configuration.
        edebug-buffer-points
 
@@ -2431,9 +2414,6 @@
        edebug-trace-window
        edebug-trace-window-start
 
-       (edebug-outside-o-a-p overlay-arrow-position)
-       (edebug-outside-o-a-s overlay-arrow-string)
-       (edebug-outside-c-i-e-a cursor-in-echo-area)
        (edebug-outside-d-c-i-n-s-w
          (default-value 'cursor-in-non-selected-windows)))
     (unwind-protect
@@ -2445,8 +2425,7 @@
              )
           (setq-default cursor-in-non-selected-windows t)
          (if (not (buffer-name edebug-buffer))
-             (let ((debug-on-error nil))
-               (error "Buffer defining %s not found" edebug-function)))
+              (user-error "Buffer defining %s not found" edebug-function))
 
          (if (eq 'after arg-mode)
              ;; Compute result string now before windows are modified.
@@ -2486,10 +2465,9 @@
              ;; Check whether positions are up-to-date.
              ;; This assumes point is never before symbol.
              (if (not (memq (following-char) '(?\( ?\# ?\` )))
-                 (let ((debug-on-error nil))
-                   (error "Source has changed - reevaluate definition of %s"
-                          edebug-function)
-                   )))
+                  (user-error "Source has changed - reevaluate definition of 
%s"
+                              edebug-function)
+                ))
 
          (setcdr edebug-window-data
                  (edebug-adjust-window (cdr edebug-window-data)))
@@ -2645,11 +2623,6 @@
       (if edebug-eval-buffer (kill-buffer edebug-eval-buffer))
       (with-timeout-unsuspend edebug-with-timeout-suspend)
       ;; Reset global variables to outside values in case they were changed.
-      (setq
-       unread-command-events edebug-outside-unread-command-events
-       overlay-arrow-position edebug-outside-o-a-p
-       overlay-arrow-string edebug-outside-o-a-s
-       cursor-in-echo-area edebug-outside-c-i-e-a)
       (setq-default cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w)
       )))
 
@@ -2667,27 +2640,6 @@
 (defvar edebug-inside-windows)
 (defvar edebug-interactive-p)
 
-(defvar edebug-outside-map)
-(defvar edebug-outside-standard-output)
-(defvar edebug-outside-standard-input)
-(defvar edebug-outside-current-prefix-arg)
-(defvar edebug-outside-last-command)
-(defvar edebug-outside-this-command)
-
-;; Note: here we have defvars for variables that are
-;; built-in in certain versions.
-;; Each defvar makes a difference
-;; in versions where the variable is *not* built-in.
-
-;; Emacs 18  FIXME
-
-;; Emacs 19.
-(defvar edebug-outside-last-command-event)
-(defvar edebug-outside-last-input-event)
-(defvar edebug-outside-last-event-frame)
-(defvar edebug-outside-last-nonmenu-event)
-(defvar edebug-outside-track-mouse)
-
 (defun edebug--recursive-edit (arg-mode)
   ;; Start up a recursive edit inside of edebug.
   ;; The current buffer is the edebug-buffer, which is put into edebug-mode.
@@ -2705,28 +2657,6 @@
        ;; The window configuration may be saved and restored
        ;; during a recursive-edit
        edebug-inside-windows
-
-        ;; Save the outside value of executing macro.  (here??)
-        (edebug-outside-executing-macro executing-kbd-macro)
-        (edebug-outside-pre-command-hook
-         (edebug-var-status 'pre-command-hook))
-        (edebug-outside-post-command-hook
-         (edebug-var-status 'post-command-hook))
-
-        (edebug-outside-standard-output standard-output)
-       (edebug-outside-standard-input standard-input)
-       (edebug-outside-defining-kbd-macro defining-kbd-macro)
-
-       (edebug-outside-last-command last-command)
-       (edebug-outside-this-command this-command)
-
-       (edebug-outside-current-prefix-arg current-prefix-arg)
-
-       (edebug-outside-last-input-event last-input-event)
-       (edebug-outside-last-command-event last-command-event)
-       (edebug-outside-last-event-frame last-event-frame)
-       (edebug-outside-last-nonmenu-event last-nonmenu-event)
-       (edebug-outside-track-mouse track-mouse)
        )
 
     (unwind-protect
@@ -2757,7 +2687,7 @@
               (overriding-local-map nil)
               (overriding-terminal-local-map nil)
 
-                 ;; Bind again to outside values.
+              ;; Bind again to outside values.
              (debug-on-error edebug-outside-debug-on-error)
              (debug-on-quit edebug-outside-debug-on-quit)
 
@@ -2805,27 +2735,7 @@
              ;; gotta have a buffer to let its buffer local variables be set
              (get-buffer-create " bogus edebug buffer"))
            ));; inner let
-
-      ;; Reset global vars to outside values, in case they have been changed.
-      (setq
-       last-command-event edebug-outside-last-command-event
-       last-command edebug-outside-last-command
-       this-command edebug-outside-this-command
-       current-prefix-arg edebug-outside-current-prefix-arg
-       last-input-event edebug-outside-last-input-event
-       last-event-frame edebug-outside-last-event-frame
-       last-nonmenu-event edebug-outside-last-nonmenu-event
-       track-mouse edebug-outside-track-mouse
-
-       standard-output edebug-outside-standard-output
-       standard-input edebug-outside-standard-input
-       defining-kbd-macro edebug-outside-defining-kbd-macro)
-
-      (setq executing-kbd-macro edebug-outside-executing-macro)
-      (edebug-restore-status
-       'post-command-hook edebug-outside-post-command-hook)
-      (edebug-restore-status
-       'pre-command-hook edebug-outside-pre-command-hook))))
+      )))
 
 
 ;;; Display related functions
@@ -3423,6 +3333,9 @@
 (defmacro edebug-outside-excursion (&rest body)
   "Evaluate an expression list in the outside context.
 Return the result of the last expression."
+  ;; Only restores the non-variables context since all the variables let-bound
+  ;; by Edebug will be properly reset to the appropriate context's value by
+  ;; backtrace-eval.
   (declare (debug t))
   `(save-excursion                     ; of current-buffer
      (if edebug-save-windows
@@ -3435,89 +3348,32 @@
           (edebug-set-windows edebug-outside-windows)))
 
      (set-buffer edebug-buffer)                ; why?
-     ;; (use-local-map edebug-outside-map)
      (set-match-data edebug-outside-match-data)
      ;; Restore outside context.
-     (let (;; (edebug-inside-map (current-local-map)) ;; restore map??
-          (last-command-event edebug-outside-last-command-event)
-          (last-command edebug-outside-last-command)
-          (this-command edebug-outside-this-command)
-          (unread-command-events edebug-outside-unread-command-events)
-          (current-prefix-arg edebug-outside-current-prefix-arg)
-          (last-input-event edebug-outside-last-input-event)
-          (last-event-frame edebug-outside-last-event-frame)
-          (last-nonmenu-event edebug-outside-last-nonmenu-event)
-          (track-mouse edebug-outside-track-mouse)
-          (standard-output edebug-outside-standard-output)
-          (standard-input edebug-outside-standard-input)
-
-          (executing-kbd-macro edebug-outside-executing-macro)
-          (defining-kbd-macro edebug-outside-defining-kbd-macro)
-          ;; Get the values out of the saved statuses.
-          (pre-command-hook (cdr edebug-outside-pre-command-hook))
-          (post-command-hook (cdr edebug-outside-post-command-hook))
-
-          ;; See edebug-display.
-          (overlay-arrow-position edebug-outside-o-a-p)
-          (overlay-arrow-string edebug-outside-o-a-s)
-          (cursor-in-echo-area edebug-outside-c-i-e-a)
-          )
-       (setq-default cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w)
-       (unwind-protect
-          (with-current-buffer edebug-outside-buffer ; of edebug-buffer
-            (goto-char edebug-outside-point)
-            (if (marker-buffer (edebug-mark-marker))
-                (set-marker (edebug-mark-marker) edebug-outside-mark))
-            ,@body)
-
-        ;; Back to edebug-buffer.  Restore rest of inside context.
-        ;; (use-local-map edebug-inside-map)
-        (if edebug-save-windows
-            ;; Restore inside windows.
-            (edebug-set-windows edebug-inside-windows))
-
-        ;; Save values that may have been changed.
-        (setq
-         edebug-outside-last-command-event last-command-event
-         edebug-outside-last-command last-command
-         edebug-outside-this-command this-command
-         edebug-outside-unread-command-events unread-command-events
-         edebug-outside-current-prefix-arg current-prefix-arg
-         edebug-outside-last-input-event last-input-event
-         edebug-outside-last-event-frame last-event-frame
-         edebug-outside-last-nonmenu-event last-nonmenu-event
-         edebug-outside-track-mouse track-mouse
-         edebug-outside-standard-output standard-output
-         edebug-outside-standard-input standard-input
-
-         edebug-outside-executing-macro executing-kbd-macro
-         edebug-outside-defining-kbd-macro defining-kbd-macro
-
-         edebug-outside-o-a-p overlay-arrow-position
-         edebug-outside-o-a-s overlay-arrow-string
-         edebug-outside-c-i-e-a cursor-in-echo-area
-         edebug-outside-d-c-i-n-s-w (default-value
-                                       'cursor-in-non-selected-windows)
-          )
-
-        ;; Restore the outside saved values; don't alter
-        ;; the outside binding loci.
-        (setcdr edebug-outside-pre-command-hook pre-command-hook)
-        (setcdr edebug-outside-post-command-hook post-command-hook)
-
-         (setq-default cursor-in-non-selected-windows t)
-        ))                             ; let
-     ))
-
-(defvar cl-debug-env)  ; defined in cl; non-nil when lexical env used.
+     (setq-default cursor-in-non-selected-windows edebug-outside-d-c-i-n-s-w)
+     (unwind-protect
+         (with-current-buffer edebug-outside-buffer ; of edebug-buffer
+           (goto-char edebug-outside-point)
+           (if (marker-buffer (edebug-mark-marker))
+               (set-marker (edebug-mark-marker) edebug-outside-mark))
+           ,@body)
+
+       ;; Back to edebug-buffer.  Restore rest of inside context.
+       ;; (use-local-map edebug-inside-map)
+       (if edebug-save-windows
+           ;; Restore inside windows.
+           (edebug-set-windows edebug-inside-windows))
+
+       ;; Save values that may have been changed.
+       (setq edebug-outside-d-c-i-n-s-w
+             (default-value 'cursor-in-non-selected-windows))
+
+       ;; Restore the outside saved values; don't alter
+       ;; the outside binding loci.
+       (setq-default cursor-in-non-selected-windows t))))
 
 (defun edebug-eval (expr)
-  ;; Are there cl lexical variables active?
-  (eval (if (and (bound-and-true-p cl-debug-env)
-                 (fboundp 'cl-macroexpand-all))
-            (cl-macroexpand-all expr cl-debug-env)
-          expr)
-        lexical-binding))
+  (backtrace-eval expr 0 'edebug-after))
 
 (defun edebug-safe-eval (expr)
   ;; Evaluate EXPR safely.


reply via email to

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