;;; -*- Mode:LISP; Package:INTERPRETER; Base:10; Readtable:CL -*- ;;; KTRACE.LISP ;;; (defvar *ktrace-level* 0) (defvar *atrace-level* 0) (defun ktrace (x) (let ((*evalhook* 'ktrace-function)) (eval x))) (defun ktrace-function (form &optional env) (let ((*ktrace-level* (+ *ktrace-level* 1))) (format *trace-output* "~%~V@TForm: ~S" (* *ktrace-level* 2) form) (let ((values (multiple-value-list (evalhook form #'ktrace-function nil env)))) (format *trace-output* "~%~V@TValue:~{ ~S~}" (* *ktrace-level* 2) values) (values-list values)))) (defun atrace (x) (let ((*applyhook* 'atrace-function)) (eval x))) (defun atrace-function (fn args &optional env) (let ((*atrace-level* (+ *atrace-level* 1))) (format *trace-output* "~%~V@TFunction: ~S" (* *atrace-level* 2) fn) (format *trace-output* "~%~V@TArguments: ~S" (* *atrace-level* 2) args) (let ((values (multiple-value-list (applyhook fn args nil #'atrace-function env)))) (format *trace-output* "~%~V@TValue:~{ ~S~}" (* *atrace-level* 2) values) (values-list values))))