diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b11843538e..e596c84c65 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11387,7 +11387,7 @@ module ts { return grammarErrorOnNode(node, Diagnostics.Decorators_are_only_available_when_targeting_ECMAScript_5_and_higher); } else if (node.kind === SyntaxKind.GetAccessor || node.kind === SyntaxKind.SetAccessor) { - let accessors = mergeAccessorDeclarations((node.parent).members, node); + let accessors = getAllAccessorDeclarations((node.parent).members, node); if (accessors.firstAccessor.decorators && node === accessors.secondAccessor) { return grammarErrorOnNode(node, Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name); } diff --git a/src/compiler/core.ts b/src/compiler/core.ts index e82af2fc4a..23a183775e 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -162,9 +162,9 @@ module ts { return ~low; } - export function foldLeft(array: T[], f: (a: T, x: T) => T): T; - export function foldLeft(array: T[], f: (a: U, x: T) => U, initial: U): U; - export function foldLeft(array: T[], f: (a: U, x: T) => U, initial?: U): U { + export function reduceLeft(array: T[], f: (a: T, x: T) => T): T; + export function reduceLeft(array: T[], f: (a: U, x: T) => U, initial: U): U; + export function reduceLeft(array: T[], f: (a: U, x: T) => U, initial?: U): U { if (array) { var count = array.length; if (count > 0) { @@ -179,9 +179,9 @@ module ts { return initial; } - export function foldRight(array: T[], f: (a: T, x: T) => T): T; - export function foldRight(array: T[], f: (a: U, x: T) => U, initial: U): U; - export function foldRight(array: T[], f: (a: U, x: T) => U, initial?: U): U { + export function reduceRight(array: T[], f: (a: T, x: T) => T): T; + export function reduceRight(array: T[], f: (a: U, x: T) => U, initial: U): U; + export function reduceRight(array: T[], f: (a: U, x: T) => U, initial?: U): U { if (array) { var pos = array.length - 1; if (pos >= 0) { diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 222e745598..2001830454 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -21,7 +21,6 @@ module ts { // flag enum used to request and track usages of few dedicated temp variables // enum values are used to set/check bit values and thus should not have bit collisions. - let accessors = getAllAccessorDeclarations((node.parent).members, node); const enum TempVariableKind { auto = 0, _i = 1, @@ -1497,7 +1496,7 @@ module ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - let { firstAccessor, getAccessor, setAccessor } = mergeAccessorDeclarations(objectLiteral.properties, property); + let { firstAccessor, getAccessor, setAccessor } = getAllAccessorDeclarations(objectLiteral.properties, property); // Only emit the first accessor. if (firstAccessor !== property) { @@ -3327,7 +3326,7 @@ module ts { emitTrailingComments(member); } else if (member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) { - let accessors = mergeAccessorDeclarations(node.members, member); + let accessors = getAllAccessorDeclarations(node.members, member); if (member === accessors.firstAccessor) { writeLine(); emitStart(member); @@ -3815,7 +3814,7 @@ module ts { case SyntaxKind.GetAccessor: case SyntaxKind.SetAccessor: - let accessors = mergeAccessorDeclarations(node.members, member); + let accessors = getAllAccessorDeclarations(node.members, member); if (member !== accessors.firstAccessor) { // skip the second accessor as we processed it with the first. return; diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 021921f2e1..204212de79 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -542,14 +542,6 @@ module ts { body: Block; } - // A merged view of get/set accessors - export interface MergedAccessorDeclarations { - getAccessor: AccessorDeclaration; - setAccessor: AccessorDeclaration; - firstAccessor: AccessorDeclaration; - secondAccessor: AccessorDeclaration; - } - export interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { _indexSignatureDeclarationBrand: any; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index ac6f5a2f1f..bbe156cbd3 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -575,56 +575,6 @@ module ts { return (node).expression; } - export function mergeAccessorDeclarations(declarations: NodeArray, accessor: AccessorDeclaration): MergedAccessorDeclarations { - let firstAccessor: AccessorDeclaration; - let secondAccessor: AccessorDeclaration; - let getAccessor: AccessorDeclaration; - let setAccessor: AccessorDeclaration; - if (hasDynamicName(accessor)) { - firstAccessor = accessor; - if (accessor.kind === SyntaxKind.GetAccessor) { - getAccessor = accessor; - } - else if (accessor.kind === SyntaxKind.SetAccessor) { - setAccessor = accessor; - } - else { - Debug.fail("Accessor has wrong kind"); - } - } - else { - forEach(declarations, (member: Declaration) => { - if ((member.kind === SyntaxKind.GetAccessor || member.kind === SyntaxKind.SetAccessor) - && (member.flags & NodeFlags.Static) === (accessor.flags & NodeFlags.Static)) { - let memberName = getPropertyNameForPropertyNameNode(member.name); - let accessorName = getPropertyNameForPropertyNameNode(accessor.name); - if (memberName === accessorName) { - if (!firstAccessor) { - firstAccessor = member; - } - else if (!secondAccessor) { - secondAccessor = member; - } - - if (member.kind === SyntaxKind.GetAccessor && !getAccessor) { - getAccessor = member; - } - - if (member.kind === SyntaxKind.SetAccessor && !setAccessor) { - setAccessor = member; - } - } - } - }); - } - return { - firstAccessor, - secondAccessor, - getAccessor, - setAccessor - }; - } - export function nodeCanBeDecorated(node: Node): boolean { switch (node.kind) { case SyntaxKind.ClassDeclaration: @@ -1626,6 +1576,7 @@ module ts { export function getAllAccessorDeclarations(declarations: NodeArray, accessor: AccessorDeclaration) { let firstAccessor: AccessorDeclaration; + let secondAccessor: AccessorDeclaration; let getAccessor: AccessorDeclaration; let setAccessor: AccessorDeclaration; if (hasDynamicName(accessor)) { @@ -1650,6 +1601,9 @@ module ts { if (!firstAccessor) { firstAccessor = member; } + else if (!secondAccessor) { + secondAccessor = member; + } if (member.kind === SyntaxKind.GetAccessor && !getAccessor) { getAccessor = member; @@ -1664,6 +1618,7 @@ module ts { } return { firstAccessor, + secondAccessor, getAccessor, setAccessor }; diff --git a/tests/baselines/reference/APISample_compile.js b/tests/baselines/reference/APISample_compile.js index 051598759d..8fe06ca08b 100644 --- a/tests/baselines/reference/APISample_compile.js +++ b/tests/baselines/reference/APISample_compile.js @@ -472,12 +472,6 @@ declare module "typescript" { _accessorDeclarationBrand: any; body: Block; } - interface MergedAccessorDeclarations { - getAccessor: AccessorDeclaration; - setAccessor: AccessorDeclaration; - firstAccessor: AccessorDeclaration; - secondAccessor: AccessorDeclaration; - } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { _indexSignatureDeclarationBrand: any; } diff --git a/tests/baselines/reference/APISample_compile.types b/tests/baselines/reference/APISample_compile.types index 5f2d5c7f2c..899c08166e 100644 --- a/tests/baselines/reference/APISample_compile.types +++ b/tests/baselines/reference/APISample_compile.types @@ -1440,25 +1440,6 @@ declare module "typescript" { body: Block; >body : Block >Block : Block - } - interface MergedAccessorDeclarations { ->MergedAccessorDeclarations : MergedAccessorDeclarations - - getAccessor: AccessorDeclaration; ->getAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - setAccessor: AccessorDeclaration; ->setAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - firstAccessor: AccessorDeclaration; ->firstAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - secondAccessor: AccessorDeclaration; ->secondAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { >IndexSignatureDeclaration : IndexSignatureDeclaration diff --git a/tests/baselines/reference/APISample_linter.js b/tests/baselines/reference/APISample_linter.js index cedfe25f01..268751c25c 100644 --- a/tests/baselines/reference/APISample_linter.js +++ b/tests/baselines/reference/APISample_linter.js @@ -503,12 +503,6 @@ declare module "typescript" { _accessorDeclarationBrand: any; body: Block; } - interface MergedAccessorDeclarations { - getAccessor: AccessorDeclaration; - setAccessor: AccessorDeclaration; - firstAccessor: AccessorDeclaration; - secondAccessor: AccessorDeclaration; - } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { _indexSignatureDeclarationBrand: any; } diff --git a/tests/baselines/reference/APISample_linter.types b/tests/baselines/reference/APISample_linter.types index d2615e8bde..da2a475311 100644 --- a/tests/baselines/reference/APISample_linter.types +++ b/tests/baselines/reference/APISample_linter.types @@ -1586,25 +1586,6 @@ declare module "typescript" { body: Block; >body : Block >Block : Block - } - interface MergedAccessorDeclarations { ->MergedAccessorDeclarations : MergedAccessorDeclarations - - getAccessor: AccessorDeclaration; ->getAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - setAccessor: AccessorDeclaration; ->setAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - firstAccessor: AccessorDeclaration; ->firstAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - secondAccessor: AccessorDeclaration; ->secondAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { >IndexSignatureDeclaration : IndexSignatureDeclaration diff --git a/tests/baselines/reference/APISample_transform.js b/tests/baselines/reference/APISample_transform.js index 20ad21ffd5..1955c175b9 100644 --- a/tests/baselines/reference/APISample_transform.js +++ b/tests/baselines/reference/APISample_transform.js @@ -504,12 +504,6 @@ declare module "typescript" { _accessorDeclarationBrand: any; body: Block; } - interface MergedAccessorDeclarations { - getAccessor: AccessorDeclaration; - setAccessor: AccessorDeclaration; - firstAccessor: AccessorDeclaration; - secondAccessor: AccessorDeclaration; - } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { _indexSignatureDeclarationBrand: any; } diff --git a/tests/baselines/reference/APISample_transform.types b/tests/baselines/reference/APISample_transform.types index d2e22448ba..e7ebaee5df 100644 --- a/tests/baselines/reference/APISample_transform.types +++ b/tests/baselines/reference/APISample_transform.types @@ -1536,25 +1536,6 @@ declare module "typescript" { body: Block; >body : Block >Block : Block - } - interface MergedAccessorDeclarations { ->MergedAccessorDeclarations : MergedAccessorDeclarations - - getAccessor: AccessorDeclaration; ->getAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - setAccessor: AccessorDeclaration; ->setAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - firstAccessor: AccessorDeclaration; ->firstAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - secondAccessor: AccessorDeclaration; ->secondAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { >IndexSignatureDeclaration : IndexSignatureDeclaration diff --git a/tests/baselines/reference/APISample_watcher.js b/tests/baselines/reference/APISample_watcher.js index 04be530fed..d9188afe74 100644 --- a/tests/baselines/reference/APISample_watcher.js +++ b/tests/baselines/reference/APISample_watcher.js @@ -541,12 +541,6 @@ declare module "typescript" { _accessorDeclarationBrand: any; body: Block; } - interface MergedAccessorDeclarations { - getAccessor: AccessorDeclaration; - setAccessor: AccessorDeclaration; - firstAccessor: AccessorDeclaration; - secondAccessor: AccessorDeclaration; - } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { _indexSignatureDeclarationBrand: any; } diff --git a/tests/baselines/reference/APISample_watcher.types b/tests/baselines/reference/APISample_watcher.types index df84080272..66caf52378 100644 --- a/tests/baselines/reference/APISample_watcher.types +++ b/tests/baselines/reference/APISample_watcher.types @@ -1709,25 +1709,6 @@ declare module "typescript" { body: Block; >body : Block >Block : Block - } - interface MergedAccessorDeclarations { ->MergedAccessorDeclarations : MergedAccessorDeclarations - - getAccessor: AccessorDeclaration; ->getAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - setAccessor: AccessorDeclaration; ->setAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - firstAccessor: AccessorDeclaration; ->firstAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration - - secondAccessor: AccessorDeclaration; ->secondAccessor : AccessorDeclaration ->AccessorDeclaration : AccessorDeclaration } interface IndexSignatureDeclaration extends SignatureDeclaration, ClassElement { >IndexSignatureDeclaration : IndexSignatureDeclaration diff --git a/tests/baselines/reference/declarationEmitDefaultExport2.js b/tests/baselines/reference/declarationEmitDefaultExport2.js index 388bd41e4f..687c6d67cd 100644 --- a/tests/baselines/reference/declarationEmitDefaultExport2.js +++ b/tests/baselines/reference/declarationEmitDefaultExport2.js @@ -3,7 +3,7 @@ export default class { } //// [declarationEmitDefaultExport2.js] -export default class { +export default class { }