diff --git a/collects/racket/enter.rkt b/collects/racket/enter.rkt index 5efcb187f2..6fe095f345 100644 --- a/collects/racket/enter.rkt +++ b/collects/racket/enter.rkt @@ -33,11 +33,15 @@ (define (do-enter! mod flags) (let ([flags (check-flags flags)]) (if mod - (begin (enter-require mod flags) - (let ([ns (module->namespace mod)]) - (current-namespace ns) - (unless (memq '#:dont-re-require-enter flags) - (namespace-require 'racket/enter)))) + (let* ([none "none"] + [exn (with-handlers ([void values]) + (enter-require mod flags) + none)] + [ns (module->namespace mod)]) + (current-namespace ns) + (unless (memq '#:dont-re-require-enter flags) + (namespace-require 'racket/enter)) + (unless (eq? none exn) (raise exn))) (current-namespace orig-namespace)))) (struct mod (name timestamp depends)) diff --git a/collects/tests/xrepl/xrepl.rkt b/collects/tests/xrepl/xrepl.rkt index 5d959ffae5..f599eae6b4 100644 --- a/collects/tests/xrepl/xrepl.rkt +++ b/collects/tests/xrepl/xrepl.rkt @@ -147,5 +147,11 @@ ; located at scribble/html.rkt ; imports: racket/base.rkt, scribble/html/main.rkt. ; no direct exports. + -> «(module broken racket/base (define foo 123) (error "bleh!"))» + -> «,en broken» + bleh! ⇒ threw an error... + 'broken> «foo» + 123 ⇒ ...but we still got in + 'broken> «,top» -> «,ex» @||})