diff options
author | Adam Scarr <adam@vektah.net> | 2017-08-06 23:32:10 +1000 |
---|---|---|
committer | Adam Scarr <adam@vektah.net> | 2017-08-06 23:32:10 +1000 |
commit | 666ea93dba377f267a2c8ecf97378a420db18383 (patch) | |
tree | 5efee0b6e4ccf44b854d9bb65e4e6fa5e7f86548 /json/json.go | |
parent | 9d7779e8ca5404f26abbd8cce0314d9cee967bba (diff) |
Eliminate a bunch of allocations
Diffstat (limited to 'json/json.go')
-rw-r--r-- | json/json.go | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/json/json.go b/json/json.go index 3aa5163..60c5a3f 100644 --- a/json/json.go +++ b/json/json.go @@ -9,15 +9,15 @@ import ( var ( value Parser - array = Map(And(WS, "[", Kleene(&value, And(WS, ",")), "]"), func(n Node) Node { - return n.([]Node)[1].([]Node) + array = Map(And(WS, "[", Kleene(&value, And(WS, ",")), "]"), func(n interface{}) interface{} { + return n.([]interface{})[1].([]interface{}) }) properties = Kleene(And(WS, String('"'), WS, ":", WS, &value), ",") - object = Map(And(WS, "{", WS, properties, WS, "}"), func(n Node) Node { + object = Map(And(WS, "{", WS, properties, WS, "}"), func(n interface{}) interface{} { ret := map[string]interface{}{} - for _, prop := range n.([]Node)[1].([]Node) { - vals := prop.([]Node) + for _, prop := range n.([]interface{})[1].([]interface{}) { + vals := prop.([]interface{}) if len(vals) == 3 { ret[vals[0].(string)] = vals[2] } else { @@ -28,20 +28,20 @@ var ( return ret }) - _null = Map(And(WS, "null"), func(n Node) Node { + _null = Map(And(WS, "null"), func(n interface{}) interface{} { return nil }) - _true = Map(And(WS, "true"), func(n Node) Node { + _true = Map(And(WS, "true"), func(n interface{}) interface{} { return true }) - _false = Map(And(WS, "false"), func(n Node) Node { + _false = Map(And(WS, "false"), func(n interface{}) interface{} { return false }) - Y = Map(And(&value, WS), func(n Node) Node { - nodes := n.([]Node) + Y = Map(And(&value, WS), func(n interface{}) interface{} { + nodes := n.([]interface{}) if len(nodes) > 0 { return nodes[0] } |