macro-stepper: added module versions of trace, expand/step
original commit: eeb7facdd64db74d4ec90ed870eab6da59c1818b
This commit is contained in:
parent
bd5be74aae
commit
dedcef50a2
|
@ -28,29 +28,24 @@ syntax browser uses colors and a properties panel to show the term's
|
|||
syntax properties, such as lexical binding information and source
|
||||
location.
|
||||
|
||||
|
||||
@section{Macro stepper}
|
||||
|
||||
@defmodule[macro-debugger/stepper]
|
||||
|
||||
@defproc[(expand/step [stx any/c])
|
||||
(is-a/c macro-stepper<%>)]{
|
||||
void?]{
|
||||
|
||||
Expands the syntax (or S-expression) and opens a macro stepper frame
|
||||
for stepping through the expansion.
|
||||
Expands the syntax (or S-expression) and opens a macro stepper frame
|
||||
for stepping through the expansion.
|
||||
}
|
||||
|
||||
@definterface[macro-stepper<%> ()]{
|
||||
@defproc[(expand-module/step [mod module-path?])
|
||||
void?]{
|
||||
|
||||
@defmethod[(at-start?) boolean?]
|
||||
@defmethod[(at-end?) boolean?]
|
||||
@defmethod[(navigate-to-start) void?]
|
||||
@defmethod[(navigate-to-end) void?]
|
||||
@defmethod[(navigate-previous) void?]
|
||||
@defmethod[(navigate-next) void?]
|
||||
@defmethod[(at-top?) boolean?]
|
||||
@defmethod[(at-bottom?) boolean?]
|
||||
@defmethod[(navigate-up) void?]
|
||||
@defmethod[(navigate-down) void?]
|
||||
Expands the source file named by @racket[mod], which must contains a
|
||||
single module declaration, and opens a macro stepper frame for
|
||||
stepping through the expansion.
|
||||
}
|
||||
|
||||
@section{Macro expansion tools}
|
||||
|
@ -139,7 +134,6 @@ transformer returns. Unmarking is suppressed if @scheme[unmark?] is
|
|||
]
|
||||
|
||||
(Run the fragment above in the macro stepper.)
|
||||
|
||||
}
|
||||
|
||||
@defproc[(emit-local-step [before syntax?] [after syntax?]
|
||||
|
@ -151,9 +145,9 @@ Emits an event that simulates a local expansion step from
|
|||
|
||||
The @scheme[id] argument acts as the step's ``macro'' for the purposes
|
||||
of macro hiding.
|
||||
|
||||
}
|
||||
|
||||
|
||||
@section{Macro stepper text interface}
|
||||
|
||||
@defmodule[macro-debugger/stepper-text]
|
||||
|
@ -188,6 +182,7 @@ of macro hiding.
|
|||
@scheme['all] to print out all remaining steps.
|
||||
}
|
||||
|
||||
|
||||
@section{Syntax browser}
|
||||
|
||||
@defmodule[macro-debugger/syntax-browser]
|
||||
|
@ -208,14 +203,6 @@ of macro hiding.
|
|||
objects.
|
||||
}
|
||||
|
||||
@;{
|
||||
@defproc[(syntax-snip [stx syntax?])
|
||||
(is-a/c snip%)]{
|
||||
|
||||
Like @scheme[browse-syntax], but creates a snip that can be
|
||||
displayed in an editor.
|
||||
}
|
||||
}
|
||||
|
||||
@section{Using the macro stepper}
|
||||
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#lang racket/base
|
||||
(require racket/promise
|
||||
syntax/modcode
|
||||
syntax/modresolve
|
||||
parser-tools/lex
|
||||
"deriv-parser.rkt"
|
||||
"deriv-tokens.rkt")
|
||||
|
||||
(provide trace
|
||||
trace*
|
||||
trace-module
|
||||
trace*-module
|
||||
trace/result
|
||||
trace-verbose?
|
||||
events->token-generator
|
||||
|
@ -25,6 +29,11 @@
|
|||
(let-values ([(result events derivp) (trace* stx expander)])
|
||||
(force derivp)))
|
||||
|
||||
;; trace-module : module-path -> Deriv
|
||||
(define (trace-module module-path)
|
||||
(let-values ([(result events derivp) (trace*-module module-path)])
|
||||
(force derivp)))
|
||||
|
||||
;; trace/result : stx -> stx/exn Deriv
|
||||
(define (trace/result stx [expander expand/compile-time-evals])
|
||||
(let-values ([(result events derivp) (trace* stx expander)])
|
||||
|
@ -39,6 +48,13 @@
|
|||
(delay (parse-derivation
|
||||
(events->token-generator events))))))
|
||||
|
||||
;; trace*-module : module-path -> stx/exn (listof event) (promiseof Deriv)
|
||||
(define (trace*-module module-path)
|
||||
(get-module-code (resolve-module-path module-path #f)
|
||||
#:choose (lambda _ 'src)
|
||||
#:compile (lambda (stx)
|
||||
(trace* stx expand))))
|
||||
|
||||
;; events->token-generator : (list-of event) -> (-> token)
|
||||
(define (events->token-generator events)
|
||||
(let ([pos 1])
|
||||
|
|
|
@ -1,6 +1,25 @@
|
|||
#lang racket/base
|
||||
(require "view/view.rkt")
|
||||
(provide expand/step)
|
||||
(require racket/class
|
||||
racket/contract
|
||||
unstable/class-iop
|
||||
"model/trace.rkt"
|
||||
"view/interfaces.rkt"
|
||||
"view/view.rkt")
|
||||
|
||||
(define (create-stepper deriv)
|
||||
(define director (new macro-stepper-director%))
|
||||
(define stepper (send/i director director<%> new-stepper))
|
||||
(send/i director director<%> add-deriv deriv)
|
||||
(void))
|
||||
|
||||
(define (expand/step stx)
|
||||
(go stx))
|
||||
(create-stepper (trace stx)))
|
||||
|
||||
(define (expand-module/step module-path)
|
||||
(create-stepper (trace-module module-path)))
|
||||
|
||||
(provide/contract
|
||||
[expand/step
|
||||
(-> syntax? void?)]
|
||||
[expand-module/step
|
||||
(-> module-path? void?)])
|
||||
|
|
|
@ -9,8 +9,7 @@
|
|||
"prefs.rkt"
|
||||
"../model/trace.rkt")
|
||||
(provide macro-stepper-director%
|
||||
macro-stepper-frame%
|
||||
go)
|
||||
macro-stepper-frame%)
|
||||
|
||||
(define macro-stepper-director%
|
||||
(class* object% (director<%>)
|
||||
|
@ -61,11 +60,3 @@
|
|||
(macro-stepper-frame-mixin
|
||||
(frame:standard-menus-mixin
|
||||
(frame:basic-mixin frame%))))
|
||||
|
||||
;; Main entry points
|
||||
|
||||
(define (go stx)
|
||||
(define director (new macro-stepper-director%))
|
||||
(define stepper (send/i director director<%> new-stepper))
|
||||
(send/i director director<%> add-deriv (trace stx))
|
||||
(void))
|
||||
|
|
Loading…
Reference in New Issue
Block a user