Loading mk2rbc/mk2rbc.go +20 −0 Original line number Diff line number Diff line Loading @@ -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{}, Loading Loading @@ -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()} Loading mk2rbc/mk2rbc_test.go +20 −0 Original line number Diff line number Diff line Loading @@ -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() `, }, } Loading Loading
mk2rbc/mk2rbc.go +20 −0 Original line number Diff line number Diff line Loading @@ -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{}, Loading Loading @@ -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()} Loading
mk2rbc/mk2rbc_test.go +20 −0 Original line number Diff line number Diff line Loading @@ -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() `, }, } Loading