mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
Fix crash when circular reference in variance annotations (#48539)
* Fix crash when circular reference in variance annotations * chore: clean code
This commit is contained in:
parent
2db17fdda2
commit
99620117be
@ -20640,6 +20640,9 @@ namespace ts {
|
||||
function createMarkerType(symbol: Symbol, source: TypeParameter, target: Type) {
|
||||
const mapper = makeUnaryTypeMapper(source, target);
|
||||
const type = getDeclaredTypeOfSymbol(symbol);
|
||||
if (isErrorType(type)) {
|
||||
return type;
|
||||
}
|
||||
const result = symbol.flags & SymbolFlags.TypeAlias ?
|
||||
getTypeAliasInstantiation(symbol, instantiateTypes(getSymbolLinks(symbol).typeParameters!, mapper)) :
|
||||
createTypeReference(type as GenericType, instantiateTypes((type as GenericType).typeParameters, mapper));
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(1,6): error TS2456: Type alias 'T1' circularly references itself.
|
||||
tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(1,11): error TS2300: Duplicate identifier '(Missing)'.
|
||||
tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(1,12): error TS1359: Identifier expected. 'in' is a reserved word that cannot be used here.
|
||||
tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts(2,6): error TS2456: Type alias 'T2' circularly references itself.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts (4 errors) ====
|
||||
type T1<in in> = T1 // Error: circularly references
|
||||
~~
|
||||
!!! error TS2456: Type alias 'T1' circularly references itself.
|
||||
|
||||
!!! error TS2300: Duplicate identifier '(Missing)'.
|
||||
~~
|
||||
!!! error TS1359: Identifier expected. 'in' is a reserved word that cannot be used here.
|
||||
type T2<out out> = T2 // Error: circularly references
|
||||
~~
|
||||
!!! error TS2456: Type alias 'T2' circularly references itself.
|
||||
@ -0,0 +1,11 @@
|
||||
//// [varianceAnnotationsWithCircularlyReferencesError.ts]
|
||||
type T1<in in> = T1 // Error: circularly references
|
||||
type T2<out out> = T2 // Error: circularly references
|
||||
|
||||
//// [varianceAnnotationsWithCircularlyReferencesError.js]
|
||||
"use strict";
|
||||
|
||||
|
||||
//// [varianceAnnotationsWithCircularlyReferencesError.d.ts]
|
||||
declare type T1<in , > = T1;
|
||||
declare type T2<out out> = T2;
|
||||
@ -0,0 +1,12 @@
|
||||
=== tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts ===
|
||||
type T1<in in> = T1 // Error: circularly references
|
||||
>T1 : Symbol(T1, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 0))
|
||||
> : Symbol((Missing), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 8), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 10))
|
||||
> : Symbol((Missing), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 8), Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 10))
|
||||
>T1 : Symbol(T1, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 0))
|
||||
|
||||
type T2<out out> = T2 // Error: circularly references
|
||||
>T2 : Symbol(T2, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 19))
|
||||
>out : Symbol(out, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 1, 8))
|
||||
>T2 : Symbol(T2, Decl(varianceAnnotationsWithCircularlyReferencesError.ts, 0, 19))
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
=== tests/cases/conformance/types/typeParameters/typeParameterLists/varianceAnnotationsWithCircularlyReferencesError.ts ===
|
||||
type T1<in in> = T1 // Error: circularly references
|
||||
>T1 : any
|
||||
|
||||
type T2<out out> = T2 // Error: circularly references
|
||||
>T2 : any
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
// @strict: true
|
||||
// @declaration: true
|
||||
|
||||
type T1<in in> = T1 // Error: circularly references
|
||||
type T2<out out> = T2 // Error: circularly references
|
||||
Loading…
x
Reference in New Issue
Block a user