interanal/core/runtime: move building logic from cue package

- Simplify logic
- Lazy load packages
- Cleanup interim types used for cue package transition

The lazy loading of builtin packages allows:
- adding builtin packages to a used Runtime
- isolate performance measurements and metrics for
  CUE code that doesn't use imports.

Change-Id: Idd4578100047f83397be7c1d69f66b083974e6c0
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/7421
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/internal/core/runtime/resolve.go b/internal/core/runtime/resolve.go
index 29f19e4..94188db 100644
--- a/internal/core/runtime/resolve.go
+++ b/internal/core/runtime/resolve.go
@@ -23,15 +23,9 @@
 	"cuelang.org/go/cue/errors"
 )
 
-func lineStr(idx *Index, n ast.Node) string {
-	return n.Pos().String()
-}
+func (r *Runtime) ResolveFiles(p *build.Instance) (errs errors.Error) {
+	idx := r.index
 
-func ResolveFiles(
-	idx *Index,
-	p *build.Instance,
-	isBuiltin func(s string) bool,
-) (errs errors.Error) {
 	// Link top-level declarations. As top-level entries get unified, an entry
 	// may be linked to any top-level entry of any of the files.
 	allFields := map[string]ast.Node{}
@@ -45,18 +39,17 @@
 		}
 	}
 	for _, f := range p.Files {
-		err := ResolveFile(idx, f, p, allFields, isBuiltin)
+		err := resolveFile(idx, f, p, allFields)
 		errs = errors.Append(errs, err)
 	}
 	return errs
 }
 
-func ResolveFile(
-	idx *Index,
+func resolveFile(
+	idx *index,
 	f *ast.File,
 	p *build.Instance,
 	allFields map[string]ast.Node,
-	isBuiltin func(s string) bool,
 ) errors.Error {
 	unresolved := map[string][]*ast.Ident{}
 	for _, u := range f.Unresolved {
@@ -82,7 +75,7 @@
 		name := path.Base(id)
 		if imp := p.LookupImport(id); imp != nil {
 			name = imp.PkgName
-		} else if !isBuiltin(id) {
+		} else if _, ok := idx.builtins[id]; !ok {
 			errs = errors.Append(errs,
 				nodeErrorf(spec, "package %q not found", id))
 			continue
@@ -162,3 +155,7 @@
 	// }
 	return errs
 }
+
+func lineStr(idx *index, n ast.Node) string {
+	return n.Pos().String()
+}