cue/load: use build.File to support "-"

Added test to test high-level usage for the eval command.

Change-Id: I00541817ef1a6a30580d27a0c2ccd3685602e846
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/5223
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/encoding/encoding.go b/internal/encoding/encoding.go
index 22871ea..178d506 100644
--- a/internal/encoding/encoding.go
+++ b/internal/encoding/encoding.go
@@ -115,18 +115,24 @@
 // type of f must be a data type, but does not have to be an encoding that
 // can stream. stdin is used in case the file is "-".
 func NewDecoder(f *build.File, cfg *Config) *Decoder {
-	r, err := reader(f, cfg.Stdin)
-	i := &Decoder{
-		closer:   r,
-		err:      err,
-		filename: f.Filename,
-		next: func() (ast.Expr, error) {
-			if err == nil {
-				err = io.EOF
-			}
-			return nil, io.EOF
-		},
+	i := &Decoder{filename: f.Filename}
+	i.next = func() (ast.Expr, error) {
+		if i.err != nil {
+			return nil, i.err
+		}
+		return nil, io.EOF
 	}
+
+	if f, ok := f.Source.(*ast.File); ok {
+		i.file = f
+		i.closer = ioutil.NopCloser(strings.NewReader(""))
+		// TODO: verify input format for CUE.
+		return i
+	}
+
+	r, err := reader(f, cfg.Stdin)
+	i.closer = r
+	i.err = err
 	if err != nil {
 		return i
 	}