From 56ffc62ee2a0fdd6076c7d514dd5c5048cca4ceb Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 9 Dec 2008 22:07:28 +0000 Subject: [PATCH] when embedding source modules for an executable, includes any needed reader modules svn: r12758 --- collects/lang/htdp-langs.ss | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/collects/lang/htdp-langs.ss b/collects/lang/htdp-langs.ss index 8b14895f7e..486d2f4218 100644 --- a/collects/lang/htdp-langs.ss +++ b/collects/lang/htdp-langs.ss @@ -439,18 +439,31 @@ (λ (port) (cond [(is-wxme-stream? port) - (let-values ([(snip-class-names data-class-names) - (extract-used-classes port)]) - (list* - '(lib "wxme/read.ss") - '(lib "mred/mred.ss") - reader-module - (filter - values - (map (λ (x) (string->lib-path x #t)) - (append - snip-class-names - data-class-names)))))] + (append + ;; Extract snip-related modules: + (let-values ([(snip-class-names data-class-names) + (extract-used-classes port)]) + (list* + '(lib "wxme/read.ss") + '(lib "mred/mred.ss") + reader-module + (filter + values + (map (λ (x) (string->lib-path x #t)) + (append + snip-class-names + data-class-names))))) + ;; Extract reader-related modules: + (begin + (file-position port 0) + (let ([mods null]) + (parameterize ([current-reader-guard + (let ([g (current-reader-guard)]) + (lambda (p) + (set! mods (cons p mods)) + (g p)))]) + (read-language (wxme-port->port port) (lambda () #f))) + mods)))] [else '()])))) #:mred? #t))))))