diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 751befba6e..5940731367 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -824,6 +824,8 @@ type Checker struct { } func NewChecker(program Program) *Checker { + program.BindSourceFiles() + c := &Checker{} c.id = nextCheckerID.Add(1) c.program = program @@ -1198,7 +1200,6 @@ func (c *Checker) initializeIterationResolvers() { } func (c *Checker) initializeChecker() { - c.program.BindSourceFiles() // Initialize global symbol table augmentations := make([][]*ast.Node, 0, len(c.files)) for _, file := range c.files { @@ -13214,7 +13215,9 @@ func (c *Checker) mergeSymbolTable(target ast.SymbolTable, source ast.SymbolTabl // When merging the module augmentation into a.ts, the symbol for `A` will itself be merged, so its parent // should be the merged module symbol. But the symbol for `B` has only one declaration, so its parent should // be the module augmentation symbol, which contains its only declaration. - merged.Parent = mergedParent + if merged.Flags&ast.SymbolFlagsTransient != 0 { + merged.Parent = mergedParent + } } target[id] = merged } diff --git a/internal/compiler/program.go b/internal/compiler/program.go index afa7ae60b8..837b41b210 100644 --- a/internal/compiler/program.go +++ b/internal/compiler/program.go @@ -215,9 +215,13 @@ func (p *Program) CheckSourceFiles() { func (p *Program) createCheckers() { p.checkersOnce.Do(func() { p.checkers = make([]*checker.Checker, core.IfElse(p.programOptions.SingleThreaded, 1, 4)) + wg := core.NewWorkGroup(p.programOptions.SingleThreaded) for i := range p.checkers { - p.checkers[i] = checker.NewChecker(p) + wg.Queue(func() { + p.checkers[i] = checker.NewChecker(p) + }) } + wg.RunAndWait() p.checkersByFile = make(map[*ast.SourceFile]*checker.Checker) for i, file := range p.files { p.checkersByFile[file] = p.checkers[i%len(p.checkers)]