diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-10-25 20:19:04 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-10-25 20:19:04 -0700 |
commit | b72c9309c8d8f1af320dce616a69412510531b48 (patch) | |
tree | 0f5402ea189d3b3240fa76f602c9f7c0a14d1d05 | |
parent | 424ccf8eae59d60b85e31b6b0d32bac7492eb946 (diff) | |
download | txr-b72c9309c8d8f1af320dce616a69412510531b48.tar.gz txr-b72c9309c8d8f1af320dce616a69412510531b48.tar.bz2 txr-b72c9309c8d8f1af320dce616a69412510531b48.zip |
caseq, caseql, casequal: improvement in expansion.
* eval.c (me_case): When a list of case keys is one
element long, reduce it to an atom. Then a simple
equality is applied whether the item is equal
to the key, rather than whether it is a member
of a list containing that one key.
This helps with the (t) case which is mandatory,
since t is ruled out as a key.
-rw-r--r-- | eval.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -3665,6 +3665,9 @@ static val me_case(val form, val menv) if (keys == t) eval_error(form_orig, lit("~s: symbol t used as key"), casesym, nao); + if (consp(keys) && !cdr(keys)) + keys = car(keys); + if (star) { if (atom(keys)) keys = eval(keys, nil, form); |