diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-07-07 17:49:45 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-07-07 17:49:45 -0700 |
commit | f1e0138c8c67ec046b994985741d800bbd86520e (patch) | |
tree | 258208b605576e93fcc11329cc081d85ae05aefe | |
parent | b1d1e6aa735442a1f22a224a3627427aa74b23f3 (diff) | |
download | txr-f1e0138c8c67ec046b994985741d800bbd86520e.tar.gz txr-f1e0138c8c67ec046b994985741d800bbd86520e.tar.bz2 txr-f1e0138c8c67ec046b994985741d800bbd86520e.zip |
compile-file: don't ignore atomic forms.
* share/txr/stdlib/compiler.tl (usr:compile-file): do not
silently ignore forms that (after macroexpansion) are atoms;
treat them like any other forms. This is mostly useless, but
if unbound variables are used as top-level forms, it is
diagnosed, and keeps the file compilation behavior closer to
interpreted semantics.
-rw-r--r-- | share/txr/stdlib/compiler.tl | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl index dfab93a9..f3acbc52 100644 --- a/share/txr/stdlib/compiler.tl +++ b/share/txr/stdlib/compiler.tl @@ -1668,28 +1668,28 @@ (put-line (butlast line) out-stream)) (seek-stream in-stream 0 :from-start)) (labels ((compile-form (unex-form) - (let ((form (macroexpand unex-form))) - (unless (atom form) - (caseq (car form) - (progn [mapdo compile-form (cdr form)]) - (compile-only (let ((*eval* nil)) - [mapdo compile-form (cdr form)])) - (eval-only (let ((*emit* nil)) - [mapdo compile-form (cdr form)])) - (t (when (and (or *eval* *emit*) - (not (constantp form))) - (let* ((vm-desc (compile-toplevel form)) - (flat-vd (list-from-vm-desc vm-desc)) - (fence (member (car form) %package-manip%))) - (when *eval* - (let ((pa *package-alist*)) - (sys:vm-execute-toplevel vm-desc) - (when (or (neq pa *package-alist*)) - (set fence t)))) - (when *emit* - out.(add flat-vd) - (when fence - out.(add :fence))))))))))) + (let* ((form (macroexpand unex-form)) + (sym (if (consp form) (car form)))) + (caseq sym + (progn [mapdo compile-form (cdr form)]) + (compile-only (let ((*eval* nil)) + [mapdo compile-form (cdr form)])) + (eval-only (let ((*emit* nil)) + [mapdo compile-form (cdr form)])) + (t (when (and (or *eval* *emit*) + (not (constantp form))) + (let* ((vm-desc (compile-toplevel form)) + (flat-vd (list-from-vm-desc vm-desc)) + (fence (member sym %package-manip%))) + (when *eval* + (let ((pa *package-alist*)) + (sys:vm-execute-toplevel vm-desc) + (when (or (neq pa *package-alist*)) + (set fence t)))) + (when *emit* + out.(add flat-vd) + (when fence + out.(add :fence)))))))))) (unwind-protect (whilet ((obj (read in-stream *stderr* err-ret)) ((neq obj err-ret))) |