diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2023-03-21 22:12:11 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2023-03-21 22:12:11 -0700 |
commit | 7995694f138ccef0113ac0494790eb0461f5d44e (patch) | |
tree | f47a065ff5bf1b50d024c0b0a9f388549bd15051 /stdlib | |
parent | 1cdc46ddad07b2b9eadabad81a7321f6037452bf (diff) | |
download | txr-7995694f138ccef0113ac0494790eb0461f5d44e.tar.gz txr-7995694f138ccef0113ac0494790eb0461f5d44e.tar.bz2 txr-7995694f138ccef0113ac0494790eb0461f5d44e.zip |
compiler: recognize ignore and use functions
We want the ignore function to go away; but if variables
are mentioned, to suppress unused warnings on them.
* stdlib/compiler.tl (%functional-funs%): Remove nilf
from list since we are handling it specially.
(compiler comp-fun-form): Recognize (ignore ...)
and (nilf ...) forms, transforming
them into (progn .... nil). In the case of ignore,
walk the arguments: if any look like variables, mark
them used.
Also, add the use function to the pattern which handles
identity, since it is a synonym.
Diffstat (limited to 'stdlib')
-rw-r--r-- | stdlib/compiler.tl | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/stdlib/compiler.tl b/stdlib/compiler.tl index 2ba6626b..0b271cfd 100644 --- a/stdlib/compiler.tl +++ b/stdlib/compiler.tl @@ -350,7 +350,7 @@ (defvarl %functional-funs% '(chain chand juxt andf orf notf iff iffi dup flipargs if or and - progn prog1 prog2 retf apf ipf callf mapf tf nilf umethod uslot)) + progn prog1 prog2 retf apf ipf callf mapf tf umethod uslot)) (defvarl %functional% (hash-list %functional-funs% :eq-based)) @@ -1390,7 +1390,14 @@ (set form (rlcp ^(,bin ,a ,b) form))) ((- @a) (set form (rlcp ^(neg ,a) form))) - ((@(or identity + * min max logior logand) @a) + ((@(or ignore nilf) . @args) + (if (eql sym 'ignore) + (each ((a args)) + (if (bindable a) + env.(lookup-var a t)))) + (return-from comp-fun-form me.(compile oreg env + ^(progn ,*args nil)))) + ((@(or identity use + * min max logior logand) @a) (return-from comp-fun-form me.(compile oreg env a))))) (when (plusp olev) |