From dedcef50a2ba56959d87e1d3273184ed677544b3 Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Wed, 10 Nov 2010 17:45:16 -0700 Subject: [PATCH] macro-stepper: added module versions of trace, expand/step original commit: eeb7facdd64db74d4ec90ed870eab6da59c1818b --- collects/macro-debugger/macro-debugger.scrbl | 35 ++++++-------------- collects/macro-debugger/model/trace.rkt | 16 +++++++++ collects/macro-debugger/stepper.rkt | 25 ++++++++++++-- collects/macro-debugger/view/view.rkt | 11 +----- 4 files changed, 50 insertions(+), 37 deletions(-) diff --git a/collects/macro-debugger/macro-debugger.scrbl b/collects/macro-debugger/macro-debugger.scrbl index 3192ab3..d8dc6a9 100644 --- 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<%> ()]{ +@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} diff --git a/collects/macro-debugger/model/trace.rkt b/collects/macro-debugger/model/trace.rkt index 45f41fd..527494b 100644 --- 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 index 07e782b..48982a6 100644 --- 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 index 3556962..5fec952 100644 --- 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))