empty applications are now a syntax error

This commit is contained in:
Alex Shinn 2011-03-08 11:38:22 +00:00
parent bab88c01b4
commit 205008d7ce
2 changed files with 7 additions and 6 deletions

7
eval.c
View file

@ -826,10 +826,9 @@ static sexp analyze (sexp ctx, sexp object) {
} }
} }
} else { } else {
if (! (sexp_truep(sexp_listp(ctx, sexp_car(x))) if (! (sexp_pairp(sexp_car(x))
|| (sexp_synclop(sexp_car(x)) || (sexp_synclop(sexp_car(x))
&& sexp_truep(sexp_listp(ctx, && sexp_pairp(sexp_synclo_expr(sexp_car(x))))))
sexp_synclo_expr(sexp_car(x)))))))
sexp_warn(ctx, "invalid operand in application: ", x); sexp_warn(ctx, "invalid operand in application: ", x);
res = analyze_app(ctx, x); res = analyze_app(ctx, x);
} }
@ -843,6 +842,8 @@ static sexp analyze (sexp ctx, sexp object) {
sexp_context_fv(tmp)); sexp_context_fv(tmp));
x = sexp_synclo_expr(x); x = sexp_synclo_expr(x);
res = analyze(tmp, x); res = analyze(tmp, x);
} else if (sexp_nullp(x)) {
res = sexp_compile_error(ctx, "empty application in source", x);
} else { } else {
res = x; res = x;
} }

View file

@ -1,5 +1,5 @@
;; init.scm -- R5RS library procedures ;; init.scm -- R5RS library procedures
;; Copyright (c) 2009 Alex Shinn. All rights reserved. ;; Copyright (c) 2009-2011 Alex Shinn. All rights reserved.
;; BSD-style license: http://synthcode.com/license.txt ;; BSD-style license: http://synthcode.com/license.txt
;; provide c[ad]{2,4}r ;; provide c[ad]{2,4}r
@ -201,7 +201,7 @@
(else (else
(list (rename 'cons) (qq (car x) d) (qq (cdr x) d))))) (list (rename 'cons) (qq (car x) d) (qq (cdr x) d)))))
((vector? x) (list (rename 'list->vector) (qq (vector->list x) d))) ((vector? x) (list (rename 'list->vector) (qq (vector->list x) d)))
((symbol? x) (list (rename 'quote) x)) ((if (symbol? x) #t (null? x)) (list (rename 'quote) x))
(else x))) (else x)))
(qq (cadr expr) 0)))) (qq (cadr expr) 0))))
@ -702,7 +702,7 @@
(list (list
_let _let
_lp (cons (list w v) _lp (cons (list w v)
(map (lambda (x) (list x '())) ls-vars)) (map (lambda (x) (list x (list _quote '()))) ls-vars))
(list _if (list _null? w) (list _if (list _null? w)
(list _let (map (lambda (x l) (list _let (map (lambda (x l)
(list (car x) (list _reverse l))) (list (car x) (list _reverse l)))