summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-07-07 17:49:45 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-07-07 17:49:45 -0700
commitf1e0138c8c67ec046b994985741d800bbd86520e (patch)
tree258208b605576e93fcc11329cc081d85ae05aefe
parentb1d1e6aa735442a1f22a224a3627427aa74b23f3 (diff)
downloadtxr-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.tl44
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)))