cue/errors: convert more errors to cue/errors.Error

Change-Id: Iecd21974252dfac0ff1dd72e1ce40ddf107ee444
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/2368
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cue/errors/errors.go b/cue/errors/errors.go
index 9111e65..8c38812 100644
--- a/cue/errors/errors.go
+++ b/cue/errors/errors.go
@@ -198,7 +198,10 @@
 
 // Error implements the error interface.
 func (e *posError) Error() string {
-	return e.Message.Error()
+	if e.err == nil {
+		return e.Message.Error()
+	}
+	return fmt.Sprintf("%s: %s", e.Message.Error(), e.err)
 }
 
 // List is a list of Errors.
diff --git a/cue/types.go b/cue/types.go
index c63021b..1b7615e 100644
--- a/cue/types.go
+++ b/cue/types.go
@@ -182,7 +182,7 @@
 	case errors.Error:
 		return &marshalError{x}
 	default:
-		return &marshalError{errors.Wrapf(err, token.NoPos, err.Error())}
+		return &marshalError{errors.Wrapf(err, token.NoPos, "json error")}
 	}
 }