Build calls Package.Build for each package in prog. Building occurs in parallel unless the BuildSerially mode flag was set. Build is intended for whole-program analysis; a typical compiler need only build a single package. Build is idempotent and thread-safe.
()
| 2890 | // Build is idempotent and thread-safe. |
| 2891 | // |
| 2892 | func (prog *Program) Build() { |
| 2893 | var wg sync.WaitGroup |
| 2894 | for _, p := range prog.packages { |
| 2895 | if prog.mode&BuildSerially != 0 { |
| 2896 | p.Build(prog) |
| 2897 | } else { |
| 2898 | wg.Add(1) |
| 2899 | go func(p *SSAPackage) { |
| 2900 | p.Build(prog) |
| 2901 | wg.Done() |
| 2902 | }(p) |
| 2903 | } |
| 2904 | } |
| 2905 | wg.Wait() |
| 2906 | } |
| 2907 | |
| 2908 | // Build builds SSA code for all functions and vars in package p. |
| 2909 | // |