Delay allocating variationMaps until populating them

Modules are created with a nil variantionMap, which avoids allocating
an empty map if the module will never be split.
Context.addVariationDependencies constructs a variationMap to
compare against the variationMap of each variant, but constructed
an empty variationMap if no variations were specified.  A nil
map is not the same as an empty map, so consistently use a nil
map and create it when populating the first entry.

Change-Id: I48b604659f9cdb23326b504a093cdfe5a3eb4f68
This commit is contained in:
Colin Cross 2019-11-13 20:11:04 -08:00
parent d03b59d03e
commit 9403b5a790
2 changed files with 12 additions and 2 deletions

View file

@ -242,6 +242,9 @@ type Variation struct {
type variationMap map[string]string
func (vm variationMap) clone() variationMap {
if vm == nil {
return nil
}
newVm := make(variationMap)
for k, v := range vm {
newVm[k] = v
@ -1178,6 +1181,9 @@ func (c *Context) createVariations(origModule *moduleInfo, mutatorName string,
}
newVariant := origModule.variant.clone()
if newVariant == nil {
newVariant = make(variationMap)
}
newVariant[mutatorName] = variationName
m := *origModule
@ -1521,10 +1527,11 @@ func (c *Context) addVariationDependency(module *moduleInfo, variations []Variat
var newVariant variationMap
if !far {
newVariant = module.dependencyVariant.clone()
} else {
newVariant = make(variationMap)
}
for _, v := range variations {
if newVariant == nil {
newVariant = make(variationMap)
}
newVariant[v.Mutator] = v.Variation
}

View file

@ -838,6 +838,9 @@ func (mctx *mutatorContext) createVariations(variationNames []string, local bool
for i, module := range modules {
ret = append(ret, module.logicModule)
if !local {
if module.dependencyVariant == nil {
module.dependencyVariant = make(variationMap)
}
module.dependencyVariant[mctx.name] = variationNames[i]
}
}