Call rblf.setDefault() when appending to a variable without +=
Bug: 222737841
Test: go test
Change-Id: I10e9e994fb1979e2e06ad30bbe66a21657d1e3db
diff --git a/mk2rbc/variable.go b/mk2rbc/variable.go
index f7adca5..73afd19 100644
--- a/mk2rbc/variable.go
+++ b/mk2rbc/variable.go
@@ -88,20 +88,33 @@
}
value.emit(gctx)
}
-
- switch asgn.flavor {
- case asgnSet:
- emitAssignment()
- case asgnAppend:
- emitAppend()
- case asgnMaybeAppend:
- // If we are not sure variable has been assigned before, emit setdefault
+ 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
+ emitSetDefault()
emitAppend()
case asgnMaybeSet:
gctx.writef("if cfg.get(%q) == None:", pcv.nam)