Improves error messages for Redex definition forms
This commit is contained in:
parent
3b9fcdea92
commit
98eaaebc65
|
@ -1331,6 +1331,10 @@
|
|||
(map (λ (x) (to-lw/proc (datum->syntax #f (cdr (syntax-e x)) x)))
|
||||
(syntax->list #'(lhs-for-lw ...)))))
|
||||
|
||||
(define-for-syntax (not-expression-context stx)
|
||||
(when (eq? (syntax-local-context) 'expression)
|
||||
(raise-syntax-error #f "not allowed in an expression context" stx)))
|
||||
|
||||
;
|
||||
;
|
||||
;
|
||||
|
@ -1369,6 +1373,7 @@
|
|||
(internal-define-metafunction stx #'prev #'rest #f)]))
|
||||
|
||||
(define (internal-define-metafunction orig-stx prev-metafunction stx relation?)
|
||||
(not-expression-context orig-stx)
|
||||
(syntax-case stx ()
|
||||
[(lang . rest)
|
||||
(let ([syn-error-name (if relation?
|
||||
|
@ -1532,6 +1537,7 @@
|
|||
(syntax->list #'(original-names ...)))))))))))))))]))
|
||||
|
||||
(define (define-judgment-form/proc stx)
|
||||
(not-expression-context stx)
|
||||
(syntax-case stx ()
|
||||
[(def-form-id lang . body)
|
||||
(let ([lang #'lang]
|
||||
|
@ -2261,6 +2267,7 @@
|
|||
parsed)
|
||||
|
||||
(define-syntax (define-language stx)
|
||||
(not-expression-context stx)
|
||||
(syntax-case stx ()
|
||||
[(form-name lang-name . nt-defs)
|
||||
(begin
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
(#rx"define-judgment-form:.*expression context"
|
||||
([illegal-def (define-judgment-form L #:mode (J) [(J)])])
|
||||
(values illegal-def))
|
||||
|
||||
(#rx"expected an identifier defined by define-language"
|
||||
([not-lang q])
|
||||
(define-judgment-form not-lang))
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
(#rx"define-language:.*expression context"
|
||||
([illegal-def (define-language L)])
|
||||
(values illegal-def))
|
||||
|
||||
(#rx"define-language:.*unquote disallowed"
|
||||
([illegal-unquote ,3])
|
||||
(let ()
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
(#rx"define-metafunction:.*expression context"
|
||||
([illegal-def (define-metafunction syn-err-lang [(f) ()])])
|
||||
(values illegal-def))
|
||||
(#rx"define-metafunction/extension:.*expression context"
|
||||
([illegal-def (define-metafunction/extension f syn-err-lang [(g) ()])])
|
||||
(let ()
|
||||
(define-metafunction syn-err-lang [(f) ()])
|
||||
(values illegal-def)))
|
||||
|
||||
(#rx"expected a pattern and a right-hand side"
|
||||
([clause [(f x)]])
|
||||
(define-metafunction syn-err-lang
|
||||
|
|
Loading…
Reference in New Issue
Block a user