package ssa_test

import (
	"code.google.com/p/go.exp/ssa"
	"fmt"
	"go/ast"
	"go/parser"
	"os"
)

// This example demonstrates the SSA builder.
func Example() {
	const hello = `
package main

import "fmt"

func main() {
	fmt.Println("Hello, World!")
}
`

	// Construct a builder.  Imports will be loaded as if by 'go build'.
	builder := ssa.NewBuilder(&ssa.Context{Loader: ssa.MakeGoBuildLoader(nil)})

	// Parse the input file.
	file, err := parser.ParseFile(builder.Prog.Files, "hello.go", hello, parser.DeclarationErrors)
	if err != nil {
		fmt.Printf("Parsing failed: %s\n", err.Error())
		return
	}

	// Create a "main" package containing one file.
	mainPkg, err := builder.CreatePackage("main", []*ast.File{file})
	if err != nil {
		fmt.Printf("Type-checking failed: %s\n", err.Error())
		return
	}

	// Build SSA code for bodies of functions in mainPkg.
	builder.BuildPackage(mainPkg)

	// Print out the package-level functions.
	for _, mem := range mainPkg.Members {
		if fn, ok := mem.(*ssa.Function); ok {
			fn.DumpTo(os.Stdout)
		}
	}

	// Output:
	// # Name: main.main
	// # Declared at hello.go:6:6
	// func main():
	// .0.entry:							       P:0 S:0
	// 	a0 = new [1]interface{}                                 *[1]interface{}
	// 	t0 = &a0[0:untyped integer]                                *interface{}
	// 	t1 = make interface interface{} <- string ("Hello, World!":string) interface{}
	// 	*t0 = t1
	// 	t2 = slice a0[:]                                          []interface{}
	// 	t3 = fmt.Println(t2)                                 (n int, err error)
	// 	ret
}
