Skip to content

Commit 41b993b

Browse files
authored
Use local symbol rather then target symbol for tracking reused references (microsoft#59493)
1 parent 5e9b070 commit 41b993b

15 files changed

+324
-26
lines changed

src/compiler/checker.ts

+3
Original file line numberDiff line numberDiff line change
@@ -8428,6 +8428,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
84288428
introducesError = true;
84298429
return { introducesError, node, sym };
84308430
}
8431+
else {
8432+
sym = symAtLocation;
8433+
}
84318434
}
84328435

84338436
if (sym) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
//// [tests/cases/compiler/declarationEmitEnumReferenceViaImportEquals.ts] ////
2+
3+
//// [translation.ts]
4+
export interface Translation {
5+
translationKey: Translation.TranslationKeyEnum;
6+
}
7+
8+
export namespace Translation {
9+
export type TranslationKeyEnum = 'translation1' | 'translation2';
10+
export const TranslationKeyEnum = {
11+
Translation1: 'translation1' as TranslationKeyEnum,
12+
Translation2: 'translation2' as TranslationKeyEnum,
13+
}
14+
}
15+
16+
17+
//// [test.ts]
18+
import { Translation } from "./translation";
19+
import TranslationKeyEnum = Translation.TranslationKeyEnum;
20+
21+
export class Test {
22+
TranslationKeyEnum = TranslationKeyEnum;
23+
print() {
24+
console.log(TranslationKeyEnum.Translation1);
25+
}
26+
}
27+
28+
//// [index.ts]
29+
import { Test } from "./test";
30+
new Test().print();
31+
32+
//// [translation.js]
33+
"use strict";
34+
Object.defineProperty(exports, "__esModule", { value: true });
35+
exports.Translation = void 0;
36+
var Translation;
37+
(function (Translation) {
38+
Translation.TranslationKeyEnum = {
39+
Translation1: 'translation1',
40+
Translation2: 'translation2',
41+
};
42+
})(Translation || (exports.Translation = Translation = {}));
43+
//// [test.js]
44+
"use strict";
45+
Object.defineProperty(exports, "__esModule", { value: true });
46+
exports.Test = void 0;
47+
var translation_1 = require("./translation");
48+
var TranslationKeyEnum = translation_1.Translation.TranslationKeyEnum;
49+
var Test = /** @class */ (function () {
50+
function Test() {
51+
this.TranslationKeyEnum = TranslationKeyEnum;
52+
}
53+
Test.prototype.print = function () {
54+
console.log(TranslationKeyEnum.Translation1);
55+
};
56+
return Test;
57+
}());
58+
exports.Test = Test;
59+
//// [index.js]
60+
"use strict";
61+
Object.defineProperty(exports, "__esModule", { value: true });
62+
var test_1 = require("./test");
63+
new test_1.Test().print();
64+
65+
66+
//// [translation.d.ts]
67+
export interface Translation {
68+
translationKey: Translation.TranslationKeyEnum;
69+
}
70+
export declare namespace Translation {
71+
type TranslationKeyEnum = 'translation1' | 'translation2';
72+
const TranslationKeyEnum: {
73+
Translation1: TranslationKeyEnum;
74+
Translation2: TranslationKeyEnum;
75+
};
76+
}
77+
//// [test.d.ts]
78+
import { Translation } from "./translation";
79+
import TranslationKeyEnum = Translation.TranslationKeyEnum;
80+
export declare class Test {
81+
TranslationKeyEnum: {
82+
Translation1: TranslationKeyEnum;
83+
Translation2: TranslationKeyEnum;
84+
};
85+
print(): void;
86+
}
87+
//// [index.d.ts]
88+
export {};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
//// [tests/cases/compiler/declarationEmitEnumReferenceViaImportEquals.ts] ////
2+
3+
=== translation.ts ===
4+
export interface Translation {
5+
>Translation : Symbol(Translation, Decl(translation.ts, 0, 0), Decl(translation.ts, 2, 1))
6+
7+
translationKey: Translation.TranslationKeyEnum;
8+
>translationKey : Symbol(Translation.translationKey, Decl(translation.ts, 0, 30))
9+
>Translation : Symbol(Translation, Decl(translation.ts, 0, 0), Decl(translation.ts, 2, 1))
10+
>TranslationKeyEnum : Symbol(Translation.TranslationKeyEnum, Decl(translation.ts, 4, 30), Decl(translation.ts, 6, 14))
11+
}
12+
13+
export namespace Translation {
14+
>Translation : Symbol(Translation, Decl(translation.ts, 0, 0), Decl(translation.ts, 2, 1))
15+
16+
export type TranslationKeyEnum = 'translation1' | 'translation2';
17+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(translation.ts, 4, 30), Decl(translation.ts, 6, 14))
18+
19+
export const TranslationKeyEnum = {
20+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(translation.ts, 4, 30), Decl(translation.ts, 6, 14))
21+
22+
Translation1: 'translation1' as TranslationKeyEnum,
23+
>Translation1 : Symbol(Translation1, Decl(translation.ts, 6, 37))
24+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(translation.ts, 4, 30), Decl(translation.ts, 6, 14))
25+
26+
Translation2: 'translation2' as TranslationKeyEnum,
27+
>Translation2 : Symbol(Translation2, Decl(translation.ts, 7, 55))
28+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(translation.ts, 4, 30), Decl(translation.ts, 6, 14))
29+
}
30+
}
31+
32+
33+
=== test.ts ===
34+
import { Translation } from "./translation";
35+
>Translation : Symbol(Translation, Decl(test.ts, 0, 8))
36+
37+
import TranslationKeyEnum = Translation.TranslationKeyEnum;
38+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(test.ts, 0, 44))
39+
>Translation : Symbol(Translation, Decl(test.ts, 0, 8))
40+
>TranslationKeyEnum : Symbol(Translation.TranslationKeyEnum, Decl(translation.ts, 4, 30), Decl(translation.ts, 6, 14))
41+
42+
export class Test {
43+
>Test : Symbol(Test, Decl(test.ts, 1, 59))
44+
45+
TranslationKeyEnum = TranslationKeyEnum;
46+
>TranslationKeyEnum : Symbol(Test.TranslationKeyEnum, Decl(test.ts, 3, 19))
47+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(test.ts, 0, 44))
48+
49+
print() {
50+
>print : Symbol(Test.print, Decl(test.ts, 4, 42))
51+
52+
console.log(TranslationKeyEnum.Translation1);
53+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
54+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
55+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
56+
>TranslationKeyEnum.Translation1 : Symbol(Translation1, Decl(translation.ts, 6, 37))
57+
>TranslationKeyEnum : Symbol(TranslationKeyEnum, Decl(test.ts, 0, 44))
58+
>Translation1 : Symbol(Translation1, Decl(translation.ts, 6, 37))
59+
}
60+
}
61+
62+
=== index.ts ===
63+
import { Test } from "./test";
64+
>Test : Symbol(Test, Decl(index.ts, 0, 8))
65+
66+
new Test().print();
67+
>new Test().print : Symbol(Test.print, Decl(test.ts, 4, 42))
68+
>Test : Symbol(Test, Decl(index.ts, 0, 8))
69+
>print : Symbol(Test.print, Decl(test.ts, 4, 42))
70+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
//// [tests/cases/compiler/declarationEmitEnumReferenceViaImportEquals.ts] ////
2+
3+
=== translation.ts ===
4+
export interface Translation {
5+
translationKey: Translation.TranslationKeyEnum;
6+
>translationKey : Translation.TranslationKeyEnum
7+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8+
>Translation : any
9+
> : ^^^
10+
}
11+
12+
export namespace Translation {
13+
>Translation : typeof Translation
14+
> : ^^^^^^^^^^^^^^^^^^
15+
16+
export type TranslationKeyEnum = 'translation1' | 'translation2';
17+
>TranslationKeyEnum : TranslationKeyEnum
18+
> : ^^^^^^^^^^^^^^^^^^
19+
20+
export const TranslationKeyEnum = {
21+
>TranslationKeyEnum : { Translation1: TranslationKeyEnum; Translation2: TranslationKeyEnum; }
22+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^
23+
>{ Translation1: 'translation1' as TranslationKeyEnum, Translation2: 'translation2' as TranslationKeyEnum, } : { Translation1: TranslationKeyEnum; Translation2: TranslationKeyEnum; }
24+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^
25+
26+
Translation1: 'translation1' as TranslationKeyEnum,
27+
>Translation1 : TranslationKeyEnum
28+
> : ^^^^^^^^^^^^^^^^^^
29+
>'translation1' as TranslationKeyEnum : TranslationKeyEnum
30+
> : ^^^^^^^^^^^^^^^^^^
31+
>'translation1' : "translation1"
32+
> : ^^^^^^^^^^^^^^
33+
34+
Translation2: 'translation2' as TranslationKeyEnum,
35+
>Translation2 : TranslationKeyEnum
36+
> : ^^^^^^^^^^^^^^^^^^
37+
>'translation2' as TranslationKeyEnum : TranslationKeyEnum
38+
> : ^^^^^^^^^^^^^^^^^^
39+
>'translation2' : "translation2"
40+
> : ^^^^^^^^^^^^^^
41+
}
42+
}
43+
44+
45+
=== test.ts ===
46+
import { Translation } from "./translation";
47+
>Translation : typeof Translation
48+
> : ^^^^^^^^^^^^^^^^^^
49+
50+
import TranslationKeyEnum = Translation.TranslationKeyEnum;
51+
>TranslationKeyEnum : { Translation1: TranslationKeyEnum; Translation2: TranslationKeyEnum; }
52+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^
53+
>Translation : Translation
54+
> : ^^^^^^^^^^^
55+
>TranslationKeyEnum : Translation.TranslationKeyEnum
56+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
57+
58+
export class Test {
59+
>Test : Test
60+
> : ^^^^
61+
62+
TranslationKeyEnum = TranslationKeyEnum;
63+
>TranslationKeyEnum : { Translation1: TranslationKeyEnum; Translation2: TranslationKeyEnum; }
64+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^
65+
>TranslationKeyEnum : { Translation1: TranslationKeyEnum; Translation2: TranslationKeyEnum; }
66+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^
67+
68+
print() {
69+
>print : () => void
70+
> : ^^^^^^^^^^
71+
72+
console.log(TranslationKeyEnum.Translation1);
73+
>console.log(TranslationKeyEnum.Translation1) : void
74+
> : ^^^^
75+
>console.log : (...data: any[]) => void
76+
> : ^^^^ ^^ ^^^^^
77+
>console : Console
78+
> : ^^^^^^^
79+
>log : (...data: any[]) => void
80+
> : ^^^^ ^^ ^^^^^
81+
>TranslationKeyEnum.Translation1 : Translation.TranslationKeyEnum
82+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
83+
>TranslationKeyEnum : { Translation1: TranslationKeyEnum; Translation2: TranslationKeyEnum; }
84+
> : ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^
85+
>Translation1 : Translation.TranslationKeyEnum
86+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
87+
}
88+
}
89+
90+
=== index.ts ===
91+
import { Test } from "./test";
92+
>Test : typeof Test
93+
> : ^^^^^^^^^^^
94+
95+
new Test().print();
96+
>new Test().print() : void
97+
> : ^^^^
98+
>new Test().print : () => void
99+
> : ^^^^^^^^^^
100+
>new Test() : Test
101+
> : ^^^^
102+
>Test : typeof Test
103+
> : ^^^^^^^^^^^
104+
>print : () => void
105+
> : ^^^^^^^^^^
106+

tests/baselines/reference/declarationEmitForModuleImportingModuleAugmentationRetainsImport.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function child1(prototype: ParentThing) {
5252
=== parent.ts ===
5353
import { child1 } from './child1'; // this import should still exist in some form in the output, since it augments this module
5454
>child1 : (prototype: ParentThing) => void
55-
> : ^ ^^^^^^^^^^^^^^^^^^^^^^
55+
> : ^ ^^ ^^^^^^^^^
5656

5757
export class ParentThing implements ParentThing {}
5858
>ParentThing : ParentThing
@@ -62,7 +62,7 @@ child1(ParentThing.prototype);
6262
>child1(ParentThing.prototype) : void
6363
> : ^^^^
6464
>child1 : (prototype: ParentThing) => void
65-
> : ^ ^^^^^^^^^^^^^^^^^^^^^^
65+
> : ^ ^^ ^^^^^^^^^
6666
>ParentThing.prototype : ParentThing
6767
> : ^^^^^^^^^^^
6868
>ParentThing : typeof ParentThing

tests/baselines/reference/declarationEmitUsingTypeAlias2.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -98,18 +98,18 @@ export { shouldLookupName, shouldReuseLocalName, reuseDepName, shouldBeElided };
9898
=== src/index.ts ===
9999
import { goodDeclaration, shouldReuseLocalName, shouldBeElided } from "some-dep";
100100
>goodDeclaration : <T>() => () => { shouldPrintResult: T extends import("node_modules/some-dep/dist/inner").Other ? "O" : "N"; shouldPrintResult2: T extends typeof shouldBeElided ? import("node_modules/some-dep/dist/inner").Other : "N"; shouldLookupName: typeof import("node_modules/some-dep/dist/other").shouldLookupName; shouldReuseLocalName: typeof shouldReuseLocalName; reuseDepName: typeof import("node_modules/some-dep/dist/other").reuseDepName; }
101-
> : ^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
101+
> : ^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
102102
>shouldReuseLocalName : unique symbol
103103
> : ^^^^^^^^^^^^^
104104
>shouldBeElided : unique symbol
105105
> : ^^^^^^^^^^^^^
106106

107107
export const bar = goodDeclaration<{}>;
108108
>bar : () => () => { shouldPrintResult: "N"; shouldPrintResult2: "N"; shouldLookupName: typeof import("node_modules/some-dep/dist/other").shouldLookupName; shouldReuseLocalName: typeof shouldReuseLocalName; reuseDepName: typeof import("node_modules/some-dep/dist/other").reuseDepName; }
109-
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
109+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
110110
>goodDeclaration<{}> : () => () => { shouldPrintResult: "N"; shouldPrintResult2: "N"; shouldLookupName: typeof import("node_modules/some-dep/dist/other").shouldLookupName; shouldReuseLocalName: typeof shouldReuseLocalName; reuseDepName: typeof import("node_modules/some-dep/dist/other").reuseDepName; }
111-
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
111+
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
112112
>goodDeclaration : <T>() => () => { shouldPrintResult: T extends import("node_modules/some-dep/dist/inner").Other ? "O" : "N"; shouldPrintResult2: T extends typeof shouldBeElided ? import("node_modules/some-dep/dist/inner").Other : "N"; shouldLookupName: typeof import("node_modules/some-dep/dist/other").shouldLookupName; shouldReuseLocalName: typeof shouldReuseLocalName; reuseDepName: typeof import("node_modules/some-dep/dist/other").reuseDepName; }
113-
> : ^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
113+
> : ^ ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
114114

115115

tests/baselines/reference/exportClassExtendingIntersection.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,15 @@ import { MyBaseClass } from './BaseClass';
5656

5757
import { MyMixin } from './MixinClass';
5858
>MyMixin : <T extends import("BaseClass").Constructor<MyBaseClass<any>>>(base: T) => T & import("BaseClass").Constructor<MyMixin>
59-
> : ^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^
59+
> : ^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^
6060

6161
export class MyExtendedClass extends MyMixin(MyBaseClass)<string> {
6262
>MyExtendedClass : MyExtendedClass
6363
> : ^^^^^^^^^^^^^^^
6464
>MyMixin(MyBaseClass) : MyBaseClass<string> & MyMixin
6565
> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6666
>MyMixin : <T extends import("BaseClass").Constructor<MyBaseClass<any>>>(base: T) => T & import("BaseClass").Constructor<MyMixin>
67-
> : ^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^
67+
> : ^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^ ^^ ^^ ^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^
6868
>MyBaseClass : typeof MyBaseClass
6969
> : ^^^^^^^^^^^^^^^^^^
7070

tests/baselines/reference/functionVariableInReturnTypeAnnotation.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
=== functionVariableInReturnTypeAnnotation.ts ===
44
function bar(): typeof b {
5-
>bar : () => typeof b
6-
> : ^^^^^^
5+
>bar : () => any
6+
> : ^^^^^^^^^
77
>b : any
88
> : ^^^
99

tests/baselines/reference/importDecl.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,11 @@ export var d = m5.foo2();
208208
>m5.foo2() : m4.d
209209
> : ^^^^
210210
>m5.foo2 : () => m4.d
211-
> : ^^^^^^^^^^
211+
> : ^^^^^^
212212
>m5 : typeof m5
213213
> : ^^^^^^^^^
214214
>foo2 : () => m4.d
215-
> : ^^^^^^^^^^
215+
> : ^^^^^^
216216

217217
// Do not emit multiple used import statements
218218
import multiImport_m4 = require("./importDecl_require"); // Emit used

tests/baselines/reference/isolatedDeclarationErrorsAugmentation.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function child1(prototype: ParentThing) {
5252
=== parent.ts ===
5353
import { child1 } from './child1'; // this import should still exist in some form in the output, since it augments this module
5454
>child1 : (prototype: ParentThing) => void
55-
> : ^ ^^^^^^^^^^^^^^^^^^^^^^
55+
> : ^ ^^ ^^^^^^^^^
5656

5757
export class ParentThing implements ParentThing {}
5858
>ParentThing : ParentThing
@@ -62,7 +62,7 @@ child1(ParentThing.prototype);
6262
>child1(ParentThing.prototype) : void
6363
> : ^^^^
6464
>child1 : (prototype: ParentThing) => void
65-
> : ^ ^^^^^^^^^^^^^^^^^^^^^^
65+
> : ^ ^^ ^^^^^^^^^
6666
>ParentThing.prototype : ParentThing
6767
> : ^^^^^^^^^^^
6868
>ParentThing : typeof ParentThing

tests/baselines/reference/umd-augmentation-1.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ p = v.reverse();
6161
> : ^^^^^^^
6262
>v.reverse() : m.Point
6363
> : ^^^^^^^
64-
>v.reverse : () => m.Point
65-
> : ^^^^^^^^^^^^^
64+
>v.reverse : () => Math2d.Point
65+
> : ^^^^^^
6666
>v : m.Vector
6767
> : ^^^^^^^^
68-
>reverse : () => m.Point
69-
> : ^^^^^^^^^^^^^
68+
>reverse : () => Math2d.Point
69+
> : ^^^^^^
7070

7171
var t = p.x;
7272
>t : number

0 commit comments

Comments
 (0)