1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
|
=== tests/cases/compiler/computedEnumTypeWidening.ts ===
declare function computed(x: number): number;
>computed : Symbol(computed, Decl(computedEnumTypeWidening.ts, 0, 0))
>x : Symbol(x, Decl(computedEnumTypeWidening.ts, 0, 26))
enum E {
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
A = computed(0),
>A : Symbol(E.A, Decl(computedEnumTypeWidening.ts, 2, 8))
>computed : Symbol(computed, Decl(computedEnumTypeWidening.ts, 0, 0))
B = computed(1),
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>computed : Symbol(computed, Decl(computedEnumTypeWidening.ts, 0, 0))
C = computed(2),
>C : Symbol(E.C, Decl(computedEnumTypeWidening.ts, 4, 20))
>computed : Symbol(computed, Decl(computedEnumTypeWidening.ts, 0, 0))
D = computed(3),
>D : Symbol(E.D, Decl(computedEnumTypeWidening.ts, 5, 20))
>computed : Symbol(computed, Decl(computedEnumTypeWidening.ts, 0, 0))
}
function f1() {
>f1 : Symbol(f1, Decl(computedEnumTypeWidening.ts, 7, 1))
const c1 = E.B; // Fresh E.B
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 10, 9))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v1 = c1; // E
>v1 : Symbol(v1, Decl(computedEnumTypeWidening.ts, 11, 7))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 10, 9))
const c2 = c1; // Fresh E.B
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 12, 9))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 10, 9))
let v2 = c2; // E
>v2 : Symbol(v2, Decl(computedEnumTypeWidening.ts, 13, 7))
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 12, 9))
const c3: E.B = E.B; // E.B
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 14, 9))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v3 = c3; // E.B
>v3 : Symbol(v3, Decl(computedEnumTypeWidening.ts, 15, 7))
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 14, 9))
const c4: E.B = c1; // E.B
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 16, 9))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 10, 9))
let v4 = c4; // E.B
>v4 : Symbol(v4, Decl(computedEnumTypeWidening.ts, 17, 7))
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 16, 9))
}
function f2(cond: boolean) {
>f2 : Symbol(f2, Decl(computedEnumTypeWidening.ts, 18, 1))
>cond : Symbol(cond, Decl(computedEnumTypeWidening.ts, 20, 12))
const c1 = cond ? E.A : E.B; // Fresh E.A | fresh E.B
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 21, 9))
>cond : Symbol(cond, Decl(computedEnumTypeWidening.ts, 20, 12))
>E.A : Symbol(E.A, Decl(computedEnumTypeWidening.ts, 2, 8))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>A : Symbol(E.A, Decl(computedEnumTypeWidening.ts, 2, 8))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
const c2: E.A | E.B = c1; // E.A | E.B
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 22, 9))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>A : Symbol(E.A, Decl(computedEnumTypeWidening.ts, 2, 8))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 21, 9))
const c3 = cond ? c1 : c2; // E.A | E.B
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 23, 9))
>cond : Symbol(cond, Decl(computedEnumTypeWidening.ts, 20, 12))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 21, 9))
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 22, 9))
const c4 = cond ? c3 : E.C; // E.A | E.B | fresh E.C
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 24, 9))
>cond : Symbol(cond, Decl(computedEnumTypeWidening.ts, 20, 12))
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 23, 9))
>E.C : Symbol(E.C, Decl(computedEnumTypeWidening.ts, 4, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>C : Symbol(E.C, Decl(computedEnumTypeWidening.ts, 4, 20))
const c5: E.A | E.B | E.C = c4; // E.A | E.B | E.C
>c5 : Symbol(c5, Decl(computedEnumTypeWidening.ts, 25, 9))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>A : Symbol(E.A, Decl(computedEnumTypeWidening.ts, 2, 8))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>C : Symbol(E.C, Decl(computedEnumTypeWidening.ts, 4, 20))
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 24, 9))
let v1 = c1; // E
>v1 : Symbol(v1, Decl(computedEnumTypeWidening.ts, 26, 7))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 21, 9))
let v2 = c2; // E.A | E.B
>v2 : Symbol(v2, Decl(computedEnumTypeWidening.ts, 27, 7))
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 22, 9))
let v3 = c3; // E.A | E.B
>v3 : Symbol(v3, Decl(computedEnumTypeWidening.ts, 28, 7))
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 23, 9))
let v4 = c4; // E
>v4 : Symbol(v4, Decl(computedEnumTypeWidening.ts, 29, 7))
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 24, 9))
let v5 = c5; // E.A | E.B | E.C
>v5 : Symbol(v5, Decl(computedEnumTypeWidening.ts, 30, 7))
>c5 : Symbol(c5, Decl(computedEnumTypeWidening.ts, 25, 9))
}
function f3() {
>f3 : Symbol(f3, Decl(computedEnumTypeWidening.ts, 31, 1))
const c1 = E.B;
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 34, 9))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v1 = c1; // E
>v1 : Symbol(v1, Decl(computedEnumTypeWidening.ts, 35, 7))
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 34, 9))
const c2: E.B = E.B;
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 36, 9))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v2 = c2; // E.B
>v2 : Symbol(v2, Decl(computedEnumTypeWidening.ts, 37, 7))
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 36, 9))
const c3 = E.B as E.B;
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 38, 9))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v3 = c3; // E.B
>v3 : Symbol(v3, Decl(computedEnumTypeWidening.ts, 39, 7))
>c3 : Symbol(c3, Decl(computedEnumTypeWidening.ts, 38, 9))
const c4 = <E.B>E.B;
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 40, 9))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v4 = c4; // E.B
>v4 : Symbol(v4, Decl(computedEnumTypeWidening.ts, 41, 7))
>c4 : Symbol(c4, Decl(computedEnumTypeWidening.ts, 40, 9))
const c5 = E.B as const;
>c5 : Symbol(c5, Decl(computedEnumTypeWidening.ts, 42, 9))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>const : Symbol(const)
let v5 = c5; // E.B
>v5 : Symbol(v5, Decl(computedEnumTypeWidening.ts, 43, 7))
>c5 : Symbol(c5, Decl(computedEnumTypeWidening.ts, 42, 9))
}
declare enum E2 { A, B, C, D }
>E2 : Symbol(E2, Decl(computedEnumTypeWidening.ts, 44, 1))
>A : Symbol(E2.A, Decl(computedEnumTypeWidening.ts, 46, 17))
>B : Symbol(E2.B, Decl(computedEnumTypeWidening.ts, 46, 20))
>C : Symbol(E2.C, Decl(computedEnumTypeWidening.ts, 46, 23))
>D : Symbol(E2.D, Decl(computedEnumTypeWidening.ts, 46, 26))
function f4() {
>f4 : Symbol(f4, Decl(computedEnumTypeWidening.ts, 46, 30))
const c1 = E2.B; // Fresh E2.B
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 49, 9))
>E2.B : Symbol(E2.B, Decl(computedEnumTypeWidening.ts, 46, 20))
>E2 : Symbol(E2, Decl(computedEnumTypeWidening.ts, 44, 1))
>B : Symbol(E2.B, Decl(computedEnumTypeWidening.ts, 46, 20))
let v1 = E.B; // E2
>v1 : Symbol(v1, Decl(computedEnumTypeWidening.ts, 50, 7))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
}
const c1 = E.B;
>c1 : Symbol(c1, Decl(computedEnumTypeWidening.ts, 53, 5))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
const c2 = E.B as const;
>c2 : Symbol(c2, Decl(computedEnumTypeWidening.ts, 54, 5))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>const : Symbol(const)
let v1 = E.B;
>v1 : Symbol(v1, Decl(computedEnumTypeWidening.ts, 55, 3))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
let v2 = E.B as const;
>v2 : Symbol(v2, Decl(computedEnumTypeWidening.ts, 56, 3))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>const : Symbol(const)
class C {
>C : Symbol(C, Decl(computedEnumTypeWidening.ts, 56, 22))
p1 = E.B;
>p1 : Symbol(C.p1, Decl(computedEnumTypeWidening.ts, 58, 9))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
p2 = E.B as const;
>p2 : Symbol(C.p2, Decl(computedEnumTypeWidening.ts, 59, 11))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>const : Symbol(const)
readonly p3 = E.B;
>p3 : Symbol(C.p3, Decl(computedEnumTypeWidening.ts, 60, 20))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
readonly p4 = E.B as const;
>p4 : Symbol(C.p4, Decl(computedEnumTypeWidening.ts, 61, 20))
>E.B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>E : Symbol(E, Decl(computedEnumTypeWidening.ts, 0, 45))
>B : Symbol(E.B, Decl(computedEnumTypeWidening.ts, 3, 20))
>const : Symbol(const)
}
// Repro from #52531
enum MyEnum { A, B, C }
>MyEnum : Symbol(MyEnum, Decl(computedEnumTypeWidening.ts, 63, 1))
>A : Symbol(MyEnum.A, Decl(computedEnumTypeWidening.ts, 67, 13))
>B : Symbol(MyEnum.B, Decl(computedEnumTypeWidening.ts, 67, 16))
>C : Symbol(MyEnum.C, Decl(computedEnumTypeWidening.ts, 67, 19))
let val1 = MyEnum.A;
>val1 : Symbol(val1, Decl(computedEnumTypeWidening.ts, 69, 3))
>MyEnum.A : Symbol(MyEnum.A, Decl(computedEnumTypeWidening.ts, 67, 13))
>MyEnum : Symbol(MyEnum, Decl(computedEnumTypeWidening.ts, 63, 1))
>A : Symbol(MyEnum.A, Decl(computedEnumTypeWidening.ts, 67, 13))
val1 = MyEnum.B;
>val1 : Symbol(val1, Decl(computedEnumTypeWidening.ts, 69, 3))
>MyEnum.B : Symbol(MyEnum.B, Decl(computedEnumTypeWidening.ts, 67, 16))
>MyEnum : Symbol(MyEnum, Decl(computedEnumTypeWidening.ts, 63, 1))
>B : Symbol(MyEnum.B, Decl(computedEnumTypeWidening.ts, 67, 16))
declare enum MyDeclaredEnum { A, B, C }
>MyDeclaredEnum : Symbol(MyDeclaredEnum, Decl(computedEnumTypeWidening.ts, 70, 16))
>A : Symbol(MyDeclaredEnum.A, Decl(computedEnumTypeWidening.ts, 72, 29))
>B : Symbol(MyDeclaredEnum.B, Decl(computedEnumTypeWidening.ts, 72, 32))
>C : Symbol(MyDeclaredEnum.C, Decl(computedEnumTypeWidening.ts, 72, 35))
let val2 = MyDeclaredEnum.A;
>val2 : Symbol(val2, Decl(computedEnumTypeWidening.ts, 74, 3))
>MyDeclaredEnum.A : Symbol(MyDeclaredEnum.A, Decl(computedEnumTypeWidening.ts, 72, 29))
>MyDeclaredEnum : Symbol(MyDeclaredEnum, Decl(computedEnumTypeWidening.ts, 70, 16))
>A : Symbol(MyDeclaredEnum.A, Decl(computedEnumTypeWidening.ts, 72, 29))
val2 = MyDeclaredEnum.B;
>val2 : Symbol(val2, Decl(computedEnumTypeWidening.ts, 74, 3))
>MyDeclaredEnum.B : Symbol(MyDeclaredEnum.B, Decl(computedEnumTypeWidening.ts, 72, 32))
>MyDeclaredEnum : Symbol(MyDeclaredEnum, Decl(computedEnumTypeWidening.ts, 70, 16))
>B : Symbol(MyDeclaredEnum.B, Decl(computedEnumTypeWidening.ts, 72, 32))
|