Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7d49b1e7 authored by Cole Faust's avatar Cole Faust Committed by Gerrit Code Review
Browse files

Merge "Call rblf.setDefault() when appending to a variable without +="

parents 4a5110f0 816e080c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -993,6 +993,7 @@ endif
def init(g, handle):
  cfg = rblf.cfg(handle)
  if "hwaddress" not in cfg.get("PRODUCT_PACKAGES", []):
    rblf.setdefault(handle, "PRODUCT_PACKAGES")
    cfg["PRODUCT_PACKAGES"] = (rblf.mkstrip("%s hwaddress" % " ".join(cfg.get("PRODUCT_PACKAGES", [])))).split()
`,
	},
+19 −6
Original line number Diff line number Diff line
@@ -88,20 +88,33 @@ func (pcv productConfigVariable) emitSet(gctx *generationContext, asgn *assignme
		}
		value.emit(gctx)
	}
	emitSetDefault := func() {
		if pcv.typ == starlarkTypeList {
			gctx.writef("%s(handle, %q)", cfnSetListDefault, pcv.name())
		} else {
			gctx.writef("cfg.setdefault(%q, %s)", pcv.name(), pcv.defaultValueString())
		}
		gctx.newLine()
	}

	switch asgn.flavor {
	case asgnSet:
		isSelfReferential := false
		asgn.value.transform(func(expr starlarkExpr) starlarkExpr {
			if ref, ok := expr.(*variableRefExpr); ok && ref.ref.name() == pcv.name() {
				isSelfReferential = true
			}
			return nil
		})
		if isSelfReferential {
			emitSetDefault()
		}
		emitAssignment()
	case asgnAppend:
		emitAppend()
	case asgnMaybeAppend:
		// If we are not sure variable has been assigned before, emit setdefault
		if pcv.typ == starlarkTypeList {
			gctx.writef("%s(handle, %q)", cfnSetListDefault, pcv.name())
		} else {
			gctx.writef("cfg.setdefault(%q, %s)", pcv.name(), pcv.defaultValueString())
		}
		gctx.newLine()
		emitSetDefault()
		emitAppend()
	case asgnMaybeSet:
		gctx.writef("if cfg.get(%q) == None:", pcv.nam)