Merge "Parse variable references with #s"

This commit is contained in:
Treehugger Robot 2022-03-22 03:15:47 +00:00 committed by Gerrit Code Review
commit c9e38327dd
3 changed files with 57 additions and 6 deletions

View file

@ -222,7 +222,7 @@ func (p *parser) parseDirective() bool {
if d == "ifdef" || d == "ifndef" || d == "ifeq" || d == "ifneq" {
d = "el" + d
p.ignoreSpaces()
expression = p.parseExpression()
expression = p.parseExpression('#')
expression.TrimRightSpaces()
} else {
p.errorf("expected ifdef/ifndef/ifeq/ifneq, found %s", d)
@ -232,7 +232,7 @@ func (p *parser) parseDirective() bool {
expression, endPos = p.parseDefine()
default:
p.ignoreSpaces()
expression = p.parseExpression()
expression = p.parseExpression('#')
}
p.nodes = append(p.nodes, &Directive{
@ -338,9 +338,6 @@ loop:
value.appendString(`\` + string(p.tok))
}
p.accept(p.tok)
case '#':
p.parseComment()
break loop
case '$':
var variable Variable
variable = p.parseVariable()
@ -522,7 +519,7 @@ func (p *parser) parseAssignment(t string, target *MakeString, ident *MakeString
// non-whitespace character after the = until the end of the logical line,
// which may included escaped newlines
p.accept('=')
value := p.parseExpression()
value := p.parseExpression('#')
value.TrimLeftSpaces()
if ident.EndsWith('+') && t == "=" {
ident.TrimRightOne()

View file

@ -34,6 +34,56 @@ var parserTestCases = []struct {
},
},
},
{
name: "Simple warning",
in: `$(warning A warning)`,
out: []Node{
&Variable{
Name: SimpleMakeString("warning A warning", NoPos),
},
},
},
{
name: "Warning with #",
in: `$(warning # A warning)`,
out: []Node{
&Variable{
Name: SimpleMakeString("warning # A warning", NoPos),
},
},
},
{
name: "Findstring with #",
in: `$(findstring x,x a #)`,
out: []Node{
&Variable{
Name: SimpleMakeString("findstring x,x a #", NoPos),
},
},
},
{
name: "If statement",
in: `ifeq (a,b) # comment
endif`,
out: []Node{
&Directive{
NamePos: NoPos,
Name: "ifeq",
Args: SimpleMakeString("(a,b) ", NoPos),
EndPos: NoPos,
},
&Comment{
CommentPos: NoPos,
Comment: " comment",
},
&Directive{
NamePos: NoPos,
Name: "endif",
Args: SimpleMakeString("", NoPos),
EndPos: NoPos,
},
},
},
}
func TestParse(t *testing.T) {

View file

@ -254,6 +254,8 @@ def init(g, handle):
in: `
$(warning this is the warning)
$(warning)
$(warning # this warning starts with a pound)
$(warning this warning has a # in the middle)
$(info this is the info)
$(error this is the error)
PRODUCT_NAME:=$(shell echo *)
@ -264,6 +266,8 @@ def init(g, handle):
cfg = rblf.cfg(handle)
rblf.mkwarning("product.mk", "this is the warning")
rblf.mkwarning("product.mk", "")
rblf.mkwarning("product.mk", "# this warning starts with a pound")
rblf.mkwarning("product.mk", "this warning has a # in the middle")
rblf.mkinfo("product.mk", "this is the info")
rblf.mkerror("product.mk", "this is the error")
cfg["PRODUCT_NAME"] = rblf.shell("echo *")