summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Sasha Smundak <asmundak@google.com> 2020-11-17 22:58:55 -0800
committer Sasha Smundak <asmundak@google.com> 2020-11-17 23:18:14 -0800
commit9c35d8bfded90e4c3e0b211e73871f3ededf569c (patch)
treed5b4facf681ca1e3bab9a64a5f9bbe83bdaab525
parent9240f955cb790464173dbe282add6d7a92bf1e58 (diff)
Parse else ifxxx statement
More recent versions of make provide "else ifdef/ifndef/ifeq/ifneq" directive: ifdef FOO ... else ifdef BAR ... endif Fix the parser to handle it. It returns the same Directive as the respective ifxxx counterpart, only that the Name is set to "elifdef/elifndef/elifeq/elifneq". Test: treehugger Change-Id: I74c6a2c7224bce1dd3465012fa84880fae21349b
-rw-r--r--androidmk/parser/parser.go15
1 files changed, 14 insertions, 1 deletions
diff --git a/androidmk/parser/parser.go b/androidmk/parser/parser.go
index 86dabf975..e61241b2d 100644
--- a/androidmk/parser/parser.go
+++ b/androidmk/parser/parser.go
@@ -212,8 +212,21 @@ func (p *parser) parseDirective() bool {
expression := SimpleMakeString("", pos)
switch d {
- case "endif", "endef", "else":
+ case "endif", "endef":
// Nothing
+ case "else":
+ p.ignoreSpaces()
+ if p.tok != '\n' {
+ d = p.scanner.TokenText()
+ p.accept(scanner.Ident)
+ if d == "ifdef" || d == "ifndef" || d == "ifeq" || d == "ifneq" {
+ d = "el" + d
+ p.ignoreSpaces()
+ expression = p.parseExpression()
+ } else {
+ p.errorf("expected ifdef/ifndef/ifeq/ifneq, found %s", d)
+ }
+ }
case "define":
expression, endPos = p.parseDefine()
default: