diff options
| author | Joel Martin <github@martintribe.org> | 2014-10-09 21:37:00 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-10-09 21:37:00 -0500 |
| commit | f2544a9467ea032aff505b3ced3b4b3510a828fe (patch) | |
| tree | aa1984aef01c20b7b093527c28c37bd7d4d803d5 /go/src/reader | |
| parent | f2c9811fd8cbb205fad68952ebc1ba5d310f148d (diff) | |
| download | mal-f2544a9467ea032aff505b3ced3b4b3510a828fe.tar.gz mal-f2544a9467ea032aff505b3ced3b4b3510a828fe.zip | |
go: add metadata and atoms. HashMap dedicated type.
HashMap needs a dedicated type now to be able to store the metadata.
Diffstat (limited to 'go/src/reader')
| -rw-r--r-- | go/src/reader/reader.go | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/go/src/reader/reader.go b/go/src/reader/reader.go index 2ac5a08..38f163c 100644 --- a/go/src/reader/reader.go +++ b/go/src/reader/reader.go @@ -93,13 +93,13 @@ func read_list(rdr Reader, start string, end string) (MalType, error) { ast_list = append(ast_list, f) } rdr.next() - return List{ast_list}, nil + return List{ast_list,nil}, nil } func read_vector(rdr Reader) (MalType, error) { lst, e := read_list(rdr, "[", "]") if e != nil { return nil, e } - vec := Vector{lst.(List).Val} + vec := Vector{lst.(List).Val,nil} return vec, nil } @@ -116,16 +116,23 @@ func read_form(rdr Reader) (MalType, error) { case `'`: rdr.next(); form, e := read_form(rdr); if e != nil { return nil, e } - return List{[]MalType{Symbol{"quote"}, form}}, nil + return List{[]MalType{Symbol{"quote"}, form},nil}, nil case "`": rdr.next(); form, e := read_form(rdr); if e != nil { return nil, e } - return List{[]MalType{Symbol{"quasiquote"}, form}}, nil + return List{[]MalType{Symbol{"quasiquote"}, form},nil}, nil case `~`: rdr.next(); form, e := read_form(rdr); if e != nil { return nil, e } - return List{[]MalType{Symbol{"unquote"}, form}}, nil + return List{[]MalType{Symbol{"unquote"}, form},nil}, nil case `~@`: rdr.next(); form, e := read_form(rdr); if e != nil { return nil, e } - return List{[]MalType{Symbol{"splice-unquote"}, form}}, nil + return List{[]MalType{Symbol{"splice-unquote"}, form},nil}, nil + case `^`: rdr.next(); + meta, e := read_form(rdr); if e != nil { return nil, e } + form, e := read_form(rdr); if e != nil { return nil, e } + return List{[]MalType{Symbol{"with-meta"}, form,meta},nil}, nil + case `@`: rdr.next(); + form, e := read_form(rdr); if e != nil { return nil, e } + return List{[]MalType{Symbol{"deref"}, form},nil}, nil // list case ")": return nil, errors.New("unexpected ')'") |
