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
 }