macro stepper:

fixed bug with opaque result of syntax-local-expand-expression
  fixed debug-file support

svn: r14395
This commit is contained in:
Ryan Culpepper 2009-04-01 02:15:09 +00:00
parent 2c85b7a795
commit a2ebc93bd8
4 changed files with 22 additions and 21 deletions

View File

@ -31,12 +31,7 @@
;; (make-mrule <Base(Stx)> ?Stx (listof LocalAction) ?exn ?Stx ?Deriv)
(define-struct (mrule base) (me1 locals me2 ?2 etx next) #:transparent)
;; A LocalAction is one of
;; (make-local-expansion <Node(Stx)> Stx ?Stx Boolean Deriv)
;; (make-local-expansion/expr <Node(Stx)> Stx ?Stx Boolean ?Opaque Deriv)
;; (make-local-lift Stx Identifier)
;; (make-local-lift-end Stx)
;; (make-local-bind BindSyntaxes)
;; A LocalAction is one of ???
(define-struct (local-expansion node) (for-stx? me1 inner lifted me2 opaque)
#:transparent)
(define-struct local-lift (expr id) #:transparent)

View File

@ -41,6 +41,9 @@
(match/count d
[(Wrap deriv (e1 e2))
(R [#:pattern ?form]
[#:let transparent-stx (hash-ref opaque-table (syntax-e #'?form) #f)]
[#:when transparent-stx
[#:set-syntax transparent-stx]]
[#:expect-syntax e1 (list d)]
[#:when (base? d)
[#:learn (or (base-resolves d) null)]]
@ -366,20 +369,16 @@
(define (LocalAction local)
(match/count local
[(struct local-expansion (e1 e2 for-stx? me1 inner #f me2 opaque))
(R [#:do (when opaque
(fprintf (current-error-port)
"LocalAction: local-expand-expr\n"))]
[#:parameterize ((phase (if for-stx? (add1 (phase)) (phase))))
(R [#:parameterize ((phase (if for-stx? (add1 (phase)) (phase))))
[#:set-syntax e1]
[#:pattern ?form]
[#:rename/mark ?form e1 me1]
[Expr ?form inner]
[#:rename/mark ?form me2 e2]])]
[#:rename/mark ?form me2 e2]
[#:do (when opaque
(hash-set! opaque-table (syntax-e opaque) e2))]])]
[(struct local-expansion (e1 e2 for-stx? me1 inner lifted me2 opaque))
(R [#:do (when opaque
(fprintf (current-error-port)
"LocalAction: not handling opaque val\n"))]
[#:let begin-stx (stx-car lifted)]
(R [#:let begin-stx (stx-car lifted)]
[#:let lift-stxs (cdr (reverse (stx->list (stx-cdr lifted))))]
[#:parameterize ((phase (if for-stx? (add1 (phase)) (phase)))
(available-lift-stxs lift-stxs)
@ -400,7 +399,9 @@
[#:step 'splice-lifts visible-lifts]]
[#:pass2]
[#:set-syntax lifted]
[#:rename/mark ?form me2 e2]])]
[#:rename/mark ?form me2 e2]
[#:do (when opaque
(hash-set! opaque-table (syntax-e opaque) e2))]])]
[(struct local-lift (expr id))
;; FIXME: add action
(R [#:do (unless (pair? (available-lift-stxs))
@ -613,3 +614,10 @@
(apply fprintf (current-error-port) args)
(when #t
(apply error sym args)))
;; opaque-table
;; Weakly remembers assoc between opaque values and
;; actual syntax, so that actual can be substituted in
;; for destructuring.
;; FIXME: perhaps add event for opaque-stx unwrapping?
(define opaque-table (make-weak-hasheq))

View File

@ -22,7 +22,7 @@
[(symbol? d) `(quote ,d)]
[(string? d) `(quote ,d)]
[(pair? d) `(cons ,(serialize-datum (car d)) ,(serialize-datum (cdr d)))]
[(null? d) '()]
[(null? d) ''()]
[(exn? d) `(make-exn ,(exn-message d) (current-continuation-marks))]
[(syntax? d) `(datum->syntax #f ',(syntax->datum d))]
#;[(syntax? d) `(eval (quote ,(compile `(,#'quote-syntax ,d))))]

View File

@ -22,10 +22,8 @@
(super-new)))
(define (make-stepper)
(let ([f (new macro-stepper-frame%
(config (new macro-stepper-config/prefs%)))])
(send f show #t)
(send f get-widget)))
(define director (new macro-stepper-director%))
(send director new-stepper))
(define (debug-file file)
(let-values ([(events msg ctx) (load-debug-file file)])