
The `eq?'ness of syntax objects used to reconstruct the result was broken by disarming. The solution is to reconstruct based on the disarmed syntax object instead of the original. Merge to 5.1.2.
26 lines
1.0 KiB
Racket
26 lines
1.0 KiB
Racket
#lang racket/base
|
|
|
|
(define err-stx #'(error '"bad"))
|
|
|
|
(define (try expr)
|
|
(define out-str
|
|
(parameterize ([current-namespace (make-base-namespace)])
|
|
(parameterize ([current-compile (dynamic-require 'errortrace/errortrace-lib
|
|
'errortrace-compile-handler)]
|
|
[error-display-handler (dynamic-require 'errortrace/errortrace-lib
|
|
'errortrace-error-display-handler)])
|
|
(let ([o (open-output-string)])
|
|
(parameterize ([current-error-port o])
|
|
(call-with-continuation-prompt
|
|
(lambda ()
|
|
(eval expr))))
|
|
(get-output-string o)))))
|
|
(unless (regexp-match? (regexp-quote (format "~s" (syntax->datum err-stx)))
|
|
out-str)
|
|
(error 'test "not in context for: ~s" (syntax->datum expr))))
|
|
|
|
(try #`(begin (module m racket/base #,err-stx) (require 'm)))
|
|
(try err-stx)
|
|
(try #`(syntax-case 'a ()
|
|
(_ #,err-stx)))
|