diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 51f0027493..00f193ffeb 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -30574,7 +30574,7 @@ func (c *Checker) GetTypeAtLocation(node *ast.Node) *Type { func (c *Checker) GetEmitResolver(file *ast.SourceFile) *emitResolver { c.emitResolverOnce.Do(func() { - c.emitResolver = &emitResolver{checker: c} + c.emitResolver = newEmitResolver(c) }) return c.emitResolver diff --git a/internal/checker/emitresolver.go b/internal/checker/emitresolver.go index 4be45bc033..deca1d3a42 100644 --- a/internal/checker/emitresolver.go +++ b/internal/checker/emitresolver.go @@ -14,7 +14,7 @@ import ( "github.com/microsoft/typescript-go/internal/printer" ) -var _ printer.EmitResolver = &emitResolver{} +var _ printer.EmitResolver = (*emitResolver)(nil) // Links for jsx type JSXLinks struct { @@ -35,12 +35,20 @@ type emitResolver struct { checker *Checker checkerMu sync.Mutex isValueAliasDeclaration func(node *ast.Node) bool + aliasMarkingVisitor func(node *ast.Node) bool referenceResolver binder.ReferenceResolver jsxLinks core.LinkStore[*ast.Node, JSXLinks] declarationLinks core.LinkStore[*ast.Node, DeclarationLinks] declarationFileLinks core.LinkStore[*ast.Node, DeclarationFileLinks] } +func newEmitResolver(checker *Checker) *emitResolver { + e := &emitResolver{checker: checker} + e.isValueAliasDeclaration = e.isValueAliasDeclarationWorker + e.aliasMarkingVisitor = e.aliasMarkingVisitorWorker + return e +} + func (r *emitResolver) GetJsxFactoryEntity(location *ast.Node) *ast.Node { r.checkerMu.Lock() defer r.checkerMu.Unlock() @@ -227,7 +235,7 @@ func (r *emitResolver) PrecalculateDeclarationEmitVisibility(file *ast.SourceFil file.AsNode().ForEachChild(r.aliasMarkingVisitor) } -func (r *emitResolver) aliasMarkingVisitor(node *ast.Node) bool { +func (r *emitResolver) aliasMarkingVisitorWorker(node *ast.Node) bool { switch node.Kind { case ast.KindExportAssignment, ast.KindJSExportAssignment: if node.AsExportAssignment().Expression.Kind == ast.KindIdentifier { @@ -670,9 +678,6 @@ func (r *emitResolver) isValueAliasDeclarationWorker(node *ast.Node) bool { return symbol != nil && r.isAliasResolvedToValue(symbol, true /*excludeTypeOnlyValues*/) case ast.KindExportDeclaration: exportClause := node.AsExportDeclaration().ExportClause - if r.isValueAliasDeclaration == nil { - r.isValueAliasDeclaration = r.isValueAliasDeclarationWorker - } return exportClause != nil && (ast.IsNamespaceExport(exportClause) || core.Some(exportClause.AsNamedExports().Elements.Nodes, r.isValueAliasDeclaration)) case ast.KindExportAssignment, ast.KindJSExportAssignment: