From 627c7f42117e7a440225aa3295e3a1c48c04fd9d Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Tue, 7 Apr 2015 13:17:57 -0700 Subject: [PATCH] Fix for #2619 --- src/compiler/emitter.ts | 6 ++-- .../reference/decoratorOnClassMethod11.js | 29 +++++++++++++++++++ .../reference/decoratorOnClassMethod11.types | 21 ++++++++++++++ .../class/method/decoratorOnClassMethod11.ts | 7 +++++ 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/decoratorOnClassMethod11.js create mode 100644 tests/baselines/reference/decoratorOnClassMethod11.types create mode 100644 tests/cases/conformance/decorators/class/method/decoratorOnClassMethod11.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 43db3e69cd..1af1f7275c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1136,8 +1136,8 @@ var __param = this.__param || function(index, decorator) { return function (targ if (!computedPropertyNamesToGeneratedNames) { computedPropertyNamesToGeneratedNames = []; } - - let generatedName = computedPropertyNamesToGeneratedNames[node.id]; + + let generatedName = computedPropertyNamesToGeneratedNames[getNodeId(node)]; if (generatedName) { // we have already generated a variable for this node, write that value instead. write(generatedName); @@ -1145,7 +1145,7 @@ var __param = this.__param || function(index, decorator) { return function (targ } generatedName = createAndRecordTempVariable(TempFlags.Auto).text; - computedPropertyNamesToGeneratedNames[node.id] = generatedName; + computedPropertyNamesToGeneratedNames[getNodeId(node)] = generatedName; write(generatedName); write(" = "); } diff --git a/tests/baselines/reference/decoratorOnClassMethod11.js b/tests/baselines/reference/decoratorOnClassMethod11.js new file mode 100644 index 0000000000..085f84f1f8 --- /dev/null +++ b/tests/baselines/reference/decoratorOnClassMethod11.js @@ -0,0 +1,29 @@ +//// [decoratorOnClassMethod11.ts] +declare function dec(): (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor; + +class C { + @dec ["1"]() { } + @dec ["b"]() { } +} + +//// [decoratorOnClassMethod11.js] +var __decorate = this.__decorate || (typeof Reflect === "object" && Reflect.decorate) || function (decorators, target, key, desc) { + switch (arguments.length) { + case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target); + case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0); + case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc); + } +}; +class C { + [_a = "1"]() { } + [_b = "b"]() { } +} +Object.defineProperty(C.prototype, _a, + __decorate([ + dec + ], C.prototype, _a, Object.getOwnPropertyDescriptor(C.prototype, _a))); +Object.defineProperty(C.prototype, _b, + __decorate([ + dec + ], C.prototype, _b, Object.getOwnPropertyDescriptor(C.prototype, _b))); +var _a, _b; diff --git a/tests/baselines/reference/decoratorOnClassMethod11.types b/tests/baselines/reference/decoratorOnClassMethod11.types new file mode 100644 index 0000000000..1035668ed5 --- /dev/null +++ b/tests/baselines/reference/decoratorOnClassMethod11.types @@ -0,0 +1,21 @@ +=== tests/cases/conformance/decorators/class/method/decoratorOnClassMethod11.ts === +declare function dec(): (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor; +>dec : () => (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor +>T : T +>target : any +>propertyKey : string +>descriptor : TypedPropertyDescriptor +>TypedPropertyDescriptor : TypedPropertyDescriptor +>T : T +>TypedPropertyDescriptor : TypedPropertyDescriptor +>T : T + +class C { +>C : C + + @dec ["1"]() { } +>dec : unknown + + @dec ["b"]() { } +>dec : unknown +} diff --git a/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod11.ts b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod11.ts new file mode 100644 index 0000000000..df0b847e99 --- /dev/null +++ b/tests/cases/conformance/decorators/class/method/decoratorOnClassMethod11.ts @@ -0,0 +1,7 @@ +// @target: ES6 +declare function dec(): (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => TypedPropertyDescriptor; + +class C { + @dec ["1"]() { } + @dec ["b"]() { } +} \ No newline at end of file