don't panic
return error on api boundary.
diff --git a/eval.go b/eval.go
index 9c8427d..2d1de66 100644
--- a/eval.go
+++ b/eval.go
@@ -2,6 +2,7 @@
import (
"bytes"
+ "fmt"
"os/exec"
"path/filepath"
"regexp"
@@ -157,8 +158,13 @@
ast.eval(ev)
}
-func Eval(mk Makefile) *EvalResult {
+func Eval(mk Makefile) (er *EvalResult, err error) {
ev := newEvaluator()
+ defer func() {
+ if r := recover(); r != nil {
+ err = fmt.Errorf("panic: %v", r)
+ }
+ }()
for _, stmt := range mk.stmts {
ev.eval(stmt)
}
@@ -166,5 +172,5 @@
vars: ev.outVars,
rules: ev.outRules,
refs: ev.refs,
- }
+ }, nil
}