go.tools/pointer: use new callgraph API.

Also: pointer.Analyze now returns a pointer.Result object,
containing the callgraph and the results of ssa.Value queries.

The oracle has been updated to use the new call and pointer APIs.

R=crawshaw, gri
CC=golang-dev
https://golang.org/cl/13915043
diff --git a/pointer/gen.go b/pointer/gen.go
index 62fb103..cebeff5 100644
--- a/pointer/gen.go
+++ b/pointer/gen.go
@@ -72,18 +72,13 @@
 	}
 
 	// Record the (v, id) relation if the client has queried v.
-	if indirect, ok := a.config.QueryValues[v]; ok {
+	if indirect, ok := a.config.Queries[v]; ok {
 		if indirect {
 			tmp := a.addNodes(v.Type(), "query.indirect")
 			a.load(tmp, id, a.sizeof(v.Type()))
 			id = tmp
 		}
-		ptrs := a.config.QueryResults
-		if ptrs == nil {
-			ptrs = make(map[ssa.Value][]Pointer)
-			a.config.QueryResults = ptrs
-		}
-		ptrs[v] = append(ptrs[v], ptr{a, id})
+		a.queries[v] = append(a.queries[v], ptr{a, id})
 	}
 }
 
@@ -125,7 +120,7 @@
 
 	// obj is the function object (identity, params, results).
 	obj := a.nextNode()
-	cgn := &cgnode{fn: fn, obj: obj}
+	cgn := a.makeCGNode(fn, obj)
 	sig := fn.Signature
 	a.addOneNode(sig, "func.cgnode", nil) // (scalar with Signature type)
 	if recv := sig.Recv(); recv != nil {
@@ -849,15 +844,12 @@
 	}
 
 	site := &callsite{
-		caller:  caller,
 		targets: targets,
 		instr:   instr,
-		pos:     instr.Pos(),
 	}
-	a.callsites = append(a.callsites, site)
+	caller.sites = append(caller.sites, site)
 	if a.log != nil {
-		fmt.Fprintf(a.log, "\t%s to targets %s from %s\n",
-			site.Description(), site.targets, site.caller)
+		fmt.Fprintf(a.log, "\t%s to targets %s from %s\n", site, site.targets, caller)
 	}
 }
 
@@ -1061,6 +1053,12 @@
 	}
 }
 
+func (a *analysis) makeCGNode(fn *ssa.Function, obj nodeid) *cgnode {
+	cgn := &cgnode{fn: fn, obj: obj}
+	a.cgnodes = append(a.cgnodes, cgn)
+	return cgn
+}
+
 // genRootCalls generates the synthetic root of the callgraph and the
 // initial calls from it to the analysis scope, such as main, a test
 // or a library.
@@ -1070,7 +1068,7 @@
 	r.Prog = a.prog // hack.
 	r.Enclosing = r // hack, so Function.String() doesn't crash
 	r.String()      // (asserts that it doesn't crash)
-	root := &cgnode{fn: r}
+	root := a.makeCGNode(r, 0)
 
 	// For each main package, call main.init(), main.main().
 	for _, mainPkg := range a.config.Mains {
@@ -1080,11 +1078,8 @@
 		}
 
 		targets := a.addOneNode(main.Signature, "root.targets", nil)
-		site := &callsite{
-			caller:  root,
-			targets: targets,
-		}
-		a.callsites = append(a.callsites, site)
+		site := &callsite{targets: targets}
+		root.sites = append(root.sites, site)
 		for _, fn := range [2]*ssa.Function{mainPkg.Func("init"), main} {
 			if a.log != nil {
 				fmt.Fprintf(a.log, "\troot call to %s:\n", fn)