summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-03-03 01:44:37 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-03-03 01:44:37 -0800
commit039e2ebdfa5670de7a35084fd480fe204afbdc8b (patch)
treeb9726ccd8d6b0d29bba921c8b96e433a4a4ed38e /lib.c
parent6cbd5aa63b23044c12817e0d442fe7678f6a0754 (diff)
downloadtxr-039e2ebdfa5670de7a35084fd480fe204afbdc8b.tar.gz
txr-039e2ebdfa5670de7a35084fd480fe204afbdc8b.tar.bz2
txr-039e2ebdfa5670de7a35084fd480fe204afbdc8b.zip
* parser.l: Allowing ^ to be a quote character, and adjusting definition
of identifiers to rule this out from being the first character of a symbol which has no prefix. Recognize the ^ character as a token in the NESTED state. * lib.c (obj_print, obj_pprint): Render sys:qquote as ^. * parser.y (choose_quote): Function removed. (n_expr): Recognize '^' as quasiquote. Removed all the "smart quote" hacks that try to make quote behave as quote or quasiquote, or try to cancel out unquotes and quotes. * tests/009/json.txr: Fixed to ^ quasiquote. * tests/010/reghash.txr: Likewise. * tests/011/macros-2.txr: Likewise. * tests/011/mandel.txr: Likewise. * tests/011/special-1.txr: Likewise. * txr.1: Updated docs. * genvim.txr: Revamped definitions for txr_ident and txl_ident so that unqualified identifiers cannot start with # or ^, but ones with @ or : in front can start with these characters. * txr.vim: Regenerated.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib.c b/lib.c
index 04c550fa..d28d16d7 100644
--- a/lib.c
+++ b/lib.c
@@ -5233,9 +5233,12 @@ val obj_print(val obj, val out)
{
val sym = car(obj);
- if (sym == quote_s || sym == sys_qquote_s) {
+ if (sym == quote_s) {
put_char(chr('\''), out);
obj_print(second(obj), out);
+ } else if (sym == sys_qquote_s) {
+ put_char(chr('^'), out);
+ obj_print(second(obj), out);
} else if (sym == sys_unquote_s) {
put_char(chr(','), out);
obj_print(second(obj), out);
@@ -5419,9 +5422,12 @@ val obj_pprint(val obj, val out)
{
val sym = car(obj);
- if (sym == quote_s || sym == sys_qquote_s) {
+ if (sym == quote_s) {
put_char(chr('\''), out);
- obj_pprint(second(obj), out);
+ obj_print(second(obj), out);
+ } else if (sym == sys_qquote_s) {
+ put_char(chr('^'), out);
+ obj_print(second(obj), out);
} else if (sym == sys_unquote_s) {
put_char(chr(','), out);
obj_pprint(second(obj), out);