aboutsummaryrefslogtreecommitdiff
path: root/serialize.go
diff options
context:
space:
mode:
authorShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-04-28 18:00:12 +0900
committerShinichiro Hamaji <shinichiro.hamaji@gmail.com>2015-04-28 18:00:12 +0900
commit7a65e681c96cddad3ec2aa2007e067e67b713aa2 (patch)
tree1dd0ab5842c60333b151dc1d32962b9f76652338 /serialize.go
parentc8dea2aa1b14346ce301acdad106c083f9e13213 (diff)
downloadkati-7a65e681c96cddad3ec2aa2007e067e67b713aa2.tar.gz
Do not serialize duplicated TSVs multiple times
Diffstat (limited to 'serialize.go')
-rw-r--r--serialize.go8
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