From 9c35d8bfded90e4c3e0b211e73871f3ededf569c Mon Sep 17 00:00:00 2001 From: Sasha Smundak Date: Tue, 17 Nov 2020 22:58:55 -0800 Subject: [PATCH] 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 --- androidmk/parser/parser.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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: