info: recognize by binding

Prior this PR:

    #lang info
    (list 1)

is accidentally considered well-formed.
This PR fixes the problem.
This commit is contained in:
Sorawee Porncharoenwase 2020-09-07 01:52:12 -07:00 committed by Matthew Flatt
parent 6366874ecd
commit cb723ad4c8

View File

@ -8,20 +8,20 @@
(define-syntax info-module-begin (define-syntax info-module-begin
(lambda (stx) (lambda (stx)
(syntax-case stx () (syntax-case stx ()
[(mod-beg defn ...) [(_ defn ...)
(let ([names (let loop ([defns (syntax->list (syntax (defn ...)))] (let ([names (let loop ([defns (syntax->list (syntax (defn ...)))]
[r '()]) [r '()])
(if (null? defns) (if (null? defns)
(reverse r) (reverse r)
(loop (cdr defns) (loop (cdr defns)
(syntax-case (car defns) (define) (syntax-case (car defns) (define define-values limited-require)
[(define var val) [(define var _val)
(identifier? #'var) (identifier? #'var)
(cons (syntax var) r)] (cons (syntax var) r)]
;; In case it gets expanded: ;; In case it gets expanded:
[(define-values (var) val) [(define-values (var) _val)
(cons (syntax var) r)] (cons (syntax var) r)]
[(require lib) r] ; ignore these (see below) [(limited-require _lib) r] ; ignore these (see below)
[_else (raise-syntax-error [_else (raise-syntax-error
'infotab-module 'infotab-module
"not a well-formed definition" "not a well-formed definition"