diff --git a/collects/redex/private/reduction-semantics.rkt b/collects/redex/private/reduction-semantics.rkt index cb03b86740..9dad7e3627 100644 --- a/collects/redex/private/reduction-semantics.rkt +++ b/collects/redex/private/reduction-semantics.rkt @@ -1269,7 +1269,7 @@ [(nts) (language-id-nts #'lang-exp what)]) (with-syntax ([(side-condition-rewritten (vars ...) (ids/depths ...)) (rewrite-side-conditions/check-errs nts what #t #'pattern)]) - (with-syntax ([binders (map syntax-e (syntax->list #'(ids/depths ...)))] + (with-syntax ([binders (map syntax-e (syntax->list #'(vars ...)))] [name (syntax-local-infer-name stx)]) (syntax (do-test-match lang-exp `side-condition-rewritten 'binders 'name)))))] @@ -2788,7 +2788,7 @@ (set! visit-already-failed? #t) (inc-failures) (print-failed srcinfo) - (fprintf (current-error-port) "found a term that failed #:pred: ~v\n" t))))) + (eprintf "found a term that failed #:pred: ~v\n" t))))) (let-values ([(got got-cycle?) (apply-red red arg #:visit visit)]) (cond @@ -2796,7 +2796,7 @@ (not cycles-ok?)) (inc-failures) (print-failed srcinfo) - (fprintf (current-error-port) "found a cycle in the reduction graph\n")] + (eprintf "found a cycle in the reduction graph\n")] [else (unless visit-already-failed? (let* ([⊆ (λ (s1 s2) (andmap (λ (x1) (memf (λ (x) (equiv? x1 x)) s2)) s1))] @@ -2805,12 +2805,12 @@ (inc-failures) (print-failed srcinfo) (for-each - (λ (v2) (fprintf (current-error-port) "expected: ~v\n" v2)) + (λ (v2) (eprintf "expected: ~v\n" v2)) expected) (if (empty? got) - (fprintf (current-error-port) "got nothing\n") + (eprintf "got nothing\n") (for-each - (λ (v1) (fprintf (current-error-port) " actual: ~v\n" v1)) + (λ (v1) (eprintf " actual: ~v\n" v1)) got)))))]))) (define-syntax (test-->>∃ stx) @@ -2839,12 +2839,10 @@ (inc-failures) (begin (if (procedure? goal) - (fprintf (current-error-port) - "no term satisfying ~a reachable from ~a" goal start) - (fprintf (current-error-port) - "term ~a not reachable from ~a" goal start)) + (eprintf "no term satisfying ~a reachable from ~a" goal start) + (eprintf "term ~a not reachable from ~a" goal start)) (when (search-failure-cutoff? result) - (fprintf (current-error-port) " (within ~a steps)" steps)) + (eprintf " (within ~a steps)" steps)) (newline (current-error-port)))))) (define-syntax (test-predicate stx) @@ -2857,7 +2855,7 @@ (unless (pred arg) (inc-failures) (print-failed srcinfo) - (fprintf (current-error-port) " ~v does not hold for\n ~v\n" + (eprintf " ~v does not hold for\n ~v\n" pred arg))) (define-syntax (test-equal stx) @@ -2870,16 +2868,15 @@ (unless (equal? v1 v2) (inc-failures) (print-failed srcinfo) - (fprintf (current-error-port) " actual: ~v\n" v1) - (fprintf (current-error-port) "expected: ~v\n" v2))) + (eprintf " actual: ~v\n" v1) + (eprintf "expected: ~v\n" v2))) (define (print-failed srcinfo) (let ([file (list-ref srcinfo 0)] [line (list-ref srcinfo 1)] [column (list-ref srcinfo 2)] [pos (list-ref srcinfo 3)]) - (fprintf (current-error-port) - "FAILED ~a~a\n" + (eprintf "FAILED ~a~a\n" (cond [(path? file) (let-values ([(base name dir) (split-path file)]) diff --git a/collects/redex/private/rewrite-side-conditions.rkt b/collects/redex/private/rewrite-side-conditions.rkt index 4fa54b4f58..ceb8c805bd 100644 --- a/collects/redex/private/rewrite-side-conditions.rkt +++ b/collects/redex/private/rewrite-side-conditions.rkt @@ -344,6 +344,8 @@ (define-struct id/depth (id depth mismatch?)) ;; extract-names : syntax syntax -> (values (listof syntax) (listof syntax[x | (x ...) | ((x ...) ...) | ...])) + ;; this function is obsolete and uses of it are suspect. Things should be using + ;; rewrite-side-conditions/check-errs instead (define (extract-names all-nts what bind-names? orig-stx [mode 'rhs-only]) (let* ([dups (let loop ([stx orig-stx] diff --git a/collects/redex/private/rg.rkt b/collects/redex/private/rg.rkt index 1de054c9d2..d4940556b3 100644 --- a/collects/redex/private/rg.rkt +++ b/collects/redex/private/rg.rkt @@ -212,12 +212,10 @@ pre-threshold-incr)))))))) (define (generate/prior name env gen) - ;(printf "generate/prior ~s ~s ~s\n" name env gen) (let* ([none (gensym)] [prior (hash-ref env name none)]) (if (eq? prior none) (let-values ([(term env) (gen)]) - ;(printf "generated ~s for ~s\n" term name) (values term (hash-set env name term))) (values prior env)))) @@ -265,7 +263,7 @@ (define (bindings env) (make-bindings - (for/fold ([bindings null]) ([(key val) env]) + (for/fold ([bindings null]) ([(key val) (in-hash env)]) (if (symbol? key) (cons (make-bind key val) bindings) bindings)))) @@ -341,7 +339,7 @@ (add/ret `(list ,@(reverse lpats-rewritten)) vars)] [(? (compose not pair?)) (values pat '())]))) - + (let* ([nt? (is-nt? (if any? sexpp langp))] [mismatches? #f] [generator @@ -751,11 +749,8 @@ (let ([m (metafunc name)]) (if m m (raise-syntax-error #f "not a metafunction" stx name)))) -(define-for-syntax (term-generator lang pat what) - (with-syntax ([(pattern (vars ...) (vars/ellipses ...)) - (rewrite-side-conditions/check-errs - (language-id-nts lang what) - what #t pat)]) +(define-for-syntax (term-generator lang pattern what) + (with-syntax ([pattern pattern]) #`((compile #,lang '#,what) `pattern))) (define-syntax (generate-term stx) @@ -781,8 +776,12 @@ (reduction-relation-make-procs r)))]) #'rest)] [(_ lang pat . rest) - (values #`(list #,(term-generator #'lang #'pat form-name)) - #'rest)])) + (with-syntax ([(pattern (vars ...) (vars/ellipses ...)) + (rewrite-side-conditions/check-errs + (language-id-nts #'lang form-name) + form-name #t #'pat)]) + (values #`(list #,(term-generator #'lang #'pattern form-name)) + #'rest))])) (define generator-syntax #`(make-generator #,raw-generators '#,form-name #,(client-name stx form-name) #,(src-loc-stx stx))) (syntax-case args () @@ -841,9 +840,12 @@ (define-syntax (redex-check stx) (syntax-case stx () [(form lang pat property . kw-args) - (let-values ([(names names/ellipses) - (extract-names (language-id-nts #'lang 'redex-check) - 'redex-check #t #'pat)] + (let-values ([(pattern names names/ellipses) + (with-syntax ([(pattern names names/ellipses) + (rewrite-side-conditions/check-errs + (language-id-nts #'lang 'redex-check) + 'redex-check #t #'pat)]) + (values #'pattern #'names #'names/ellipses))] [(attempts-stx source-stx retries-stx print?-stx size-stx fix-stx) (apply values (parse-kw-args (list attempts-keyword @@ -891,7 +893,7 @@ fix #:term-match term-match)) #`(check-one - #,(term-generator #'lang #'pat 'redex-check) + #,(term-generator #'lang #'pattern 'redex-check) property att ret (and print? show) fix (and fix term-match)))))))))])) (define (format-attempts a) diff --git a/collects/redex/tests/tl-test.rkt b/collects/redex/tests/tl-test.rkt index 4fa70d918b..d4d0e142c1 100644 --- a/collects/redex/tests/tl-test.rkt +++ b/collects/redex/tests/tl-test.rkt @@ -55,6 +55,15 @@ (UN (add1 UN) zero)) + (test (let ([m (redex-match + empty-language + (side-condition (any_1 ...) #t) + '())]) + (and m + (= 1 (length m)) + (match-bindings (car m)))) + (list (make-bind 'any_1 '()))) + (test (pair? (redex-match grammar M '(1 1))) #t) (test (pair? (redex-match grammar M '(1 1 1))) #f) (test (pair? (redex-match grammar