errortrace: skip annotation in namespace with wrong base phase

Closes PR 12551
This commit is contained in:
Matthew Flatt 2012-02-09 17:58:28 -07:00
parent 77bd401a2d
commit 284ba01db6
4 changed files with 22 additions and 4 deletions

View File

@ -436,7 +436,8 @@
(define (make-errortrace-compile-handler)
(let ([orig (current-compile)]
[reg (namespace-module-registry (current-namespace))])
[reg (namespace-module-registry (current-namespace))]
[phase (namespace-base-phase (current-namespace))])
(namespace-attach-module (namespace-anchor->namespace orig-namespace) 'racket/base)
(namespace-attach-module (namespace-anchor->namespace orig-namespace) 'errortrace/errortrace-key)
(lambda (e immediate-eval?)
@ -444,6 +445,8 @@
(if (and (instrumenting-enabled)
(eq? reg
(namespace-module-registry (current-namespace)))
(equal? phase
(namespace-base-phase (current-namespace)))
(not (compiled-expression? (if (syntax? e)
(syntax-e e)
e))))

View File

@ -237,7 +237,7 @@ source location information) for the original expression, and the
second element of the pair indicates if the code has been executed.
This list is snapshot of the current state of the computation.}
@defproc[(get-execute-counts) (list (cons/c syntax? number?))])]{
@defproc[(get-execute-counts) (list (cons/c syntax? number?))]{
Returns a list of pairs, one for each instrumented expression. The
first element of the pair is a @racket[syntax?] object (usually containing
source location information) for the original expression, and the
@ -308,7 +308,8 @@ Compiles @racket[stx] using the compilation handler that was active
when the @racketmodname[errortrace/errortrace-lib] module was
executed, but first instruments the code for Errortrace information.
The code is instrumented only if
@racketblock[(namespace-module-registry (current-namespace))]
@racketblock[(list (namespace-module-registry (current-namespace))
(namespace-base-phase (current-namespace)))]
is the same as when the
@racketmodname[errortrace/errortrace-lib] module was executed. This
procedure is suitable for use as a compilation handler via

View File

@ -3,10 +3,12 @@
(require tests/eli-tester
"wrap.rkt"
"alert.rkt"
"phase-1.rkt")
"phase-1.rkt"
"phase-1-eval.rkt")
(wrap-tests)
(test do (alert-tests))
(phase-1-tests)
(phase-1-eval-tests)

View File

@ -0,0 +1,12 @@
#lang racket/base
(provide phase-1-eval-tests)
;; Check that eval at phase 1 doesn't use errortrace.
(define (phase-1-eval-tests)
(define ns (make-base-namespace))
(parameterize ([current-namespace ns])
(namespace-require '(for-syntax (only racket/base + eval quote #%app #%datum)))
(dynamic-require 'errortrace #f)
(eval '(begin-for-syntax (eval '(+ 1 2))))))