made teachpacks still appear in the REPL even if there is a syntax error
svn: r7224
This commit is contained in:
parent
2be282a0be
commit
143faecd33
|
@ -491,38 +491,51 @@
|
||||||
|
|
||||||
(define/override (front-end/complete-program port settings)
|
(define/override (front-end/complete-program port settings)
|
||||||
(let ([state 'init]
|
(let ([state 'init]
|
||||||
;; state : 'init => 'require => 'done
|
;; state : 'init => 'require => 'done-or-exn
|
||||||
[reader (get-reader)])
|
[reader (get-reader)]
|
||||||
|
|
||||||
|
;; in state 'done-or-exn, if this is an exn, we raise it
|
||||||
|
;; otherwise, we just return eof
|
||||||
|
[saved-exn #f])
|
||||||
|
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(case state
|
(case state
|
||||||
[(init)
|
[(init)
|
||||||
(set! state 'require)
|
(set! state 'require)
|
||||||
(let ([body-exps
|
(let ([language-module (get-module)])
|
||||||
(let loop ()
|
(with-handlers ([exn:fail?
|
||||||
(let ([result (reader (object-name port) port)])
|
(λ (x)
|
||||||
(if (eof-object? result)
|
(set! saved-exn x)
|
||||||
null
|
(expand
|
||||||
(cons result (loop)))))]
|
(datum->syntax-object
|
||||||
[language-module (get-module)])
|
#f
|
||||||
(for-each
|
`(,#'module #%htdp ,language-module
|
||||||
(λ (tp)
|
,@(map (λ (x) `(require ,x))
|
||||||
(with-handlers ((exn:fail? (λ (x) (error 'teachpack (missing-tp-message tp)))))
|
(htdp-lang-settings-teachpacks settings))))))])
|
||||||
(unless (file-exists? (build-path (apply collection-path (cddr tp))
|
(let ([body-exps
|
||||||
(cadr tp)))
|
(let loop ()
|
||||||
(error))))
|
(let ([result (reader (object-name port) port)])
|
||||||
(htdp-lang-settings-teachpacks settings))
|
(if (eof-object? result)
|
||||||
(rewrite-module
|
null
|
||||||
settings
|
(cons result (loop)))))])
|
||||||
(expand
|
(for-each
|
||||||
(datum->syntax-object
|
(λ (tp)
|
||||||
#f
|
(with-handlers ((exn:fail? (λ (x) (error 'teachpack (missing-tp-message tp)))))
|
||||||
`(,#'module #%htdp ,language-module
|
(unless (file-exists? (build-path (apply collection-path (cddr tp))
|
||||||
,@(map (λ (x) `(require ,x))
|
(cadr tp)))
|
||||||
(htdp-lang-settings-teachpacks settings))
|
(error))))
|
||||||
,@body-exps)))))]
|
(htdp-lang-settings-teachpacks settings))
|
||||||
|
(rewrite-module
|
||||||
|
settings
|
||||||
|
(expand
|
||||||
|
(datum->syntax-object
|
||||||
|
#f
|
||||||
|
`(,#'module #%htdp ,language-module
|
||||||
|
,@(map (λ (x) `(require ,x))
|
||||||
|
(htdp-lang-settings-teachpacks settings))
|
||||||
|
,@body-exps)))))))]
|
||||||
[(require)
|
[(require)
|
||||||
(set! state 'done)
|
(set! state 'done-or-exn)
|
||||||
(syntax
|
(syntax
|
||||||
(let ([done-already? #f])
|
(let ([done-already? #f])
|
||||||
(dynamic-wind
|
(dynamic-wind
|
||||||
|
@ -534,7 +547,12 @@
|
||||||
(unless done-already?
|
(unless done-already?
|
||||||
(set! done-already? #t)
|
(set! done-already? #t)
|
||||||
(current-namespace (module->namespace '#%htdp)))))))]
|
(current-namespace (module->namespace '#%htdp)))))))]
|
||||||
[(done) eof]))))
|
[(done-or-exn)
|
||||||
|
(cond
|
||||||
|
[saved-exn
|
||||||
|
(raise saved-exn)]
|
||||||
|
[else
|
||||||
|
eof])]))))
|
||||||
|
|
||||||
(define/private (missing-tp-message x)
|
(define/private (missing-tp-message x)
|
||||||
(let* ([m (regexp-match #rx"/([^/]*)$" (cadr x))]
|
(let* ([m (regexp-match #rx"/([^/]*)$" (cadr x))]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user