Add to-lower/to-upper

Bug: 262303006
Test: go test
Change-Id: I80af8ace90556e58676adac4cb90d5d62c5b7b96
This commit is contained in:
Cole Faust
2022-12-12 18:11:00 -08:00
parent d2daabfa02
commit 2dee63d9a8
2 changed files with 40 additions and 0 deletions

View File

@@ -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()}