summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-12-25 21:26:26 -0800
committerKaz Kylheku <kaz@kylheku.com>2016-12-25 21:26:26 -0800
commitcfa85a5389175f3f0efc81aaa6f3a6e004f5c16f (patch)
tree7b14f10e002fb51a8c9fd8ed495213a0600363f9
parent72bc70f02552fedd5a11ea3fa3d07ac41eb8ff02 (diff)
downloadtxr-cfa85a5389175f3f0efc81aaa6f3a6e004f5c16f.tar.gz
txr-cfa85a5389175f3f0efc81aaa6f3a6e004f5c16f.tar.bz2
txr-cfa85a5389175f3f0efc81aaa6f3a6e004f5c16f.zip
Add qquot optimization for ranges.
* eval.c (optimize_qquote_form): Check for a rcons forms. If thearguments are nothing but quoted forms, convert to literal range.
-rw-r--r--eval.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index dbb7a21f..b192459a 100644
--- a/eval.c
+++ b/eval.c
@@ -2870,6 +2870,16 @@ static val optimize_qquote_form(val form)
return rlcp_tree(cons(list_s, args), form);
}
+ if (sym == rcons_s) {
+ if (args && cdr(args) && !cddr(args) &&
+ all_satisfy(args, quote_form_p_f, nil))
+ {
+ val args_noq = mapcar(second_f, args);
+ return rlcp(rcons(first(args_noq), second(args_noq)), form);
+ }
+ return form;
+ }
+
return form;
}
}