commit dedcef50a2ba56959d87e1d3273184ed677544b3
parent bd5be74aae4a58176bd6582208e9920ca00bb100
Author: Ryan Culpepper <ryanc@racket-lang.org>
Date: Wed, 10 Nov 2010 17:45:16 -0700
macro-stepper: added module versions of trace, expand/step
original commit: eeb7facdd64db74d4ec90ed870eab6da59c1818b
Diffstat:
4 files changed, 51 insertions(+), 38 deletions(-)
diff --git a/collects/macro-debugger/macro-debugger.scrbl b/collects/macro-debugger/macro-debugger.scrbl
@@ -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<%> ()]{
-
-@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?]
+@defproc[(expand-module/step [mod module-path?])
+ 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}
diff --git a/collects/macro-debugger/model/trace.rkt b/collects/macro-debugger/model/trace.rkt
@@ -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])
diff --git a/collects/macro-debugger/stepper.rkt b/collects/macro-debugger/stepper.rkt
@@ -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?)])
diff --git a/collects/macro-debugger/view/view.rkt b/collects/macro-debugger/view/view.rkt
@@ -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))