diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-13 14:37:56 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-13 14:37:56 -0500 |
| commit | 3a56f91a12ccad642227178c76f8d76cc42f81ee (patch) | |
| tree | 8ce730b6f4f8cb254dcf8e8f279a57868ae38020 /ruby/reader.rb | |
| parent | 393c1c447fbc61a6c84b7b003f98f6bd6a4add41 (diff) | |
| download | mal-3a56f91a12ccad642227178c76f8d76cc42f81ee.tar.gz mal-3a56f91a12ccad642227178c76f8d76cc42f81ee.zip | |
Ruby: add stepA_more and rest of core functions.
Diffstat (limited to 'ruby/reader.rb')
| -rw-r--r-- | ruby/reader.rb | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/ruby/reader.rb b/ruby/reader.rb index d6d9b8d..1039105 100644 --- a/ruby/reader.rb +++ b/ruby/reader.rb @@ -63,11 +63,15 @@ def read_form(rdr) when "`" then rdr.next; List.new [:quasiquote, read_form(rdr)] when "~" then rdr.next; List.new [:unquote, read_form(rdr)] when "~@" then rdr.next; List.new [:"splice-unquote", read_form(rdr)] + when "^" then rdr.next; meta = read_form(rdr); + List.new [:"with-meta", read_form(rdr), meta] + when "@" then rdr.next; List.new [:deref, read_form(rdr)] + when "(" then read_list(rdr, List, "(", ")") when ")" then raise "unexpected ')'" when "[" then read_list(rdr, Vector, "[", "]") when "]" then raise "unexpected ']'" - when "{" then raise "unexpected '{'" + when "{" then Hash[read_list(rdr, List, "{", "}").each_slice(2).to_a] when "}" then raise "unexpected '}'" else read_atom(rdr) end |
