Closed soegaard closed 9 years ago
Yes, it should be [,c (guard (even? c)) (+ c 1)]… I’ll take a look at where we generate that error message this evening and see if I can fix it.
Thanks, I’ll update the issue when I’ve put a better message in there.
-andy:)
On Jul 1, 2015, at 5:47 PM, Jens Axel Søgaard notifications@github.com wrote:
The following program gives an error not in the user program but in the framework.
lang nanopass
(define (constant? c) (number? c))
(define-language L (terminals (constant (c))) (Expr (e) c))
(define (parse v) (with-output-language (L Expr) (cond [(number? v) `,v] [else (error 'parse "got: ~a" v)])))
(define-pass add1 : L (e) -> L () (Expr : Expr (e) -> Expr () [c (guard (even? c)) (+ c 1)]))
(add1 (parse 42))
The mistake made above is that [c (guard (even? c)) (+ c 1)] should have been [,c (guard (even? c)) (+ c 1)].
The error message given is shown below. It indicates an internal error.
Dropbox/GitHub/nanopass-framework-racket/private/pass.rkt:319:33: nano-meta-fields: contract violation expected: nano-meta? given: '#s(nano-quote #) in: the 1st argument of (-> nano-meta? (listof (or/c nano-dots? nano-quote? nano-unquote? nano-cata? nano-meta? (listof any/c)))) contract from: /nanopass-framework-racket/private/records.rkt blaming: /nanopass-framework-racket/private/pass.rkt (assuming the contract is correct) at: /nanopass-framework-racket/private/records.rkt:44.5
— Reply to this email directly or view it on GitHub https://github.com/akeep/nanopass-framework-racket/issues/9.
Thanks again for the bug report. I've committed a fix to the error message and made your example program into a unit test so that it will not re-occur.
The following program gives an error not in the user program but in the framework.
lang nanopass
(define (constant? c) (number? c))
(define-language L (terminals (constant (c))) (Expr (e) c))
(define (parse v) (with-output-language (L Expr) (cond [(number? v) `,v] [else (error 'parse "got: ~a" v)])))
(define-pass add1 : L (e) -> L () (Expr : Expr (e) -> Expr () [c (guard (even? c)) (+ c 1)]))
(add1 (parse 42))
The mistake made above is that [c (guard (even? c)) (+ c 1)] should have been [,c (guard (even? c)) (+ c 1)].
The error message given is shown below. It indicates an internal error.
Dropbox/GitHub/nanopass-framework-racket/private/pass.rkt:319:33: nano-meta-fields: contract violation expected: nano-meta? given: '#s(nano-quote #<syntax (quote c)>) in: the 1st argument of (-> nano-meta? (listof (or/c nano-dots? nano-quote? nano-unquote? nano-cata? nano-meta? (listof any/c)))) contract from: