diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 30e3284d258..cc75f00f662 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -2563,7 +2563,7 @@ function createBinder(): (file: SourceFile, options: CompilerOptions) => void { } function checkStrictModeFunctionName(node: FunctionLikeDeclaration) { - if (inStrictMode) { + if (inStrictMode && !(node.flags & NodeFlags.Ambient)) { // It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a strict mode FunctionDeclaration or FunctionExpression (13.1)) checkStrictModeEvalOrArguments(node, node.name); } diff --git a/tests/baselines/reference/evalOrArgumentsInDeclarationFunctions.symbols b/tests/baselines/reference/evalOrArgumentsInDeclarationFunctions.symbols new file mode 100644 index 00000000000..8d232d6e651 --- /dev/null +++ b/tests/baselines/reference/evalOrArgumentsInDeclarationFunctions.symbols @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/evalOrArgumentsInDeclarationFunctions.ts] //// + +=== /a.d.ts === +declare global { +>global : Symbol(global, Decl(a.d.ts, 0, 0)) + + export namespace ns { +>ns : Symbol(ns, Decl(a.d.ts, 0, 16)) + + export function eval(): void; +>eval : Symbol(eval, Decl(a.d.ts, 1, 25)) + + export function arguments(): void; +>arguments : Symbol(arguments, Decl(a.d.ts, 2, 37)) + } +} + +declare function eval(): void; +>eval : Symbol(eval, Decl(a.d.ts, 5, 1)) + +declare function arguments(): void; +>arguments : Symbol(arguments, Decl(a.d.ts, 7, 30)) + +export {} + diff --git a/tests/baselines/reference/evalOrArgumentsInDeclarationFunctions.types b/tests/baselines/reference/evalOrArgumentsInDeclarationFunctions.types new file mode 100644 index 00000000000..bd7075ada5f --- /dev/null +++ b/tests/baselines/reference/evalOrArgumentsInDeclarationFunctions.types @@ -0,0 +1,25 @@ +//// [tests/cases/compiler/evalOrArgumentsInDeclarationFunctions.ts] //// + +=== /a.d.ts === +declare global { +>global : typeof global + + export namespace ns { +>ns : typeof ns + + export function eval(): void; +>eval : () => void + + export function arguments(): void; +>arguments : () => void + } +} + +declare function eval(): void; +>eval : () => void + +declare function arguments(): void; +>arguments : () => void + +export {} + diff --git a/tests/cases/compiler/evalOrArgumentsInDeclarationFunctions.ts b/tests/cases/compiler/evalOrArgumentsInDeclarationFunctions.ts new file mode 100644 index 00000000000..0cc83d7f837 --- /dev/null +++ b/tests/cases/compiler/evalOrArgumentsInDeclarationFunctions.ts @@ -0,0 +1,12 @@ +// @filename: /a.d.ts +declare global { + export namespace ns { + export function eval(): void; + export function arguments(): void; + } +} + +declare function eval(): void; +declare function arguments(): void; + +export {}