(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "XCL-USER")
(il:filecreated "14-Aug-87 17:09:50" il:{qv}<jellinek>convert>debugger-context.\;2
il:|changes| il:|to:| (il:commands "unlex")
(il:functions open-lex-env init-debugger-context lex-eval-input)
(il:vars il:debugger-contextcoms)
il:|previous| il:|date:| "10-Aug-87 13:19:47" il:{qv}<jellinek>tools>lex-tool.\;1)
; Copyright (c) 1987 by Xerox Corporation. All rights reserved.
(il:prettycomprint il:debugger-contextcoms)
(il:rpaqq il:debugger-contextcoms (
(il:* il:|;;;| "Debugger-Context -- fix the Xerox Lisp debugger so that you can work with lexically-defined functions, variables, blocks, and tag-bodies sensibly.")
(il:* il:|;;;| "Written out of frustration by Herb Jellinek, 13-Aug-87.")
(il:functions init-debugger-context lex-do-event open-lex-env)
(il:variables xcl::*environment*)
(il:p (init-debugger-context))
(il:commands "lex" "unlex")
(il:prop il:makefile-environment il:debugger-context)))
(il:* il:|;;;|
"Debugger-Context -- fix the Xerox Lisp debugger so that you can work with lexically-defined functions, variables, blocks, and tag-bodies sensibly."
)
(il:* il:|;;;| "Written out of frustration by Herb Jellinek, 13-Aug-87.")
(defun init-debugger-context nil "Set things up for the DEBUGGER-CONTEXT hack"
(undoably (setf *per-exec-variables*
(il:* il:\;
"cause *environment* to be bound to nil in each executive.")
(acons 'xcl::*environment* nil *per-exec-variables*)
) (il:* il:\;
"\"advise\" do-event to look at *environment* for its env.")
(unless (fboundp 'old-do-event)
(setf (symbol-function 'old-do-event)
(symbol-function 'il:do-event))
(setf (symbol-function 'il:do-event)
(symbol-function 'lex-do-event)))))
(defun lex-do-event (original-input env &optional (fn nil function-p))
"Replacement for the executive's old DO-EVENT function."
(if function-p (old-do-event original-input (or env xcl::*environment*)
fn)
(old-do-event original-input (or env xcl::*environment*))))
(defun open-lex-env nil "Finds the 'current' lex env and makes this debugger instance use it"
(let ((frame-vars (il:stkargs il:lastpos)))
(declare (special il:lastpos))
(dolist (value frame-vars (format t ";; ? found no lexical environment")
)
(if (il:environment-p value)
(progn (setq xcl::*environment* value)
(format t ";; set lexical environment")
(return))))))
(defvar xcl::*environment* nil)
(init-debugger-context)
(defcommand ("lex" :debugger) nil
"Sets the debugger's lexical environment to that of the selected frame"
(open-lex-env) (il:* il:\; "")
(values))
(defcommand ("unlex" :debugger) nil "Unsets the lexical environment in the debugger" (setq
xcl::*environment*
nil)
(format t ";; unset lexical environment")
(values))
(il:putprops il:debugger-context il:makefile-environment (:readtable "XCL" :package "XCL-USER"))
(il:putprops il:debugger-context il:copyright ("Xerox Corporation" 1987))
il:stop