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

Commit 2dee63d9 authored by Cole Faust's avatar Cole Faust
Browse files

Add to-lower/to-upper

Bug: 262303006
Test: go test
Change-Id: I80af8ace90556e58676adac4cb90d5d62c5b7b96
parent d2daabfa
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -116,6 +116,8 @@ var knownFunctions = map[string]interface {
	"sort":     &simpleCallParser{name: baseName + ".mksort", returnType: starlarkTypeList},
	"strip":    &simpleCallParser{name: baseName + ".mkstrip", returnType: starlarkTypeString},
	"subst":    &substCallParser{fname: "subst"},
	"to-lower": &lowerUpperParser{isUpper: false},
	"to-upper": &lowerUpperParser{isUpper: true},
	"warning":  &makeControlFuncParser{name: baseName + ".mkwarning"},
	"word":     &wordCallParser{},
	"words":    &wordsCallParser{},
@@ -1895,6 +1897,24 @@ func (p *evalNodeParser) parse(ctx *parseContext, node mkparser.Node, args *mkpa
	return []starlarkNode{ctx.newBadNode(node, "Eval expression too complex; only assignments, comments, includes, and inherit-products are supported")}
}

type lowerUpperParser struct {
	isUpper bool
}

func (p *lowerUpperParser) parse(ctx *parseContext, node mkparser.Node, args *mkparser.MakeString) starlarkExpr {
	fn := "lower"
	if p.isUpper {
		fn = "upper"
	}
	arg := ctx.parseMakeString(node, args)

	return &callExpr{
		object:     arg,
		name:       fn,
		returnType: starlarkTypeString,
	}
}

func (ctx *parseContext) parseMakeString(node mkparser.Node, mk *mkparser.MakeString) starlarkExpr {
	if mk.Const() {
		return &stringLiteralExpr{mk.Dump()}
+20 −0
Original line number Diff line number Diff line
@@ -1659,6 +1659,26 @@ def init(g, handle):
  g["X"] = "%s Y" % g.get("A", "") or g["B"]
  g["D"] = rblf.expand_wildcard("*.mk")
  g["X"] = rblf.mk2rbc_error("product.mk:12", "Expected all arguments to $(or) or $(and) to have the same type, found \"string\" and \"list\"")
`,
	},
	{

		desc:   "is-lower/is-upper",
		mkname: "product.mk",
		in: `
X := $(call to-lower,aBc)
X := $(call to-upper,aBc)
X := $(call to-lower,$(VAR))
X := $(call to-upper,$(VAR))
`,
		expected: `load("//build/make/core:product_config.rbc", "rblf")

def init(g, handle):
  cfg = rblf.cfg(handle)
  g["X"] = ("aBc").lower()
  g["X"] = ("aBc").upper()
  g["X"] = (g.get("VAR", "")).lower()
  g["X"] = (g.get("VAR", "")).upper()
`,
	},
}