diff options
author | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-04-28 18:00:12 +0900 |
---|---|---|
committer | Shinichiro Hamaji <shinichiro.hamaji@gmail.com> | 2015-04-28 18:00:12 +0900 |
commit | 7a65e681c96cddad3ec2aa2007e067e67b713aa2 (patch) | |
tree | 1dd0ab5842c60333b151dc1d32962b9f76652338 /serialize.go | |
parent | c8dea2aa1b14346ce301acdad106c083f9e13213 (diff) | |
download | kati-7a65e681c96cddad3ec2aa2007e067e67b713aa2.tar.gz |
Do not serialize duplicated TSVs multiple times
Diffstat (limited to 'serialize.go')
-rw-r--r-- | serialize.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/serialize.go b/serialize.go index 15cfe8c..e217f69 100644 --- a/serialize.go +++ b/serialize.go @@ -233,6 +233,12 @@ func DeserializeVars(vars map[string]SerializableVar) Vars { } func DeserializeNodes(nodes []*SerializableDepNode, tsvs []SerializableTargetSpecificVar) (r []*DepNode) { + // Deserialize all TSVs first so that multiple rules can share memory. + var tsvValues []Var + for _, sv := range tsvs { + tsvValues = append(tsvValues, DeserializeVar(sv.Value).(Var)) + } + nodeMap := make(map[string]*DepNode) for _, n := range nodes { d := &DepNode{ @@ -249,7 +255,7 @@ func DeserializeNodes(nodes []*SerializableDepNode, tsvs []SerializableTargetSpe for _, id := range n.TargetSpecificVars { sv := tsvs[id] - d.TargetSpecificVars[sv.Name] = DeserializeVar(sv.Value).(Var) + d.TargetSpecificVars[sv.Name] = tsvValues[id] } nodeMap[n.Output] = d |