Loading mk2rbc/mk2rbc.go +7 −0 Original line number Diff line number Diff line Loading @@ -635,6 +635,13 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode case "+=": asgn.flavor = asgnAppend case "?=": if _, ok := lhs.(*productConfigVariable); ok { // Make sets all product configuration variables to empty strings before running product // config makefiles. ?= will have no effect on a variable that has been assigned before, // even if assigned to an empty string. So just skip emitting any code for this // assignment. return nil } asgn.flavor = asgnMaybeSet default: panic(fmt.Errorf("unexpected assignment type %s", a.Type)) Loading mk2rbc/mk2rbc_test.go +8 −12 Original line number Diff line number Diff line Loading @@ -923,8 +923,6 @@ def init(g, handle): cfg["PRODUCT_LIST2"] += ["a"] cfg["PRODUCT_LIST1"] += ["b"] cfg["PRODUCT_LIST2"] += ["b"] if cfg.get("PRODUCT_LIST3") == None: cfg["PRODUCT_LIST3"] = ["a"] cfg["PRODUCT_LIST1"] = ["c"] g.setdefault("PLATFORM_LIST", []) g["PLATFORM_LIST"] += ["x"] Loading Loading @@ -966,9 +964,10 @@ PRODUCT_LIST1 = a $(PRODUCT_LIST1) PRODUCT_LIST2 ?= a $(PRODUCT_LIST2) PRODUCT_LIST3 += a # Now doing them again should not have a setdefault because they've already been set # Now doing them again should not have a setdefault because they've already been set, except 2 # which did not emit an assignment before PRODUCT_LIST1 = a $(PRODUCT_LIST1) PRODUCT_LIST2 ?= a $(PRODUCT_LIST2) PRODUCT_LIST2 = a $(PRODUCT_LIST2) PRODUCT_LIST3 += a `, expected: `# All of these should have a setdefault because they're self-referential and not defined before Loading @@ -979,18 +978,15 @@ def init(g, handle): rblf.setdefault(handle, "PRODUCT_LIST1") cfg["PRODUCT_LIST1"] = (["a"] + cfg.get("PRODUCT_LIST1", [])) if cfg.get("PRODUCT_LIST2") == None: rblf.setdefault(handle, "PRODUCT_LIST2") cfg["PRODUCT_LIST2"] = (["a"] + cfg.get("PRODUCT_LIST2", [])) rblf.setdefault(handle, "PRODUCT_LIST3") cfg["PRODUCT_LIST3"] += ["a"] # Now doing them again should not have a setdefault because they've already been set # Now doing them again should not have a setdefault because they've already been set, except 2 # which did not emit an assignment before cfg["PRODUCT_LIST1"] = (["a"] + cfg["PRODUCT_LIST1"]) if cfg.get("PRODUCT_LIST2") == None: rblf.setdefault(handle, "PRODUCT_LIST2") cfg["PRODUCT_LIST2"] = (["a"] + cfg["PRODUCT_LIST2"]) cfg.get("PRODUCT_LIST2", [])) cfg["PRODUCT_LIST3"] += ["a"] `, }, Loading mk2rbc/variable.go +5 −8 Original line number Diff line number Diff line Loading @@ -109,14 +109,11 @@ func (pcv productConfigVariable) emitSet(gctx *generationContext, asgn *assignme } emitAppend() case asgnMaybeSet: gctx.writef("if cfg.get(%q) == None:", pcv.nam) gctx.indentLevel++ gctx.newLine() if needsSetDefault { emitSetDefault() } emitAssignment() gctx.indentLevel-- // In mk2rbc.go we never emit a maybeSet assignment for product config variables, because // they are set to empty strings before running product config. panic("Should never get here") default: panic("Unknown assignment flavor") } gctx.setHasBeenAssigned(&pcv) Loading Loading
mk2rbc/mk2rbc.go +7 −0 Original line number Diff line number Diff line Loading @@ -635,6 +635,13 @@ func (ctx *parseContext) handleAssignment(a *mkparser.Assignment) []starlarkNode case "+=": asgn.flavor = asgnAppend case "?=": if _, ok := lhs.(*productConfigVariable); ok { // Make sets all product configuration variables to empty strings before running product // config makefiles. ?= will have no effect on a variable that has been assigned before, // even if assigned to an empty string. So just skip emitting any code for this // assignment. return nil } asgn.flavor = asgnMaybeSet default: panic(fmt.Errorf("unexpected assignment type %s", a.Type)) Loading
mk2rbc/mk2rbc_test.go +8 −12 Original line number Diff line number Diff line Loading @@ -923,8 +923,6 @@ def init(g, handle): cfg["PRODUCT_LIST2"] += ["a"] cfg["PRODUCT_LIST1"] += ["b"] cfg["PRODUCT_LIST2"] += ["b"] if cfg.get("PRODUCT_LIST3") == None: cfg["PRODUCT_LIST3"] = ["a"] cfg["PRODUCT_LIST1"] = ["c"] g.setdefault("PLATFORM_LIST", []) g["PLATFORM_LIST"] += ["x"] Loading Loading @@ -966,9 +964,10 @@ PRODUCT_LIST1 = a $(PRODUCT_LIST1) PRODUCT_LIST2 ?= a $(PRODUCT_LIST2) PRODUCT_LIST3 += a # Now doing them again should not have a setdefault because they've already been set # Now doing them again should not have a setdefault because they've already been set, except 2 # which did not emit an assignment before PRODUCT_LIST1 = a $(PRODUCT_LIST1) PRODUCT_LIST2 ?= a $(PRODUCT_LIST2) PRODUCT_LIST2 = a $(PRODUCT_LIST2) PRODUCT_LIST3 += a `, expected: `# All of these should have a setdefault because they're self-referential and not defined before Loading @@ -979,18 +978,15 @@ def init(g, handle): rblf.setdefault(handle, "PRODUCT_LIST1") cfg["PRODUCT_LIST1"] = (["a"] + cfg.get("PRODUCT_LIST1", [])) if cfg.get("PRODUCT_LIST2") == None: rblf.setdefault(handle, "PRODUCT_LIST2") cfg["PRODUCT_LIST2"] = (["a"] + cfg.get("PRODUCT_LIST2", [])) rblf.setdefault(handle, "PRODUCT_LIST3") cfg["PRODUCT_LIST3"] += ["a"] # Now doing them again should not have a setdefault because they've already been set # Now doing them again should not have a setdefault because they've already been set, except 2 # which did not emit an assignment before cfg["PRODUCT_LIST1"] = (["a"] + cfg["PRODUCT_LIST1"]) if cfg.get("PRODUCT_LIST2") == None: rblf.setdefault(handle, "PRODUCT_LIST2") cfg["PRODUCT_LIST2"] = (["a"] + cfg["PRODUCT_LIST2"]) cfg.get("PRODUCT_LIST2", [])) cfg["PRODUCT_LIST3"] += ["a"] `, }, Loading
mk2rbc/variable.go +5 −8 Original line number Diff line number Diff line Loading @@ -109,14 +109,11 @@ func (pcv productConfigVariable) emitSet(gctx *generationContext, asgn *assignme } emitAppend() case asgnMaybeSet: gctx.writef("if cfg.get(%q) == None:", pcv.nam) gctx.indentLevel++ gctx.newLine() if needsSetDefault { emitSetDefault() } emitAssignment() gctx.indentLevel-- // In mk2rbc.go we never emit a maybeSet assignment for product config variables, because // they are set to empty strings before running product config. panic("Should never get here") default: panic("Unknown assignment flavor") } gctx.setHasBeenAssigned(&pcv) Loading