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

Commit ea0ff15f authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Parse variable references with #s" am: c9e38327

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/2028744

Change-Id: Ia0997c02afcd86b78fb77d189905d7835f65390f
parents 52b82e0e c9e38327
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -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()
+50 −0
Original line number Diff line number Diff line
@@ -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) {
+4 −0
Original line number Diff line number Diff line
@@ -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 *")