Skip to content

Commit fe23b12

Browse files
Merge pull request #1078 from microsoft/main
Create a new pull request by comparing changes across two branches
2 parents b17438b + b9d96df commit fe23b12

File tree

116 files changed

+9650
-395
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+9650
-395
lines changed

src/compiler/binder.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ import {
251251
ModifierFlags,
252252
ModuleBlock,
253253
ModuleDeclaration,
254+
moduleExportNameIsDefault,
254255
Mutable,
255256
NamespaceExportDeclaration,
256257
Node,
@@ -433,6 +434,9 @@ function getModuleInstanceStateWorker(node: Node, visited: Map<number, ModuleIns
433434

434435
function getModuleInstanceStateForAliasTarget(specifier: ExportSpecifier, visited: Map<number, ModuleInstanceState | undefined>) {
435436
const name = specifier.propertyName || specifier.name;
437+
if (name.kind !== SyntaxKind.Identifier) {
438+
return ModuleInstanceState.Instantiated; // Skip for invalid syntax like this: export { "x" }
439+
}
436440
let p: Node | undefined = specifier.parent;
437441
while (p) {
438442
if (isBlock(p) || isModuleBlock(p) || isSourceFile(p)) {
@@ -759,7 +763,7 @@ function createBinder(): (file: SourceFile, options: CompilerOptions) => void {
759763
function declareSymbol(symbolTable: SymbolTable, parent: Symbol | undefined, node: Declaration, includes: SymbolFlags, excludes: SymbolFlags, isReplaceableByMethod?: boolean, isComputedName?: boolean): Symbol {
760764
Debug.assert(isComputedName || !hasDynamicName(node));
761765

762-
const isDefaultExport = hasSyntacticModifier(node, ModifierFlags.Default) || isExportSpecifier(node) && node.name.escapedText === "default";
766+
const isDefaultExport = hasSyntacticModifier(node, ModifierFlags.Default) || isExportSpecifier(node) && moduleExportNameIsDefault(node.name);
763767

764768
// The exported symbol for an export default function/class node is always named "default"
765769
const name = isComputedName ? InternalSymbolName.Computed

src/compiler/builder.ts

Lines changed: 231 additions & 104 deletions
Large diffs are not rendered by default.

src/compiler/builderPublic.ts

Lines changed: 101 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export type HostForComputeHash = Pick<BuilderProgramHost, "createHash" | "storeS
4646
*/
4747
export interface BuilderProgram {
4848
/** @internal */
49-
getState(): ReusableBuilderProgramState;
49+
state: ReusableBuilderProgramState;
5050
/** @internal */
5151
saveEmitState(): SavedBuildProgramEmitState;
5252
/** @internal */
@@ -164,28 +164,115 @@ export interface EmitAndSemanticDiagnosticsBuilderProgram extends SemanticDiagno
164164
/**
165165
* Create the builder to manage semantic diagnostics and cache them
166166
*/
167-
export function createSemanticDiagnosticsBuilderProgram(newProgram: Program, host: BuilderProgramHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[]): SemanticDiagnosticsBuilderProgram;
168-
export function createSemanticDiagnosticsBuilderProgram(rootNames: readonly string[] | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]): SemanticDiagnosticsBuilderProgram;
169-
export function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames: Program | readonly string[] | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | SemanticDiagnosticsBuilderProgram, configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | SemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]) {
170-
return createBuilderProgram(BuilderProgramKind.SemanticDiagnosticsBuilderProgram, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences));
167+
export function createSemanticDiagnosticsBuilderProgram(
168+
newProgram: Program,
169+
host: BuilderProgramHost,
170+
oldProgram?: SemanticDiagnosticsBuilderProgram,
171+
configFileParsingDiagnostics?: readonly Diagnostic[],
172+
): SemanticDiagnosticsBuilderProgram;
173+
export function createSemanticDiagnosticsBuilderProgram(
174+
rootNames: readonly string[] | undefined,
175+
options: CompilerOptions | undefined,
176+
host?: CompilerHost,
177+
oldProgram?: SemanticDiagnosticsBuilderProgram,
178+
configFileParsingDiagnostics?: readonly Diagnostic[],
179+
projectReferences?: readonly ProjectReference[],
180+
): SemanticDiagnosticsBuilderProgram;
181+
export function createSemanticDiagnosticsBuilderProgram(
182+
newProgramOrRootNames: Program | readonly string[] | undefined,
183+
hostOrOptions: BuilderProgramHost | CompilerOptions | undefined,
184+
oldProgramOrHost?: CompilerHost | SemanticDiagnosticsBuilderProgram,
185+
configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | SemanticDiagnosticsBuilderProgram,
186+
configFileParsingDiagnostics?: readonly Diagnostic[],
187+
projectReferences?: readonly ProjectReference[],
188+
) {
189+
return createBuilderProgram(
190+
BuilderProgramKind.SemanticDiagnosticsBuilderProgram,
191+
getBuilderCreationParameters(
192+
newProgramOrRootNames,
193+
hostOrOptions,
194+
oldProgramOrHost,
195+
configFileParsingDiagnosticsOrOldProgram,
196+
configFileParsingDiagnostics,
197+
projectReferences,
198+
),
199+
);
171200
}
172201

173202
/**
174203
* Create the builder that can handle the changes in program and iterate through changed files
175204
* to emit the those files and manage semantic diagnostics cache as well
176205
*/
177-
export function createEmitAndSemanticDiagnosticsBuilderProgram(newProgram: Program, host: BuilderProgramHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[]): EmitAndSemanticDiagnosticsBuilderProgram;
178-
export function createEmitAndSemanticDiagnosticsBuilderProgram(rootNames: readonly string[] | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]): EmitAndSemanticDiagnosticsBuilderProgram;
179-
export function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames: Program | readonly string[] | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | EmitAndSemanticDiagnosticsBuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]) {
180-
return createBuilderProgram(BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram, getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences));
206+
export function createEmitAndSemanticDiagnosticsBuilderProgram(
207+
newProgram: Program,
208+
host: BuilderProgramHost,
209+
oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram,
210+
configFileParsingDiagnostics?: readonly Diagnostic[],
211+
): EmitAndSemanticDiagnosticsBuilderProgram;
212+
export function createEmitAndSemanticDiagnosticsBuilderProgram(
213+
rootNames: readonly string[] | undefined,
214+
options: CompilerOptions | undefined,
215+
host?: CompilerHost,
216+
oldProgram?: EmitAndSemanticDiagnosticsBuilderProgram,
217+
configFileParsingDiagnostics?: readonly Diagnostic[],
218+
projectReferences?: readonly ProjectReference[],
219+
): EmitAndSemanticDiagnosticsBuilderProgram;
220+
export function createEmitAndSemanticDiagnosticsBuilderProgram(
221+
newProgramOrRootNames: Program | readonly string[] | undefined,
222+
hostOrOptions: BuilderProgramHost | CompilerOptions | undefined,
223+
oldProgramOrHost?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram,
224+
configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | EmitAndSemanticDiagnosticsBuilderProgram,
225+
configFileParsingDiagnostics?: readonly Diagnostic[],
226+
projectReferences?: readonly ProjectReference[],
227+
) {
228+
return createBuilderProgram(
229+
BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram,
230+
getBuilderCreationParameters(
231+
newProgramOrRootNames,
232+
hostOrOptions,
233+
oldProgramOrHost,
234+
configFileParsingDiagnosticsOrOldProgram,
235+
configFileParsingDiagnostics,
236+
projectReferences,
237+
),
238+
);
181239
}
182240

183241
/**
184242
* Creates a builder thats just abstraction over program and can be used with watch
185243
*/
186-
export function createAbstractBuilder(newProgram: Program, host: BuilderProgramHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[]): BuilderProgram;
187-
export function createAbstractBuilder(rootNames: readonly string[] | undefined, options: CompilerOptions | undefined, host?: CompilerHost, oldProgram?: BuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]): BuilderProgram;
188-
export function createAbstractBuilder(newProgramOrRootNames: Program | readonly string[] | undefined, hostOrOptions: BuilderProgramHost | CompilerOptions | undefined, oldProgramOrHost?: CompilerHost | BuilderProgram, configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | BuilderProgram, configFileParsingDiagnostics?: readonly Diagnostic[], projectReferences?: readonly ProjectReference[]): BuilderProgram {
189-
const { newProgram, configFileParsingDiagnostics: newConfigFileParsingDiagnostics } = getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences);
190-
return createRedirectedBuilderProgram(() => ({ program: newProgram, compilerOptions: newProgram.getCompilerOptions() }), newConfigFileParsingDiagnostics);
244+
export function createAbstractBuilder(
245+
newProgram: Program,
246+
host: BuilderProgramHost,
247+
oldProgram?: BuilderProgram,
248+
configFileParsingDiagnostics?: readonly Diagnostic[],
249+
): BuilderProgram;
250+
export function createAbstractBuilder(
251+
rootNames: readonly string[] | undefined,
252+
options: CompilerOptions | undefined,
253+
host?: CompilerHost,
254+
oldProgram?: BuilderProgram,
255+
configFileParsingDiagnostics?: readonly Diagnostic[],
256+
projectReferences?: readonly ProjectReference[],
257+
): BuilderProgram;
258+
export function createAbstractBuilder(
259+
newProgramOrRootNames: Program | readonly string[] | undefined,
260+
hostOrOptions: BuilderProgramHost | CompilerOptions | undefined,
261+
oldProgramOrHost?: CompilerHost | BuilderProgram,
262+
configFileParsingDiagnosticsOrOldProgram?: readonly Diagnostic[] | BuilderProgram,
263+
configFileParsingDiagnostics?: readonly Diagnostic[],
264+
projectReferences?: readonly ProjectReference[],
265+
): BuilderProgram {
266+
const { newProgram, configFileParsingDiagnostics: newConfigFileParsingDiagnostics } = getBuilderCreationParameters(
267+
newProgramOrRootNames,
268+
hostOrOptions,
269+
oldProgramOrHost,
270+
configFileParsingDiagnosticsOrOldProgram,
271+
configFileParsingDiagnostics,
272+
projectReferences,
273+
);
274+
return createRedirectedBuilderProgram(
275+
{ program: newProgram, compilerOptions: newProgram.getCompilerOptions() },
276+
newConfigFileParsingDiagnostics,
277+
);
191278
}

0 commit comments

Comments
 (0)