Parse variable references with #s
Inside a variable reference, a # does not start a comment. Fixes: 218742602 Test: go test Change-Id: I16cf04c74a8aa30482fd9293175f893e4efb60f1
This commit is contained in:
@@ -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()
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user