Skip to content

Commit bbd7142

Browse files
committed
Merge pull request #2662 from Microsoft/fixDecoratorEmitForComputedProperties
Fixes computed name caching for decorators
2 parents 927231b + 5f6c768 commit bbd7142

File tree

5 files changed

+67
-10
lines changed

5 files changed

+67
-10
lines changed

src/compiler/emitter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,16 +1136,16 @@ var __param = this.__param || function(index, decorator) { return function (targ
11361136
if (!computedPropertyNamesToGeneratedNames) {
11371137
computedPropertyNamesToGeneratedNames = [];
11381138
}
1139-
1140-
let generatedName = computedPropertyNamesToGeneratedNames[node.id];
1139+
1140+
let generatedName = computedPropertyNamesToGeneratedNames[getNodeId(node)];
11411141
if (generatedName) {
11421142
// we have already generated a variable for this node, write that value instead.
11431143
write(generatedName);
11441144
return;
11451145
}
11461146

11471147
generatedName = createAndRecordTempVariable(TempFlags.Auto).text;
1148-
computedPropertyNamesToGeneratedNames[node.id] = generatedName;
1148+
computedPropertyNamesToGeneratedNames[getNodeId(node)] = generatedName;
11491149
write(generatedName);
11501150
write(" = ");
11511151
}

tests/baselines/reference/decoratorOnClassMethod11.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
//// [decoratorOnClassMethod11.ts]
2-
module M {
3-
class C {
4-
decorator(target: Object, key: string): void { }
5-
6-
@this.decorator
7-
method() { }
8-
}
2+
module M {
3+
class C {
4+
decorator(target: Object, key: string): void { }
5+
6+
@this.decorator
7+
method() { }
8+
}
99
}
1010

1111
//// [decoratorOnClassMethod11.js]
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//// [decoratorOnClassMethod13.ts]
2+
declare function dec(): <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
3+
4+
class C {
5+
@dec ["1"]() { }
6+
@dec ["b"]() { }
7+
}
8+
9+
//// [decoratorOnClassMethod13.js]
10+
var __decorate = this.__decorate || (typeof Reflect === "object" && Reflect.decorate) || function (decorators, target, key, desc) {
11+
switch (arguments.length) {
12+
case 2: return decorators.reduceRight(function(o, d) { return (d && d(o)) || o; }, target);
13+
case 3: return decorators.reduceRight(function(o, d) { return (d && d(target, key)), void 0; }, void 0);
14+
case 4: return decorators.reduceRight(function(o, d) { return (d && d(target, key, o)) || o; }, desc);
15+
}
16+
};
17+
class C {
18+
[_a = "1"]() { }
19+
[_b = "b"]() { }
20+
}
21+
Object.defineProperty(C.prototype, _a,
22+
__decorate([
23+
dec
24+
], C.prototype, _a, Object.getOwnPropertyDescriptor(C.prototype, _a)));
25+
Object.defineProperty(C.prototype, _b,
26+
__decorate([
27+
dec
28+
], C.prototype, _b, Object.getOwnPropertyDescriptor(C.prototype, _b)));
29+
var _a, _b;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
=== tests/cases/conformance/decorators/class/method/decoratorOnClassMethod13.ts ===
2+
declare function dec(): <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
3+
>dec : () => <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>
4+
>T : T
5+
>target : any
6+
>propertyKey : string
7+
>descriptor : TypedPropertyDescriptor<T>
8+
>TypedPropertyDescriptor : TypedPropertyDescriptor<T>
9+
>T : T
10+
>TypedPropertyDescriptor : TypedPropertyDescriptor<T>
11+
>T : T
12+
13+
class C {
14+
>C : C
15+
16+
@dec ["1"]() { }
17+
>dec : unknown
18+
19+
@dec ["b"]() { }
20+
>dec : unknown
21+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// @target: ES6
2+
declare function dec(): <T>(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T>;
3+
4+
class C {
5+
@dec ["1"]() { }
6+
@dec ["b"]() { }
7+
}

0 commit comments

Comments
 (0)