Merge "Simplify equality expressions when comparing to "true""

This commit is contained in:
Treehugger Robot 2021-11-18 21:11:17 +00:00 committed by Gerrit Code Review
commit 7868f6818e
2 changed files with 43 additions and 14 deletions

View file

@ -224,9 +224,9 @@ func (s *toStringExpr) emit(ctx *generationContext) {
s.expr.emit(ctx)
ctx.write("))")
case starlarkTypeBool:
ctx.write("((")
ctx.write(`("true" if (`)
s.expr.emit(ctx)
ctx.write(`) ? "true" : "")`)
ctx.write(`) else "")`)
case starlarkTypeVoid:
ctx.write(`""`)
default:
@ -285,20 +285,33 @@ func (eq *eqExpr) eval(valueMap map[string]starlarkExpr) (res starlarkExpr, same
}
func (eq *eqExpr) emit(gctx *generationContext) {
emitSimple := func(expr starlarkExpr) {
if eq.isEq {
gctx.write("not ")
}
expr.emit(gctx)
var stringOperand string
var otherOperand starlarkExpr
if s, ok := maybeString(eq.left); ok {
stringOperand = s
otherOperand = eq.right
} else if s, ok := maybeString(eq.right); ok {
stringOperand = s
otherOperand = eq.left
}
// Are we checking that a variable is empty?
if isEmptyString(eq.left) {
emitSimple(eq.right)
return
} else if isEmptyString(eq.right) {
emitSimple(eq.left)
return
// If we've identified one of the operands as being a string literal, check
// for some special cases we can do to simplify the resulting expression.
if otherOperand != nil {
if stringOperand == "" {
if eq.isEq {
gctx.write("not ")
}
otherOperand.emit(gctx)
return
}
if stringOperand == "true" && otherOperand.typ() == starlarkTypeBool {
if !eq.isEq {
gctx.write("not ")
}
otherOperand.emit(gctx)
return
}
}
if eq.left.typ() != eq.right.typ() {

View file

@ -365,6 +365,21 @@ def init(g, handle):
cfg = rblf.cfg(handle)
if "true" == rblf.soong_config_get(g, "art_module", "source_build"):
pass
`,
},
{
desc: "ifeq with $(NATIVE_COVERAGE)",
mkname: "product.mk",
in: `
ifeq ($(NATIVE_COVERAGE),true)
endif
`,
expected: `load("//build/make/core:product_config.rbc", "rblf")
def init(g, handle):
cfg = rblf.cfg(handle)
if g.get("NATIVE_COVERAGE", False):
pass
`,
},
{
@ -1079,6 +1094,7 @@ var known_variables = []struct {
class varClass
starlarkType
}{
{"NATIVE_COVERAGE", VarClassSoong, starlarkTypeBool},
{"PRODUCT_NAME", VarClassConfig, starlarkTypeString},
{"PRODUCT_MODEL", VarClassConfig, starlarkTypeString},
{"PRODUCT_PACKAGES", VarClassConfig, starlarkTypeList},