macro-debugger: internal debugging improvements
This commit is contained in:
parent
4fe8cd344c
commit
71772ba6c0
|
@ -1,30 +1,29 @@
|
|||
#lang racket/base
|
||||
(require racket/pretty
|
||||
racket/promise
|
||||
"model/trace.rkt"
|
||||
"model/reductions.rkt"
|
||||
"model/reductions-config.rkt"
|
||||
"model/steps.rkt"
|
||||
"syntax-browser/partition.rkt"
|
||||
"syntax-browser/pretty-helper.rkt")
|
||||
"syntax-browser/pretty-helper.rkt"
|
||||
"view/debug-format.rkt")
|
||||
(provide expand/step-text
|
||||
stepper-text)
|
||||
|
||||
(define expand/step-text
|
||||
(case-lambda
|
||||
[(stx) (expand/step-text stx #f)]
|
||||
[(stx show)
|
||||
(define s (stepper-text stx (->show-function show)))
|
||||
(s 'all)]))
|
||||
(define (expand/step-text stx [show #f]
|
||||
#:internal-error-file [error-file #f])
|
||||
(let ([s (stepper-text stx (->show-function show) #:internal-error-file error-file)])
|
||||
(s 'all)))
|
||||
|
||||
(define stepper-text
|
||||
(case-lambda
|
||||
[(stx) (internal-stepper stx #f)]
|
||||
[(stx show) (internal-stepper stx (->show-function show))]))
|
||||
(define (stepper-text stx [show #f]
|
||||
#:internal-error-file [error-file #f])
|
||||
(internal-stepper stx (->show-function show) error-file))
|
||||
|
||||
;; internal procedures
|
||||
|
||||
(define (internal-stepper stx show?)
|
||||
(define steps (get-steps stx show?))
|
||||
(define (internal-stepper stx show? error-file)
|
||||
(define steps (get-steps stx show? error-file))
|
||||
(define used-steps null)
|
||||
(define partition (new-bound-partition))
|
||||
(define dispatch
|
||||
|
@ -50,14 +49,20 @@
|
|||
(dispatch 'all))))]))
|
||||
dispatch)
|
||||
|
||||
(define (get-steps stx show?)
|
||||
(define deriv (trace stx))
|
||||
(define steps
|
||||
(parameterize ((macro-policy show?))
|
||||
(reductions deriv)))
|
||||
(define (ok? x)
|
||||
(or (rewrite-step? x) (misstep? x)))
|
||||
(filter ok? steps))
|
||||
(define (get-steps stx show? error-file)
|
||||
(let-values ([(_result events derivp) (trace* stx)])
|
||||
(with-handlers ([exn:fail?
|
||||
(lambda (exn)
|
||||
(when error-file
|
||||
(write-debug-file error-file exn events))
|
||||
(raise exn))])
|
||||
(define deriv (force derivp))
|
||||
(define steps
|
||||
(parameterize ((macro-policy show?))
|
||||
(reductions deriv)))
|
||||
(define (ok? x)
|
||||
(or (rewrite-step? x) (misstep? x)))
|
||||
(filter ok? steps))))
|
||||
|
||||
(define (show-step step partition)
|
||||
(cond [(step? step)
|
||||
|
|
|
@ -2,16 +2,21 @@
|
|||
(require racket/pretty)
|
||||
(provide write-debug-file
|
||||
load-debug-file
|
||||
serialize-datum)
|
||||
serialize-datum
|
||||
approx-parse-state)
|
||||
|
||||
(define (write-debug-file file exn events)
|
||||
(with-output-to-file file
|
||||
(lambda ()
|
||||
(pretty-write (serialize-datum events))
|
||||
(write-string "`(\n")
|
||||
(for ([event (in-list events)])
|
||||
(let ([event (list (car event) (cdr event))])
|
||||
(pretty-write (serialize-datum* event))))
|
||||
(write-string ")\n")
|
||||
(newline)
|
||||
(write (exn-message exn))
|
||||
(newline)
|
||||
(pretty-print
|
||||
(pretty-write
|
||||
(map serialize-context-frame
|
||||
(continuation-mark-set->context
|
||||
(exn-continuation-marks exn)))))
|
||||
|
@ -77,5 +82,27 @@
|
|||
(let* ([events-expr (read)]
|
||||
[exnmsg (read)]
|
||||
[ctx (read)])
|
||||
(let ([events (eval events-expr)])
|
||||
(let* ([events (eval events-expr)]
|
||||
[events
|
||||
(if (andmap (lambda (e) (and (list? e) (= 2 (length e)))) events)
|
||||
(map (lambda (l) (cons (car l) (cadr l))) events)
|
||||
events)])
|
||||
(values events exnmsg ctx)))))))
|
||||
|
||||
(define (approx-parse-state events N)
|
||||
(for/fold ([state null]) ([event (in-list events)] [index (in-range N)])
|
||||
(define (pop expect)
|
||||
(let ([top (car state)])
|
||||
(unless (eq? (cadr top) expect)
|
||||
(error "bad state on ~e: ~e" (car event) state))
|
||||
(cdr state)))
|
||||
(case (car event)
|
||||
((enter-macro enter-prim enter-local)
|
||||
(cons (cons index event) state))
|
||||
((exit-macro)
|
||||
(pop 'enter-macro))
|
||||
((exit-prim)
|
||||
(pop 'enter-prim))
|
||||
((exit-local)
|
||||
(pop 'enter-local))
|
||||
(else state))))
|
||||
|
|
Loading…
Reference in New Issue
Block a user