mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-06-11 02:15:10 -05:00
Add more case
This commit is contained in:
@@ -1,10 +1,6 @@
|
||||
/*@internal*/
|
||||
namespace ts {
|
||||
export function transformESNext(context: TransformationContext) {
|
||||
const {
|
||||
hoistVariableDeclaration
|
||||
} = context;
|
||||
|
||||
return chainBundle(transformSourceFile);
|
||||
|
||||
function transformSourceFile(node: SourceFile) {
|
||||
@@ -37,14 +33,9 @@ namespace ts {
|
||||
const nonAssignmentOperator = getNonAssignmentOperatorForCompoundAssignment(operator.kind);
|
||||
const left = visitNode(binaryExpression.left, visitor, isExpression);
|
||||
const right = visitNode(binaryExpression.right, visitor, isExpression);
|
||||
let cond = left;
|
||||
if (shouldCaptureInTempVariable(left)) {
|
||||
const temp = createTempVariable(hoistVariableDeclaration);
|
||||
cond = createAssignment(temp, left);
|
||||
}
|
||||
|
||||
return createBinary(
|
||||
cond,
|
||||
left,
|
||||
nonAssignmentOperator,
|
||||
createParen(
|
||||
createAssignment(
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
//// [logicalAssignment2.ts]
|
||||
interface A {
|
||||
foo: {
|
||||
bar(): {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
declare const a: A
|
||||
declare const b: A
|
||||
declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
b.baz ||= result.baz
|
||||
c.baz ??= result.baz
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
|
||||
|
||||
|
||||
//// [logicalAssignment2.js]
|
||||
"use strict";
|
||||
var _a, _b;
|
||||
a.baz && (a.baz = result.baz);
|
||||
b.baz || (b.baz = result.baz);
|
||||
(_a = c.baz) !== null && _a !== void 0 ? _a : (c.baz = result.baz);
|
||||
a.foo["baz"] && (a.foo["baz"] = result.foo.baz);
|
||||
b.foo["baz"] && (b.foo["baz"] = result.foo.baz);
|
||||
c.foo["baz"] && (c.foo["baz"] = result.foo.baz);
|
||||
a.foo.bar().baz && (a.foo.bar().baz = result.foo.bar().baz);
|
||||
b.foo.bar().baz || (b.foo.bar().baz = result.foo.bar().baz);
|
||||
(_b = c.foo.bar().baz) !== null && _b !== void 0 ? _b : (c.foo.bar().baz = result.foo.bar().baz);
|
||||
@@ -0,0 +1,142 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment2.ts ===
|
||||
interface A {
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
foo: {
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
|
||||
bar(): {
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const a: A
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const b: A
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const c: A
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>a.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>a.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>b.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>b.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>c.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>c.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment2.ts ===
|
||||
interface A {
|
||||
foo: {
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
bar(): {
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
>result : A
|
||||
|
||||
declare const a: A
|
||||
>a : A
|
||||
|
||||
declare const b: A
|
||||
>b : A
|
||||
|
||||
declare const c: A
|
||||
>c : A
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz ||= result.baz : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz ??= result.baz : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo["baz"] : string | number | undefined
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo["baz"] : string | number | undefined
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo["baz"] : string | number | undefined
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz &&= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar().baz : string | number | undefined
|
||||
>a.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
//// [logicalAssignment2.ts]
|
||||
interface A {
|
||||
foo: {
|
||||
bar(): {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
declare const a: A
|
||||
declare const b: A
|
||||
declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
b.baz ||= result.baz
|
||||
c.baz ??= result.baz
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
|
||||
|
||||
|
||||
//// [logicalAssignment2.js]
|
||||
"use strict";
|
||||
a.baz && (a.baz = result.baz);
|
||||
b.baz || (b.baz = result.baz);
|
||||
c.baz ?? (c.baz = result.baz);
|
||||
a.foo["baz"] && (a.foo["baz"] = result.foo.baz);
|
||||
b.foo["baz"] && (b.foo["baz"] = result.foo.baz);
|
||||
c.foo["baz"] && (c.foo["baz"] = result.foo.baz);
|
||||
a.foo.bar().baz && (a.foo.bar().baz = result.foo.bar().baz);
|
||||
b.foo.bar().baz || (b.foo.bar().baz = result.foo.bar().baz);
|
||||
c.foo.bar().baz ?? (c.foo.bar().baz = result.foo.bar().baz);
|
||||
@@ -0,0 +1,142 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment2.ts ===
|
||||
interface A {
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
foo: {
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
|
||||
bar(): {
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const a: A
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const b: A
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const c: A
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>a.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>a.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>b.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>b.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>c.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>c.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment2.ts ===
|
||||
interface A {
|
||||
foo: {
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
bar(): {
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
>result : A
|
||||
|
||||
declare const a: A
|
||||
>a : A
|
||||
|
||||
declare const b: A
|
||||
>b : A
|
||||
|
||||
declare const c: A
|
||||
>c : A
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz ||= result.baz : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz ??= result.baz : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo["baz"] : string | number | undefined
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo["baz"] : string | number | undefined
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo["baz"] : string | number | undefined
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz &&= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar().baz : string | number | undefined
|
||||
>a.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
//// [logicalAssignment2.ts]
|
||||
interface A {
|
||||
foo: {
|
||||
bar(): {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
declare const a: A
|
||||
declare const b: A
|
||||
declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
b.baz ||= result.baz
|
||||
c.baz ??= result.baz
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
|
||||
|
||||
|
||||
//// [logicalAssignment2.js]
|
||||
"use strict";
|
||||
a.baz &&= result.baz;
|
||||
b.baz ||= result.baz;
|
||||
c.baz ??= result.baz;
|
||||
a.foo["baz"] &&= result.foo.baz;
|
||||
b.foo["baz"] &&= result.foo.baz;
|
||||
c.foo["baz"] &&= result.foo.baz;
|
||||
a.foo.bar().baz &&= result.foo.bar().baz;
|
||||
b.foo.bar().baz ||= result.foo.bar().baz;
|
||||
c.foo.bar().baz ??= result.foo.bar().baz;
|
||||
@@ -0,0 +1,142 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment2.ts ===
|
||||
interface A {
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
foo: {
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
|
||||
bar(): {
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const a: A
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const b: A
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
declare const c: A
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment2.ts, 0, 0))
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment2.ts, 6, 5))
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>"baz" : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo.baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 4, 9))
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>a.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>a.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment2.ts, 11, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>b.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>b.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment2.ts, 12, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>c.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>c.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment2.ts, 13, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar().baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
>result.foo.bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>result.foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment2.ts, 10, 13))
|
||||
>foo : Symbol(A.foo, Decl(logicalAssignment2.ts, 0, 13))
|
||||
>bar : Symbol(bar, Decl(logicalAssignment2.ts, 1, 10))
|
||||
>baz : Symbol(baz, Decl(logicalAssignment2.ts, 2, 16))
|
||||
|
||||
|
||||
@@ -0,0 +1,154 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment2.ts ===
|
||||
interface A {
|
||||
foo: {
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
bar(): {
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
>result : A
|
||||
|
||||
declare const a: A
|
||||
>a : A
|
||||
|
||||
declare const b: A
|
||||
>b : A
|
||||
|
||||
declare const c: A
|
||||
>c : A
|
||||
|
||||
a.baz &&= result.baz
|
||||
>a.baz &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.baz ||= result.baz
|
||||
>b.baz ||= result.baz : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.baz ??= result.baz
|
||||
>c.baz ??= result.baz : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
>a.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo["baz"] : string | number | undefined
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
>b.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>b.foo["baz"] : string | number | undefined
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
>c.foo["baz"] &&= result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>c.foo["baz"] : string | number | undefined
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>"baz" : "baz"
|
||||
>result.foo.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
>a.foo.bar().baz &&= result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>a.foo.bar().baz : string | number | undefined
|
||||
>a.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>a : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
>b.foo.bar().baz ||= result.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar().baz : string | number | undefined
|
||||
>b.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>b : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
>c.foo.bar().baz ??= result.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar().baz : string | number | undefined
|
||||
>c.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>c : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : string | number | undefined
|
||||
>result.foo.bar().baz : "" | 0 | 1 | 42 | undefined
|
||||
>result.foo.bar() : { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo.bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result.foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>result : A
|
||||
>foo : { bar(): { baz: "" | 0 | 1 | 42 | undefined; }; baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>bar : () => { baz: "" | 0 | 1 | 42 | undefined; }
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
//// [logicalAssignment3.ts]
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
declare const a: A;
|
||||
declare const b: A;
|
||||
declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
(b.baz) ||= result.baz;
|
||||
(c.baz) ??= result.baz;
|
||||
|
||||
|
||||
|
||||
//// [logicalAssignment3.js]
|
||||
"use strict";
|
||||
var _a;
|
||||
(a.baz) && ((a.baz) = result.baz);
|
||||
(b.baz) || ((b.baz) = result.baz);
|
||||
(_a = (c.baz)) !== null && _a !== void 0 ? _a : ((c.baz) = result.baz);
|
||||
@@ -0,0 +1,49 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment3.ts ===
|
||||
interface A {
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const a: A;
|
||||
>a : Symbol(a, Decl(logicalAssignment3.ts, 5, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const b: A;
|
||||
>b : Symbol(b, Decl(logicalAssignment3.ts, 6, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const c: A;
|
||||
>c : Symbol(c, Decl(logicalAssignment3.ts, 7, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>a.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment3.ts, 5, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>b.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment3.ts, 6, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>c.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment3.ts, 7, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment3.ts ===
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
>result : A
|
||||
|
||||
declare const a: A;
|
||||
>a : A
|
||||
|
||||
declare const b: A;
|
||||
>b : A
|
||||
|
||||
declare const c: A;
|
||||
>c : A
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>(a.baz) &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(a.baz) : string | number | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>(b.baz) ||= result.baz : string | number | undefined
|
||||
>(b.baz) : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>(c.baz) ??= result.baz : string | number | undefined
|
||||
>(c.baz) : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
//// [logicalAssignment3.ts]
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
declare const a: A;
|
||||
declare const b: A;
|
||||
declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
(b.baz) ||= result.baz;
|
||||
(c.baz) ??= result.baz;
|
||||
|
||||
|
||||
|
||||
//// [logicalAssignment3.js]
|
||||
"use strict";
|
||||
(a.baz) && ((a.baz) = result.baz);
|
||||
(b.baz) || ((b.baz) = result.baz);
|
||||
(c.baz) ?? ((c.baz) = result.baz);
|
||||
@@ -0,0 +1,49 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment3.ts ===
|
||||
interface A {
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const a: A;
|
||||
>a : Symbol(a, Decl(logicalAssignment3.ts, 5, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const b: A;
|
||||
>b : Symbol(b, Decl(logicalAssignment3.ts, 6, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const c: A;
|
||||
>c : Symbol(c, Decl(logicalAssignment3.ts, 7, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>a.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment3.ts, 5, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>b.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment3.ts, 6, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>c.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment3.ts, 7, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment3.ts ===
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
>result : A
|
||||
|
||||
declare const a: A;
|
||||
>a : A
|
||||
|
||||
declare const b: A;
|
||||
>b : A
|
||||
|
||||
declare const c: A;
|
||||
>c : A
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>(a.baz) &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(a.baz) : string | number | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>(b.baz) ||= result.baz : string | number | undefined
|
||||
>(b.baz) : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>(c.baz) ??= result.baz : string | number | undefined
|
||||
>(c.baz) : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
//// [logicalAssignment3.ts]
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
declare const a: A;
|
||||
declare const b: A;
|
||||
declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
(b.baz) ||= result.baz;
|
||||
(c.baz) ??= result.baz;
|
||||
|
||||
|
||||
|
||||
//// [logicalAssignment3.js]
|
||||
"use strict";
|
||||
(a.baz) &&= result.baz;
|
||||
(b.baz) ||= result.baz;
|
||||
(c.baz) ??= result.baz;
|
||||
@@ -0,0 +1,49 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment3.ts ===
|
||||
interface A {
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const a: A;
|
||||
>a : Symbol(a, Decl(logicalAssignment3.ts, 5, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const b: A;
|
||||
>b : Symbol(b, Decl(logicalAssignment3.ts, 6, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
declare const c: A;
|
||||
>c : Symbol(c, Decl(logicalAssignment3.ts, 7, 13))
|
||||
>A : Symbol(A, Decl(logicalAssignment3.ts, 0, 0))
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>a.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>a : Symbol(a, Decl(logicalAssignment3.ts, 5, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>b.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>b : Symbol(b, Decl(logicalAssignment3.ts, 6, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>c.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>c : Symbol(c, Decl(logicalAssignment3.ts, 7, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result.baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
>result : Symbol(result, Decl(logicalAssignment3.ts, 4, 13))
|
||||
>baz : Symbol(A.baz, Decl(logicalAssignment3.ts, 0, 13))
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment3.ts ===
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
>result : A
|
||||
|
||||
declare const a: A;
|
||||
>a : A
|
||||
|
||||
declare const b: A;
|
||||
>b : A
|
||||
|
||||
declare const c: A;
|
||||
>c : A
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
>(a.baz) &&= result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>(a.baz) : string | number | undefined
|
||||
>a.baz : string | number | undefined
|
||||
>a : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(b.baz) ||= result.baz;
|
||||
>(b.baz) ||= result.baz : string | number | undefined
|
||||
>(b.baz) : string | number | undefined
|
||||
>b.baz : string | number | undefined
|
||||
>b : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
(c.baz) ??= result.baz;
|
||||
>(c.baz) ??= result.baz : string | number | undefined
|
||||
>(c.baz) : string | number | undefined
|
||||
>c.baz : string | number | undefined
|
||||
>c : A
|
||||
>baz : string | number | undefined
|
||||
>result.baz : "" | 0 | 1 | 42 | undefined
|
||||
>result : A
|
||||
>baz : "" | 0 | 1 | 42 | undefined
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
//// [logicalAssignment4.ts]
|
||||
function foo1(results: number[] | undefined) {
|
||||
(results ||= []).push(100);
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
(results ??= []).push(100);
|
||||
}
|
||||
|
||||
//// [logicalAssignment4.js]
|
||||
"use strict";
|
||||
function foo1(results) {
|
||||
(results || (results = [])).push(100);
|
||||
}
|
||||
function foo2(results) {
|
||||
(results !== null && results !== void 0 ? results : (results = [])).push(100);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment4.ts ===
|
||||
function foo1(results: number[] | undefined) {
|
||||
>foo1 : Symbol(foo1, Decl(logicalAssignment4.ts, 0, 0))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 0, 14))
|
||||
|
||||
(results ||= []).push(100);
|
||||
>(results ||= []).push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 0, 14))
|
||||
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
>foo2 : Symbol(foo2, Decl(logicalAssignment4.ts, 2, 1))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 4, 14))
|
||||
|
||||
(results ??= []).push(100);
|
||||
>(results ??= []).push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 4, 14))
|
||||
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment4.ts ===
|
||||
function foo1(results: number[] | undefined) {
|
||||
>foo1 : (results: number[] | undefined) => void
|
||||
>results : number[] | undefined
|
||||
|
||||
(results ||= []).push(100);
|
||||
>(results ||= []).push(100) : number
|
||||
>(results ||= []).push : (...items: number[]) => number
|
||||
>(results ||= []) : number[]
|
||||
>results ||= [] : number[]
|
||||
>results : number[] | undefined
|
||||
>[] : never[]
|
||||
>push : (...items: number[]) => number
|
||||
>100 : 100
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
>foo2 : (results: number[] | undefined) => void
|
||||
>results : number[] | undefined
|
||||
|
||||
(results ??= []).push(100);
|
||||
>(results ??= []).push(100) : number
|
||||
>(results ??= []).push : (...items: number[]) => number
|
||||
>(results ??= []) : number[]
|
||||
>results ??= [] : number[]
|
||||
>results : number[] | undefined
|
||||
>[] : never[]
|
||||
>push : (...items: number[]) => number
|
||||
>100 : 100
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
//// [logicalAssignment4.ts]
|
||||
function foo1(results: number[] | undefined) {
|
||||
(results ||= []).push(100);
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
(results ??= []).push(100);
|
||||
}
|
||||
|
||||
//// [logicalAssignment4.js]
|
||||
"use strict";
|
||||
function foo1(results) {
|
||||
(results || (results = [])).push(100);
|
||||
}
|
||||
function foo2(results) {
|
||||
(results ?? (results = [])).push(100);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment4.ts ===
|
||||
function foo1(results: number[] | undefined) {
|
||||
>foo1 : Symbol(foo1, Decl(logicalAssignment4.ts, 0, 0))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 0, 14))
|
||||
|
||||
(results ||= []).push(100);
|
||||
>(results ||= []).push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 0, 14))
|
||||
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
>foo2 : Symbol(foo2, Decl(logicalAssignment4.ts, 2, 1))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 4, 14))
|
||||
|
||||
(results ??= []).push(100);
|
||||
>(results ??= []).push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 4, 14))
|
||||
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment4.ts ===
|
||||
function foo1(results: number[] | undefined) {
|
||||
>foo1 : (results: number[] | undefined) => void
|
||||
>results : number[] | undefined
|
||||
|
||||
(results ||= []).push(100);
|
||||
>(results ||= []).push(100) : number
|
||||
>(results ||= []).push : (...items: number[]) => number
|
||||
>(results ||= []) : number[]
|
||||
>results ||= [] : number[]
|
||||
>results : number[] | undefined
|
||||
>[] : never[]
|
||||
>push : (...items: number[]) => number
|
||||
>100 : 100
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
>foo2 : (results: number[] | undefined) => void
|
||||
>results : number[] | undefined
|
||||
|
||||
(results ??= []).push(100);
|
||||
>(results ??= []).push(100) : number
|
||||
>(results ??= []).push : (...items: number[]) => number
|
||||
>(results ??= []) : number[]
|
||||
>results ??= [] : number[]
|
||||
>results : number[] | undefined
|
||||
>[] : never[]
|
||||
>push : (...items: number[]) => number
|
||||
>100 : 100
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
//// [logicalAssignment4.ts]
|
||||
function foo1(results: number[] | undefined) {
|
||||
(results ||= []).push(100);
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
(results ??= []).push(100);
|
||||
}
|
||||
|
||||
//// [logicalAssignment4.js]
|
||||
"use strict";
|
||||
function foo1(results) {
|
||||
(results ||= []).push(100);
|
||||
}
|
||||
function foo2(results) {
|
||||
(results ??= []).push(100);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment4.ts ===
|
||||
function foo1(results: number[] | undefined) {
|
||||
>foo1 : Symbol(foo1, Decl(logicalAssignment4.ts, 0, 0))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 0, 14))
|
||||
|
||||
(results ||= []).push(100);
|
||||
>(results ||= []).push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 0, 14))
|
||||
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
>foo2 : Symbol(foo2, Decl(logicalAssignment4.ts, 2, 1))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 4, 14))
|
||||
|
||||
(results ??= []).push(100);
|
||||
>(results ??= []).push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
>results : Symbol(results, Decl(logicalAssignment4.ts, 4, 14))
|
||||
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
=== tests/cases/conformance/esnext/logicalAssignment/logicalAssignment4.ts ===
|
||||
function foo1(results: number[] | undefined) {
|
||||
>foo1 : (results: number[] | undefined) => void
|
||||
>results : number[] | undefined
|
||||
|
||||
(results ||= []).push(100);
|
||||
>(results ||= []).push(100) : number
|
||||
>(results ||= []).push : (...items: number[]) => number
|
||||
>(results ||= []) : number[]
|
||||
>results ||= [] : number[]
|
||||
>results : number[] | undefined
|
||||
>[] : never[]
|
||||
>push : (...items: number[]) => number
|
||||
>100 : 100
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
>foo2 : (results: number[] | undefined) => void
|
||||
>results : number[] | undefined
|
||||
|
||||
(results ??= []).push(100);
|
||||
>(results ??= []).push(100) : number
|
||||
>(results ??= []).push : (...items: number[]) => number
|
||||
>(results ??= []) : number[]
|
||||
>results ??= [] : number[]
|
||||
>results : number[] | undefined
|
||||
>[] : never[]
|
||||
>push : (...items: number[]) => number
|
||||
>100 : 100
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// @strict: true
|
||||
// @target: esnext, es2020, es2015
|
||||
interface A {
|
||||
foo: {
|
||||
bar(): {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A
|
||||
declare const a: A
|
||||
declare const b: A
|
||||
declare const c: A
|
||||
|
||||
a.baz &&= result.baz
|
||||
b.baz ||= result.baz
|
||||
c.baz ??= result.baz
|
||||
|
||||
a.foo["baz"] &&= result.foo.baz
|
||||
b.foo["baz"] &&= result.foo.baz
|
||||
c.foo["baz"] &&= result.foo.baz
|
||||
|
||||
a.foo.bar().baz &&= result.foo.bar().baz
|
||||
b.foo.bar().baz ||= result.foo.bar().baz
|
||||
c.foo.bar().baz ??= result.foo.bar().baz
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// @strict: true
|
||||
// @target: esnext, es2020, es2015
|
||||
interface A {
|
||||
baz: 0 | 1 | 42 | undefined | ''
|
||||
}
|
||||
|
||||
declare const result: A;
|
||||
declare const a: A;
|
||||
declare const b: A;
|
||||
declare const c: A;
|
||||
|
||||
(a.baz) &&= result.baz;
|
||||
(b.baz) ||= result.baz;
|
||||
(c.baz) ??= result.baz;
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
// @strict: true
|
||||
// @target: esnext, es2020, es2015
|
||||
|
||||
function foo1(results: number[] | undefined) {
|
||||
(results ||= []).push(100);
|
||||
}
|
||||
|
||||
function foo2(results: number[] | undefined) {
|
||||
(results ??= []).push(100);
|
||||
}
|
||||
Reference in New Issue
Block a user