Fix testcase/comment_in_command.mk
When you think something is maybe unnecessary, you are almost
always wrong.
diff --git a/parser.go b/parser.go
index 5571397..b9083b8 100644
--- a/parser.go
+++ b/parser.go
@@ -73,6 +73,31 @@
line = bytes.TrimRight(line, "\n")
+ return line
+}
+
+func removeComment(line []byte) []byte {
+ var parenStack []byte
+ for i, ch := range line {
+ switch ch {
+ case '(', '{':
+ parenStack = append(parenStack, ch)
+ case ')', '}':
+ if len(parenStack) > 0 {
+ parenStack = parenStack[:len(parenStack)-1]
+ }
+ case '#':
+ if len(parenStack) == 0 {
+ return line[:i]
+ }
+ }
+ }
+ return line
+}
+
+func (p *parser) readMakefileLine() []byte {
+ line := p.readLine()
+
// TODO: Handle \\ at the end of the line?
for len(line) > 0 && line[len(line)-1] == '\\' {
line = line[:len(line)-1]
@@ -81,12 +106,20 @@
p.lineno = lineno
line = append(line, nline...)
}
+ return removeComment(line)
+}
- index := bytes.IndexByte(line, '#')
- if index >= 0 {
- line = line[:index]
+func (p *parser) readRecipeLine() []byte {
+ line := p.readLine()
+
+ // TODO: Handle \\ at the end of the line?
+ for len(line) > 0 && line[len(line)-1] == '\\' {
+ line = append(line, '\n')
+ lineno := p.lineno
+ nline := p.readLine()
+ p.lineno = lineno
+ line = append(line, nline...)
}
-
return line
}
@@ -129,7 +162,7 @@
ast.lineno = p.lineno
ast.cmdLineno = p.elineno + 1
for {
- line := p.readLine()
+ line := p.readRecipeLine()
if len(line) == 0 {
break
} else if line[0] == '\t' {
@@ -373,7 +406,7 @@
}
}()
for !p.done {
- line := p.readLine()
+ line := p.readMakefileLine()
if len(p.inDef) > 0 {
if strings.TrimLeft(string(line), " ") == "endef" {