summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-10-25 20:19:04 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-10-25 20:19:04 -0700
commitb72c9309c8d8f1af320dce616a69412510531b48 (patch)
tree0f5402ea189d3b3240fa76f602c9f7c0a14d1d05
parent424ccf8eae59d60b85e31b6b0d32bac7492eb946 (diff)
downloadtxr-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.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index 31938f56..3f904e21 100644
--- a/eval.c
+++ b/eval.c
@@ -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);