Add RawExprAST
diff --git a/parser.go b/parser.go
index 43666f8..553a512 100644
--- a/parser.go
+++ b/parser.go
@@ -16,6 +16,7 @@
type parser struct {
rd *bufio.Reader
mk Makefile
+ filename string
lineno int
elineno int // lineno == elineno unless there is trailing '\'.
unBuf []byte
@@ -32,9 +33,10 @@
return true
}
-func newParser(rd io.Reader) *parser {
+func newParser(rd io.Reader, filename string) *parser {
return &parser{
- rd: bufio.NewReader(rd),
+ rd: bufio.NewReader(rd),
+ filename: filename,
}
}
@@ -47,6 +49,7 @@
p.lineno = p.elineno
line, err := p.rd.ReadBytes('\n')
p.lineno++
+ p.elineno = p.lineno
if err == io.EOF {
p.done = true
} else if err != nil {
@@ -90,6 +93,7 @@
lhs := string(bytes.TrimSpace(line[:sep]))
rhs := string(bytes.TrimLeft(line[esep:], " \t"))
ast := &AssignAST{lhs: lhs, rhs: rhs, assign_type: typ}
+ ast.filename = p.filename
ast.lineno = p.lineno
return ast
}
@@ -101,6 +105,7 @@
lhs: lhs,
rhs: rhs,
}
+ ast.filename = p.filename
ast.lineno = p.lineno
for {
line := p.readLine()
@@ -144,6 +149,12 @@
break
}
}
+ if ast == nil && len(bytes.TrimSpace(line)) > 0 {
+ a := &RawExprAST{expr: string(line)}
+ a.filename = p.filename
+ a.lineno = p.lineno
+ p.mk.stmts = append(p.mk.stmts, a)
+ }
}
return p.mk, nil
}
@@ -154,7 +165,7 @@
return Makefile{}, err
}
defer f.Close()
- parser := newParser(f)
+ parser := newParser(f, filename)
return parser.parse()
}