aboutsummaryrefslogtreecommitdiff
path: root/r/reader.r
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-11-03 21:19:13 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:44 -0600
commit36737ae57ee106be16426bf9ef088380421ca0ec (patch)
treed3c405f95ccf63ab3897a4f17566bcc149cd7bf3 /r/reader.r
parent8128c69a1da03d3b8d62defb4533c3e3ae706682 (diff)
downloadmal-36737ae57ee106be16426bf9ef088380421ca0ec.tar.gz
mal-36737ae57ee106be16426bf9ef088380421ca0ec.zip
R: add hash-map and metadata support.
Diffstat (limited to 'r/reader.r')
-rw-r--r--r/reader.r11
1 files changed, 11 insertions, 0 deletions
diff --git a/r/reader.r b/r/reader.r
index 26c80c9..780dd4d 100644
--- a/r/reader.r
+++ b/r/reader.r
@@ -89,6 +89,13 @@ read_form <- function(rdr) {
} else if (token == "~@") {
. <- Reader.next(rdr);
new.list(new.symbol("splice-unquote"), read_form(rdr))
+ } else if (token == "^") {
+ . <- Reader.next(rdr)
+ m <- read_form(rdr)
+ new.list(new.symbol("with-meta"), read_form(rdr), m)
+ } else if (token == "@") {
+ . <- Reader.next(rdr);
+ new.list(new.symbol("deref"), read_form(rdr))
} else if (token == ")") {
throw("unexpected ')'")
} else if (token == "(") {
@@ -97,6 +104,10 @@ read_form <- function(rdr) {
throw("unexpected ']'")
} else if (token == "[") {
new.vectorl(read_seq(rdr, "[", "]"))
+ } else if (token == "}") {
+ throw("unexpected '}'")
+ } else if (token == "{") {
+ new.hash_mapl(read_seq(rdr, "{", "}"))
} else {
read_atom(rdr)
}