From f637b94a6161205d1728b068a1c51d7f910a7eb5 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 10 Dec 2015 08:06:41 -0700 Subject: [PATCH] evaluate expression only once for `eval:check` --- scribble-lib/scribble/eval.rkt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scribble-lib/scribble/eval.rkt b/scribble-lib/scribble/eval.rkt index c48b22fb..04d4a074 100644 --- a/scribble-lib/scribble/eval.rkt +++ b/scribble-lib/scribble/eval.rkt @@ -259,19 +259,19 @@ (map (current-print) v)) (close-output-port out) in)))]))) - (define (do-ev s) - (with-handlers ([(lambda (x) (not (exn:break? x))) - (lambda (e) - (cons ((scribble-exn->string) e) - (get-outputs)))]) - (cons (render-value (do-plain-eval ev s #t)) (get-outputs)))) (define (do-ev/expect s expect) + (define-values (val render+output) + (with-handlers ([(lambda (x) (not (exn:break? x))) + (lambda (e) + (cons ((scribble-exn->string) e) + (get-outputs)))]) + (define val (do-plain-eval ev s #t)) + (values val (cons (render-value val) (get-outputs))))) (when expect - (let ([r (do-plain-eval ev s #t)] - [expect (do-plain-eval ev (car expect) #t)]) - (unless (equal? r expect) + (let ([expect (do-plain-eval ev (car expect) #t)]) + (unless (equal? val expect) (raise-syntax-error 'eval "example result check failed" s)))) - (do-ev s)) + render+output) (lambda (str) (if (eval-results? str) (list (map formatted-result (eval-results-contents str))