diff options
author | 2020-11-17 22:58:55 -0800 | |
---|---|---|
committer | 2020-11-17 23:18:14 -0800 | |
commit | 9c35d8bfded90e4c3e0b211e73871f3ededf569c (patch) | |
tree | d5b4facf681ca1e3bab9a64a5f9bbe83bdaab525 | |
parent | 9240f955cb790464173dbe282add6d7a92bf1e58 (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.go | 15 |
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: |