Merge pull request #12158 from Microsoft/fix-literal-comparability-in-relational-comparison-operators

Fix literal comparability in relational comparison operators
This commit is contained in:
Nathan Shively-Sanders 2016-11-15 08:24:06 -08:00 committed by GitHub
commit a74e9d8ccf
45 changed files with 1056 additions and 2391 deletions

View file

@ -14502,6 +14502,8 @@ namespace ts {
case SyntaxKind.LessThanEqualsToken:
case SyntaxKind.GreaterThanEqualsToken:
if (checkForDisallowedESSymbolOperand(operator)) {
leftType = getBaseTypeOfLiteralType(leftType);
rightType = getBaseTypeOfLiteralType(rightType);
if (!isTypeComparableTo(leftType, rightType) && !isTypeComparableTo(rightType, leftType)) {
reportOperatorError();
}

View file

@ -1,128 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop1.ts(69,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop1.ts(86,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop1.ts(92,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop1.ts(109,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop1.ts (4 errors) ====
//==== let
for (let x in {}) {
(function() { return x});
(() => x);
}
for (let x of []) {
(function() { return x});
(() => x);
}
for (let x = 0; x < 1; ++x) {
(function() { return x});
(() => x);
}
while (1 === 1) {
let x;
(function() { return x});
(() => x);
}
do {
let x;
(function() { return x});
(() => x);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
(function() { return x});
(() => x);
}
for (let x = 0, y = 1; x < 1; ++x) {
(function() { return x + y});
(() => x + y);
}
while (1 === 1) {
let x, y;
(function() { return x + y});
(() => x + y);
}
do {
let x, y;
(function() { return x + y});
(() => x + y);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
(function() { return x + y});
(() => x + y);
}
//=========const
for (const x in {}) {
(function() { return x});
(() => x);
}
for (const x of []) {
(function() { return x});
(() => x);
}
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x});
(() => x);
}
while (1 === 1) {
const x = 1;
(function() { return x});
(() => x);
}
do {
const x = 1;
(function() { return x});
(() => x);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x});
(() => x);
}
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y});
(() => x + y);
}
while (1 === 1) {
const x = 1, y = 1;
(function() { return x + y});
(() => x + y);
}
do {
const x = 1, y = 1;
(function() { return x + y});
(() => x + y);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x + y});
(() => x + y);
}

View file

@ -32,10 +32,10 @@ for (let x of []) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -90,16 +90,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
@ -114,12 +114,12 @@ for (let y = 0; y < 1; ++y) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -188,16 +188,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
@ -246,21 +246,21 @@ for (const x of []) {
}
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 0
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 0
}
while (1 === 1) {
@ -269,34 +269,34 @@ while (1 === 1) {
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 1
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 1
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
} while (1 === 1)
>1 === 1 : boolean
@ -304,49 +304,49 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 1
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
}
while (1 === 1) {
@ -355,46 +355,46 @@ while (1 === 1) {
>1 : 1
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
}
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
} while (1 === 1)
>1 === 1 : boolean
@ -402,27 +402,27 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
}

View file

@ -1,128 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop1_ES6.ts(69,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop1_ES6.ts(86,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop1_ES6.ts(92,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop1_ES6.ts(109,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop1_ES6.ts (4 errors) ====
//==== let
for (let x in {}) {
(function() { return x});
(() => x);
}
for (let x of []) {
(function() { return x});
(() => x);
}
for (let x = 0; x < 1; ++x) {
(function() { return x});
(() => x);
}
while (1 === 1) {
let x;
(function() { return x});
(() => x);
}
do {
let x;
(function() { return x});
(() => x);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
(function() { return x});
(() => x);
}
for (let x = 0, y = 1; x < 1; ++x) {
(function() { return x + y});
(() => x + y);
}
while (1 === 1) {
let x, y;
(function() { return x + y});
(() => x + y);
}
do {
let x, y;
(function() { return x + y});
(() => x + y);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
(function() { return x + y});
(() => x + y);
}
//=========const
for (const x in {}) {
(function() { return x});
(() => x);
}
for (const x of []) {
(function() { return x});
(() => x);
}
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x});
(() => x);
}
while (1 === 1) {
const x = 1;
(function() { return x});
(() => x);
}
do {
const x = 1;
(function() { return x});
(() => x);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x});
(() => x);
}
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y});
(() => x + y);
}
while (1 === 1) {
const x = 1, y = 1;
(function() { return x + y});
(() => x + y);
}
do {
const x = 1, y = 1;
(function() { return x + y});
(() => x + y);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x + y});
(() => x + y);
}

View file

@ -32,10 +32,10 @@ for (let x of []) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -90,16 +90,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
@ -114,12 +114,12 @@ for (let y = 0; y < 1; ++y) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -188,16 +188,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
@ -246,21 +246,21 @@ for (const x of []) {
}
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 0
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 0
}
while (1 === 1) {
@ -269,34 +269,34 @@ while (1 === 1) {
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 1
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 1
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
} while (1 === 1)
>1 === 1 : boolean
@ -304,49 +304,49 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x});
>(function() { return x}) : () => number
>function() { return x} : () => number
>x : number
>x : 1
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
}
while (1 === 1) {
@ -355,46 +355,46 @@ while (1 === 1) {
>1 : 1
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
}
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
} while (1 === 1)
>1 === 1 : boolean
@ -402,27 +402,27 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x + y});
>(function() { return x + y}) : () => number
>function() { return x + y} : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
}

View file

@ -1,191 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop2.ts(108,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop2.ts(133,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop2.ts(142,30): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop2.ts(170,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop2.ts (4 errors) ====
// ========let
function foo0(x) {
for (let x of []) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo0_1(x) {
for (let x in []) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo1(x) {
for (let x = 0; x < 1; ++x) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo2(x) {
while (1 === 1) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo3(x) {
do {
let x;
let a = arguments.length;
(function() { return x + a });
(() => x + a);
} while (1 === 1)
}
function foo4(x) {
for (let y = 0; y < 1; ++y) {
let a = arguments.length;
let x = 1;
(function() { return x + a });
(() => x + a);
}
}
function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo6(x) {
while (1 === 1) {
let x, y;
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo7(x) {
do {
let x, y;
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
} while (1 === 1)
}
function foo8(x) {
for (let y = 0; y < 1; ++y) {
let x = 1;
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
///=======const
function foo0_c(x) {
for (const x of []) {
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo0_1_c(x) {
for (const x in []) {
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo1_c(x) {
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo2_c(x) {
while (1 === 1) {
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo3_c(x) {
do {
const x = 1;
const a = arguments.length;
(function() { return x + a });
(() => x + a);
} while (1 === 1)
}
function foo4_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const a = arguments.length;
const x = 1;
(function() { return x + a });
(() => x + a);
}
}
function foo5_c(x) {
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo6_c(x) {
while (1 === 1) {
const x = 1, y =1 ;
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo7_c(x) {
do {
const x = 1, y = 1;
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
} while (1 === 1)
}
function foo8_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}

View file

@ -68,10 +68,10 @@ function foo1(x) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -168,10 +168,10 @@ function foo4(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
@ -183,7 +183,7 @@ function foo4(x) {
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x + a });
>(function() { return x + a }) : () => number
@ -207,12 +207,12 @@ function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -328,16 +328,16 @@ function foo8(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
let a = arguments.length;
>a : number
@ -430,11 +430,11 @@ function foo1_c(x) {
>x : any
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
const a = arguments.length;
>a : number
@ -446,14 +446,14 @@ function foo1_c(x) {
>(function() { return x + a }) : () => number
>function() { return x + a } : () => number
>x + a : number
>x : number
>x : 0
>a : number
(() => x + a);
>(() => x + a) : () => number
>() => x + a : () => number
>x + a : number
>x : number
>x : 0
>a : number
}
}
@ -495,8 +495,8 @@ function foo3_c(x) {
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
const a = arguments.length;
>a : number
@ -508,14 +508,14 @@ function foo3_c(x) {
>(function() { return x + a }) : () => number
>function() { return x + a } : () => number
>x + a : number
>x : number
>x : 1
>a : number
(() => x + a);
>(() => x + a) : () => number
>() => x + a : () => number
>x + a : number
>x : number
>x : 1
>a : number
} while (1 === 1)
@ -529,11 +529,11 @@ function foo4_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const a = arguments.length;
>a : number
@ -542,21 +542,21 @@ function foo4_c(x) {
>length : number
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x + a });
>(function() { return x + a }) : () => number
>function() { return x + a } : () => number
>x + a : number
>x : number
>x : 1
>a : number
(() => x + a);
>(() => x + a) : () => number
>() => x + a : () => number
>x + a : number
>x : number
>x : 1
>a : number
}
}
@ -566,13 +566,13 @@ function foo5_c(x) {
>x : any
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
const a = arguments.length;
>a : number
@ -585,8 +585,8 @@ function foo5_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>a : number
(() => x + y + a);
@ -594,8 +594,8 @@ function foo5_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>a : number
}
}
@ -611,10 +611,10 @@ function foo6_c(x) {
>1 : 1
const x = 1, y =1 ;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
const a = arguments.length;
>a : number
@ -627,8 +627,8 @@ function foo6_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
(() => x + y + a);
@ -636,8 +636,8 @@ function foo6_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
}
}
@ -648,10 +648,10 @@ function foo7_c(x) {
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
const a = arguments.length;
>a : number
@ -664,8 +664,8 @@ function foo7_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
(() => x + y + a);
@ -673,8 +673,8 @@ function foo7_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
} while (1 === 1)
@ -689,15 +689,15 @@ function foo8_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
const a = arguments.length;
>a : number
@ -710,8 +710,8 @@ function foo8_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>a : number
(() => x + y + a);
@ -719,8 +719,8 @@ function foo8_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>a : number
}
}

View file

@ -1,190 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop2_ES6.ts(107,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop2_ES6.ts(132,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop2_ES6.ts(141,30): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop2_ES6.ts(169,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop2_ES6.ts (4 errors) ====
// ========let
function foo0(x) {
for (let x of []) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo0_1(x) {
for (let x in []) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo1(x) {
for (let x = 0; x < 1; ++x) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo2(x) {
while (1 === 1) {
let a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo3(x) {
do {
let x;
let a = arguments.length;
(function() { return x + a });
(() => x + a);
} while (1 === 1)
}
function foo4(x) {
for (let y = 0; y < 1; ++y) {
let a = arguments.length;
let x = 1;
(function() { return x + a });
(() => x + a);
}
}
function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo6(x) {
while (1 === 1) {
let x, y;
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo7(x) {
do {
let x, y;
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
} while (1 === 1)
}
function foo8(x) {
for (let y = 0; y < 1; ++y) {
let x = 1;
let a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
///=======const
function foo0_c(x) {
for (const x of []) {
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo0_1_c(x) {
for (const x in []) {
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo1_c(x) {
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo2_c(x) {
while (1 === 1) {
const a = arguments.length;
(function() { return x + a });
(() => x + a);
}
}
function foo3_c(x) {
do {
const x = 1;
const a = arguments.length;
(function() { return x + a });
(() => x + a);
} while (1 === 1)
}
function foo4_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const a = arguments.length;
const x = 1;
(function() { return x + a });
(() => x + a);
}
}
function foo5_c(x) {
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo6_c(x) {
while (1 === 1) {
const x = 1, y =1 ;
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}
function foo7_c(x) {
do {
const x = 1, y = 1;
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
} while (1 === 1)
}
function foo8_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
const a = arguments.length;
(function() { return x + y + a });
(() => x + y + a);
}
}

View file

@ -67,10 +67,10 @@ function foo1(x) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -167,10 +167,10 @@ function foo4(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
@ -182,7 +182,7 @@ function foo4(x) {
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x + a });
>(function() { return x + a }) : () => number
@ -206,12 +206,12 @@ function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -327,16 +327,16 @@ function foo8(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
let a = arguments.length;
>a : number
@ -429,11 +429,11 @@ function foo1_c(x) {
>x : any
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
const a = arguments.length;
>a : number
@ -445,14 +445,14 @@ function foo1_c(x) {
>(function() { return x + a }) : () => number
>function() { return x + a } : () => number
>x + a : number
>x : number
>x : 0
>a : number
(() => x + a);
>(() => x + a) : () => number
>() => x + a : () => number
>x + a : number
>x : number
>x : 0
>a : number
}
}
@ -494,8 +494,8 @@ function foo3_c(x) {
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
const a = arguments.length;
>a : number
@ -507,14 +507,14 @@ function foo3_c(x) {
>(function() { return x + a }) : () => number
>function() { return x + a } : () => number
>x + a : number
>x : number
>x : 1
>a : number
(() => x + a);
>(() => x + a) : () => number
>() => x + a : () => number
>x + a : number
>x : number
>x : 1
>a : number
} while (1 === 1)
@ -528,11 +528,11 @@ function foo4_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const a = arguments.length;
>a : number
@ -541,21 +541,21 @@ function foo4_c(x) {
>length : number
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x + a });
>(function() { return x + a }) : () => number
>function() { return x + a } : () => number
>x + a : number
>x : number
>x : 1
>a : number
(() => x + a);
>(() => x + a) : () => number
>() => x + a : () => number
>x + a : number
>x : number
>x : 1
>a : number
}
}
@ -565,13 +565,13 @@ function foo5_c(x) {
>x : any
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
const a = arguments.length;
>a : number
@ -584,8 +584,8 @@ function foo5_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>a : number
(() => x + y + a);
@ -593,8 +593,8 @@ function foo5_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>a : number
}
}
@ -610,10 +610,10 @@ function foo6_c(x) {
>1 : 1
const x = 1, y =1 ;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
const a = arguments.length;
>a : number
@ -626,8 +626,8 @@ function foo6_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
(() => x + y + a);
@ -635,8 +635,8 @@ function foo6_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
}
}
@ -647,10 +647,10 @@ function foo7_c(x) {
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
const a = arguments.length;
>a : number
@ -663,8 +663,8 @@ function foo7_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
(() => x + y + a);
@ -672,8 +672,8 @@ function foo7_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>a : number
} while (1 === 1)
@ -688,15 +688,15 @@ function foo8_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
const a = arguments.length;
>a : number
@ -709,8 +709,8 @@ function foo8_c(x) {
>function() { return x + y + a } : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>a : number
(() => x + y + a);
@ -718,8 +718,8 @@ function foo8_c(x) {
>() => x + y + a : () => number
>x + y + a : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>a : number
}
}

View file

@ -1,232 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop3.ts(132,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop3.ts(164,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop3.ts(175,30): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop3.ts(209,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop3.ts (4 errors) ====
///=========let
declare function use(a: any);
function foo0(x) {
for (let x of []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo0_1(x) {
for (let x in []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo1(x) {
for (let x = 0; x < 1; ++x) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo2(x) {
while (1 === 1) {
let x = 1;
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo3(x) {
do {
let x;
var v;
(function() { return x + v });
(() => x + v);
} while (1 === 1);
use(v);
}
function foo4(x) {
for (let y = 0; y < 1; ++y) {
var v = y;
let x = 1;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}
function foo6(x) {
while (1 === 1) {
let x, y;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v)
}
function foo7(x) {
do {
let x, y;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
} while (1 === 1);
use(v);
}
function foo8(x) {
for (let y = 0; y < 1; ++y) {
let x = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}
//===const
function foo0_c(x) {
for (const x of []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo0_1_c(x) {
for (const x in []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo1_c(x) {
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo2_c(x) {
while (1 === 1) {
const x = 1;
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo3_c(x) {
do {
const x = 1;
var v;
(function() { return x + v });
(() => x + v);
} while (1 === 1);
use(v);
}
function foo4_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = y;
const x = 1;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo5_c(x) {
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}
function foo6_c(x) {
while (1 === 1) {
const x = 1, y = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v)
}
function foo7_c(x) {
do {
const x = 1, y = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
} while (1 === 1);
use(v);
}
function foo8_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}

View file

@ -76,10 +76,10 @@ function foo1(x) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -119,7 +119,7 @@ function foo2(x) {
let x = 1;
>x : number
>1 : number
>1 : 1
var v = x;
>v : number
@ -179,7 +179,7 @@ function foo3(x) {
use(v);
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
function foo4(x) {
@ -188,10 +188,10 @@ function foo4(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
@ -201,7 +201,7 @@ function foo4(x) {
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x + v });
>(function() { return x + v }) : () => number
@ -230,12 +230,12 @@ function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -283,8 +283,8 @@ function foo6(x) {
>y : any
var v = x;
>v : any
>x : any
>v : undefined
>x : undefined
(function() { return x + y + v });
>(function() { return x + y + v }) : () => any
@ -293,7 +293,7 @@ function foo6(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
(() => x + y + v);
>(() => x + y + v) : () => any
@ -302,13 +302,13 @@ function foo6(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
}
use(v)
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
function foo7(x) {
@ -321,8 +321,8 @@ function foo7(x) {
>y : any
var v = x;
>v : any
>x : any
>v : undefined
>x : undefined
(function() { return x + y + v });
>(function() { return x + y + v }) : () => any
@ -331,7 +331,7 @@ function foo7(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
(() => x + y + v);
>(() => x + y + v) : () => any
@ -340,7 +340,7 @@ function foo7(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
} while (1 === 1);
>1 === 1 : boolean
@ -350,7 +350,7 @@ function foo7(x) {
use(v);
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
@ -360,16 +360,16 @@ function foo8(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
var v = x;
>v : number
@ -471,28 +471,28 @@ function foo1_c(x) {
>x : any
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v = x;
>v : number
>x : number
>x : 0
(function() { return x + v });
>(function() { return x + v }) : () => number
>function() { return x + v } : () => number
>x + v : number
>x : number
>x : 0
>v : number
(() => x + v);
>(() => x + v) : () => number
>() => x + v : () => number
>x + v : number
>x : number
>x : 0
>v : number
}
@ -512,25 +512,25 @@ function foo2_c(x) {
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + v });
>(function() { return x + v }) : () => number
>function() { return x + v } : () => number
>x + v : number
>x : number
>x : 1
>v : number
(() => x + v);
>(() => x + v) : () => number
>() => x + v : () => number
>x + v : number
>x : number
>x : 1
>v : number
}
@ -546,8 +546,8 @@ function foo3_c(x) {
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v;
>v : any
@ -556,14 +556,14 @@ function foo3_c(x) {
>(function() { return x + v }) : () => any
>function() { return x + v } : () => any
>x + v : any
>x : number
>x : 1
>v : any
(() => x + v);
>(() => x + v) : () => any
>() => x + v : () => any
>x + v : any
>x : number
>x : 1
>v : any
} while (1 === 1);
@ -574,7 +574,7 @@ function foo3_c(x) {
use(v);
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
function foo4_c(x) {
@ -582,32 +582,32 @@ function foo4_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
var v = y;
>v : number
>y : number
>y : 0
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x + v });
>(function() { return x + v }) : () => number
>function() { return x + v } : () => number
>x + v : number
>x : number
>x : 1
>v : number
(() => x + v);
>(() => x + v) : () => number
>() => x + v : () => number
>x + v : number
>x : number
>x : 1
>v : number
}
@ -622,25 +622,25 @@ function foo5_c(x) {
>x : any
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v = x;
>v : number
>x : number
>x : 0
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>v : number
(() => x + y + v);
@ -648,8 +648,8 @@ function foo5_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>v : number
}
@ -670,22 +670,22 @@ function foo6_c(x) {
>1 : 1
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
(() => x + y + v);
@ -693,8 +693,8 @@ function foo6_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
}
@ -710,22 +710,22 @@ function foo7_c(x) {
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
(() => x + y + v);
@ -733,8 +733,8 @@ function foo7_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
} while (1 === 1);
@ -754,27 +754,27 @@ function foo8_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>v : number
(() => x + y + v);
@ -782,8 +782,8 @@ function foo8_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>v : number
}

View file

@ -1,233 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop3_ES6.ts(133,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop3_ES6.ts(165,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop3_ES6.ts(176,30): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop3_ES6.ts(210,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop3_ES6.ts (4 errors) ====
///=========let
declare function use(a: any);
function foo0(x) {
for (let x of []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo0_1(x) {
for (let x in []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo1(x) {
for (let x = 0; x < 1; ++x) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo2(x) {
while (1 === 1) {
let x = 1;
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo3(x) {
do {
let x;
var v;
(function() { return x + v });
(() => x + v);
} while (1 === 1);
use(v);
}
function foo4(x) {
for (let y = 0; y < 1; ++y) {
var v = y;
let x = 1;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}
function foo6(x) {
while (1 === 1) {
let x, y;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v)
}
function foo7(x) {
do {
let x, y;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
} while (1 === 1);
use(v);
}
function foo8(x) {
for (let y = 0; y < 1; ++y) {
let x = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}
//===const
function foo0_c(x) {
for (const x of []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo0_1_c(x) {
for (const x in []) {
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo1_c(x) {
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo2_c(x) {
while (1 === 1) {
const x = 1;
var v = x;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo3_c(x) {
do {
const x = 1;
var v;
(function() { return x + v });
(() => x + v);
} while (1 === 1);
use(v);
}
function foo4_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = y;
const x = 1;
(function() { return x + v });
(() => x + v);
}
use(v);
}
function foo5_c(x) {
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}
function foo6_c(x) {
while (1 === 1) {
const x = 1, y = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v)
}
function foo7_c(x) {
do {
const x = 1, y = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
} while (1 === 1);
use(v);
}
function foo8_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v = x;
(function() { return x + y + v });
(() => x + y + v);
}
use(v);
}

View file

@ -77,10 +77,10 @@ function foo1(x) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -120,7 +120,7 @@ function foo2(x) {
let x = 1;
>x : number
>1 : number
>1 : 1
var v = x;
>v : number
@ -180,7 +180,7 @@ function foo3(x) {
use(v);
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
function foo4(x) {
@ -189,10 +189,10 @@ function foo4(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
@ -202,7 +202,7 @@ function foo4(x) {
let x = 1;
>x : number
>1 : number
>1 : 1
(function() { return x + v });
>(function() { return x + v }) : () => number
@ -231,12 +231,12 @@ function foo5(x) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -284,8 +284,8 @@ function foo6(x) {
>y : any
var v = x;
>v : any
>x : any
>v : undefined
>x : undefined
(function() { return x + y + v });
>(function() { return x + y + v }) : () => any
@ -294,7 +294,7 @@ function foo6(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
(() => x + y + v);
>(() => x + y + v) : () => any
@ -303,13 +303,13 @@ function foo6(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
}
use(v)
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
function foo7(x) {
@ -322,8 +322,8 @@ function foo7(x) {
>y : any
var v = x;
>v : any
>x : any
>v : undefined
>x : undefined
(function() { return x + y + v });
>(function() { return x + y + v }) : () => any
@ -332,7 +332,7 @@ function foo7(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
(() => x + y + v);
>(() => x + y + v) : () => any
@ -341,7 +341,7 @@ function foo7(x) {
>x + y : any
>x : any
>y : any
>v : any
>v : undefined
} while (1 === 1);
>1 === 1 : boolean
@ -351,7 +351,7 @@ function foo7(x) {
use(v);
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
@ -361,16 +361,16 @@ function foo8(x) {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
var v = x;
>v : number
@ -472,28 +472,28 @@ function foo1_c(x) {
>x : any
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v = x;
>v : number
>x : number
>x : 0
(function() { return x + v });
>(function() { return x + v }) : () => number
>function() { return x + v } : () => number
>x + v : number
>x : number
>x : 0
>v : number
(() => x + v);
>(() => x + v) : () => number
>() => x + v : () => number
>x + v : number
>x : number
>x : 0
>v : number
}
@ -513,25 +513,25 @@ function foo2_c(x) {
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + v });
>(function() { return x + v }) : () => number
>function() { return x + v } : () => number
>x + v : number
>x : number
>x : 1
>v : number
(() => x + v);
>(() => x + v) : () => number
>() => x + v : () => number
>x + v : number
>x : number
>x : 1
>v : number
}
@ -547,8 +547,8 @@ function foo3_c(x) {
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v;
>v : any
@ -557,14 +557,14 @@ function foo3_c(x) {
>(function() { return x + v }) : () => any
>function() { return x + v } : () => any
>x + v : any
>x : number
>x : 1
>v : any
(() => x + v);
>(() => x + v) : () => any
>() => x + v : () => any
>x + v : any
>x : number
>x : 1
>v : any
} while (1 === 1);
@ -575,7 +575,7 @@ function foo3_c(x) {
use(v);
>use(v) : any
>use : (a: any) => any
>v : any
>v : undefined
}
function foo4_c(x) {
@ -583,32 +583,32 @@ function foo4_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
var v = y;
>v : number
>y : number
>y : 0
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
(function() { return x + v });
>(function() { return x + v }) : () => number
>function() { return x + v } : () => number
>x + v : number
>x : number
>x : 1
>v : number
(() => x + v);
>(() => x + v) : () => number
>() => x + v : () => number
>x + v : number
>x : number
>x : 1
>v : number
}
@ -623,25 +623,25 @@ function foo5_c(x) {
>x : any
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v = x;
>v : number
>x : number
>x : 0
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>v : number
(() => x + y + v);
@ -649,8 +649,8 @@ function foo5_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>v : number
}
@ -671,22 +671,22 @@ function foo6_c(x) {
>1 : 1
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
(() => x + y + v);
@ -694,8 +694,8 @@ function foo6_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
}
@ -711,22 +711,22 @@ function foo7_c(x) {
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
(() => x + y + v);
@ -734,8 +734,8 @@ function foo7_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v : number
} while (1 === 1);
@ -755,27 +755,27 @@ function foo8_c(x) {
>x : any
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v = x;
>v : number
>x : number
>x : 1
(function() { return x + y + v });
>(function() { return x + y + v }) : () => number
>function() { return x + y + v } : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>v : number
(() => x + y + v);
@ -783,8 +783,8 @@ function foo8_c(x) {
>() => x + y + v : () => number
>x + y + v : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>v : number
}

View file

@ -1,158 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop4.ts(90,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop4.ts(110,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop4.ts(117,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop4.ts(137,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop4.ts (4 errors) ====
//======let
export function exportedFoo() {
return v0 + v00 + v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8;
}
for (let x of []) {
var v0 = x;
(function() { return x + v0});
(() => x);
}
for (let x in []) {
var v00 = x;
(function() { return x + v00});
(() => x);
}
for (let x = 0; x < 1; ++x) {
var v1 = x;
(function() { return x + v1});
(() => x);
}
while (1 === 1) {
let x;
var v2 = x;
(function() { return x + v2});
(() => x);
}
do {
let x;
var v3 = x;
(function() { return x + v3});
(() => x);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
var v4 = x;
(function() { return x + v4});
(() => x);
}
for (let x = 0, y = 1; x < 1; ++x) {
var v5 = x;
(function() { return x + y + v5});
(() => x + y);
}
while (1 === 1) {
let x, y;
var v6 = x;
(function() { return x + y + v6});
(() => x + y);
}
do {
let x, y;
var v7 = x;
(function() { return x + y + v7});
(() => x + y);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
var v8 = x;
(function() { return x + y + v8});
(() => x + y);
}
//======const
export function exportedFoo2() {
return v0_c + v00_c + v1_c + v2_c + v3_c + v4_c + v5_c + v6_c + v7_c + v8_c;
}
for (const x of []) {
var v0_c = x;
(function() { return x + v0_c});
(() => x);
}
for (const x in []) {
var v00_c = x;
(function() { return x + v00});
(() => x);
}
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v1_c = x;
(function() { return x + v1_c});
(() => x);
}
while (1 === 1) {
const x =1;
var v2_c = x;
(function() { return x + v2_c});
(() => x);
}
do {
const x = 1;
var v3_c = x;
(function() { return x + v3_c});
(() => x);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v4_c = x;
(function() { return x + v4_c});
(() => x);
}
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v5_c = x;
(function() { return x + y + v5_c});
(() => x + y);
}
while (1 === 1) {
const x = 1, y = 1;
var v6_c = x;
(function() { return x + y + v6_c});
(() => x + y);
}
do {
const x = 1, y = 1;
var v7_c = x;
(function() { return x + y + v7_c});
(() => x + y);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v8_c = x;
(function() { return x + y + v8_c});
(() => x + y);
}

View file

@ -17,12 +17,12 @@ export function exportedFoo() {
>v0 : any
>v00 : string
>v1 : number
>v2 : any
>v3 : any
>v2 : undefined
>v3 : undefined
>v4 : number
>v5 : number
>v6 : any
>v7 : any
>v6 : undefined
>v7 : undefined
>v8 : number
}
@ -70,10 +70,10 @@ for (let x in []) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -103,15 +103,15 @@ while (1 === 1) {
>x : any
var v2 = x;
>v2 : any
>x : any
>v2 : undefined
>x : undefined
(function() { return x + v2});
>(function() { return x + v2}) : () => any
>function() { return x + v2} : () => any
>x + v2 : any
>x : any
>v2 : any
>v2 : undefined
(() => x);
>(() => x) : () => any
@ -124,15 +124,15 @@ do {
>x : any
var v3 = x;
>v3 : any
>x : any
>v3 : undefined
>x : undefined
(function() { return x + v3});
>(function() { return x + v3}) : () => any
>function() { return x + v3} : () => any
>x + v3 : any
>x : any
>v3 : any
>v3 : undefined
(() => x);
>(() => x) : () => any
@ -146,16 +146,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
var v4 = x;
>v4 : number
@ -176,12 +176,12 @@ for (let y = 0; y < 1; ++y) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -216,8 +216,8 @@ while (1 === 1) {
>y : any
var v6 = x;
>v6 : any
>x : any
>v6 : undefined
>x : undefined
(function() { return x + y + v6});
>(function() { return x + y + v6}) : () => any
@ -226,7 +226,7 @@ while (1 === 1) {
>x + y : any
>x : any
>y : any
>v6 : any
>v6 : undefined
(() => x + y);
>(() => x + y) : () => any
@ -242,8 +242,8 @@ do {
>y : any
var v7 = x;
>v7 : any
>x : any
>v7 : undefined
>x : undefined
(function() { return x + y + v7});
>(function() { return x + y + v7}) : () => any
@ -252,7 +252,7 @@ do {
>x + y : any
>x : any
>y : any
>v7 : any
>v7 : undefined
(() => x + y);
>(() => x + y) : () => any
@ -268,16 +268,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
var v8 = x;
>v8 : number
@ -369,27 +369,27 @@ for (const x in []) {
}
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v1_c = x;
>v1_c : number
>x : number
>x : 0
(function() { return x + v1_c});
>(function() { return x + v1_c}) : () => number
>function() { return x + v1_c} : () => number
>x + v1_c : number
>x : number
>x : 0
>v1_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 0
}
while (1 === 1) {
@ -398,46 +398,46 @@ while (1 === 1) {
>1 : 1
const x =1;
>x : number
>1 : number
>x : 1
>1 : 1
var v2_c = x;
>v2_c : number
>x : number
>x : 1
(function() { return x + v2_c});
>(function() { return x + v2_c}) : () => number
>function() { return x + v2_c} : () => number
>x + v2_c : number
>x : number
>x : 1
>v2_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v3_c = x;
>v3_c : number
>x : number
>x : 1
(function() { return x + v3_c});
>(function() { return x + v3_c}) : () => number
>function() { return x + v3_c} : () => number
>x + v3_c : number
>x : number
>x : 1
>v3_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
} while (1 === 1)
>1 === 1 : boolean
@ -445,61 +445,61 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v4_c = x;
>v4_c : number
>x : number
>x : 1
(function() { return x + v4_c});
>(function() { return x + v4_c}) : () => number
>function() { return x + v4_c} : () => number
>x + v4_c : number
>x : number
>x : 1
>v4_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v5_c = x;
>v5_c : number
>x : number
>x : 0
(function() { return x + y + v5_c});
>(function() { return x + y + v5_c}) : () => number
>function() { return x + y + v5_c} : () => number
>x + y + v5_c : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>v5_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
}
while (1 === 1) {
@ -508,58 +508,58 @@ while (1 === 1) {
>1 : 1
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v6_c = x;
>v6_c : number
>x : number
>x : 1
(function() { return x + y + v6_c});
>(function() { return x + y + v6_c}) : () => number
>function() { return x + y + v6_c} : () => number
>x + y + v6_c : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v6_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
}
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v7_c = x;
>v7_c : number
>x : number
>x : 1
(function() { return x + y + v7_c});
>(function() { return x + y + v7_c}) : () => number
>function() { return x + y + v7_c} : () => number
>x + y + v7_c : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v7_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
} while (1 === 1)
>1 === 1 : boolean
@ -567,34 +567,34 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v8_c = x;
>v8_c : number
>x : number
>x : 1
(function() { return x + y + v8_c});
>(function() { return x + y + v8_c}) : () => number
>function() { return x + y + v8_c} : () => number
>x + y + v8_c : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>v8_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
}

View file

@ -1,158 +0,0 @@
tests/cases/compiler/capturedLetConstInLoop4_ES6.ts(90,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop4_ES6.ts(110,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop4_ES6.ts(117,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop4_ES6.ts(137,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop4_ES6.ts (4 errors) ====
//======let
export function exportedFoo() {
return v0 + v00 + v1 + v2 + v3 + v4 + v5 + v6 + v7 + v8;
}
for (let x of []) {
var v0 = x;
(function() { return x + v0});
(() => x);
}
for (let x in []) {
var v00 = x;
(function() { return x + v00});
(() => x);
}
for (let x = 0; x < 1; ++x) {
var v1 = x;
(function() { return x + v1});
(() => x);
}
while (1 === 1) {
let x;
var v2 = x;
(function() { return x + v2});
(() => x);
}
do {
let x;
var v3 = x;
(function() { return x + v3});
(() => x);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
var v4 = x;
(function() { return x + v4});
(() => x);
}
for (let x = 0, y = 1; x < 1; ++x) {
var v5 = x;
(function() { return x + y + v5});
(() => x + y);
}
while (1 === 1) {
let x, y;
var v6 = x;
(function() { return x + y + v6});
(() => x + y);
}
do {
let x, y;
var v7 = x;
(function() { return x + y + v7});
(() => x + y);
} while (1 === 1)
for (let y = 0; y < 1; ++y) {
let x = 1;
var v8 = x;
(function() { return x + y + v8});
(() => x + y);
}
//======const
export function exportedFoo2() {
return v0_c + v00_c + v1_c + v2_c + v3_c + v4_c + v5_c + v6_c + v7_c + v8_c;
}
for (const x of []) {
var v0_c = x;
(function() { return x + v0_c});
(() => x);
}
for (const x in []) {
var v00_c = x;
(function() { return x + v00});
(() => x);
}
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v1_c = x;
(function() { return x + v1_c});
(() => x);
}
while (1 === 1) {
const x =1;
var v2_c = x;
(function() { return x + v2_c});
(() => x);
}
do {
const x = 1;
var v3_c = x;
(function() { return x + v3_c});
(() => x);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v4_c = x;
(function() { return x + v4_c});
(() => x);
}
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v5_c = x;
(function() { return x + y + v5_c});
(() => x + y);
}
while (1 === 1) {
const x = 1, y = 1;
var v6_c = x;
(function() { return x + y + v6_c});
(() => x + y);
}
do {
const x = 1, y = 1;
var v7_c = x;
(function() { return x + y + v7_c});
(() => x + y);
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v8_c = x;
(function() { return x + y + v8_c});
(() => x + y);
}

View file

@ -17,12 +17,12 @@ export function exportedFoo() {
>v0 : any
>v00 : string
>v1 : number
>v2 : any
>v3 : any
>v2 : undefined
>v3 : undefined
>v4 : number
>v5 : number
>v6 : any
>v7 : any
>v6 : undefined
>v7 : undefined
>v8 : number
}
@ -70,10 +70,10 @@ for (let x in []) {
for (let x = 0; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -103,15 +103,15 @@ while (1 === 1) {
>x : any
var v2 = x;
>v2 : any
>x : any
>v2 : undefined
>x : undefined
(function() { return x + v2});
>(function() { return x + v2}) : () => any
>function() { return x + v2} : () => any
>x + v2 : any
>x : any
>v2 : any
>v2 : undefined
(() => x);
>(() => x) : () => any
@ -124,15 +124,15 @@ do {
>x : any
var v3 = x;
>v3 : any
>x : any
>v3 : undefined
>x : undefined
(function() { return x + v3});
>(function() { return x + v3}) : () => any
>function() { return x + v3} : () => any
>x + v3 : any
>x : any
>v3 : any
>v3 : undefined
(() => x);
>(() => x) : () => any
@ -146,16 +146,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
var v4 = x;
>v4 : number
@ -176,12 +176,12 @@ for (let y = 0; y < 1; ++y) {
for (let x = 0, y = 1; x < 1; ++x) {
>x : number
>0 : number
>0 : 0
>y : number
>1 : number
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>1 : 1
>++x : number
>x : number
@ -216,8 +216,8 @@ while (1 === 1) {
>y : any
var v6 = x;
>v6 : any
>x : any
>v6 : undefined
>x : undefined
(function() { return x + y + v6});
>(function() { return x + y + v6}) : () => any
@ -226,7 +226,7 @@ while (1 === 1) {
>x + y : any
>x : any
>y : any
>v6 : any
>v6 : undefined
(() => x + y);
>(() => x + y) : () => any
@ -242,8 +242,8 @@ do {
>y : any
var v7 = x;
>v7 : any
>x : any
>v7 : undefined
>x : undefined
(function() { return x + y + v7});
>(function() { return x + y + v7}) : () => any
@ -252,7 +252,7 @@ do {
>x + y : any
>x : any
>y : any
>v7 : any
>v7 : undefined
(() => x + y);
>(() => x + y) : () => any
@ -268,16 +268,16 @@ do {
for (let y = 0; y < 1; ++y) {
>y : number
>0 : number
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>1 : 1
>++y : number
>y : number
let x = 1;
>x : number
>1 : number
>1 : 1
var v8 = x;
>v8 : number
@ -369,27 +369,27 @@ for (const x in []) {
}
for (const x = 0; x < 1;) {
>x : number
>0 : number
>x : 0
>0 : 0
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v1_c = x;
>v1_c : number
>x : number
>x : 0
(function() { return x + v1_c});
>(function() { return x + v1_c}) : () => number
>function() { return x + v1_c} : () => number
>x + v1_c : number
>x : number
>x : 0
>v1_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 0
}
while (1 === 1) {
@ -398,46 +398,46 @@ while (1 === 1) {
>1 : 1
const x =1;
>x : number
>1 : number
>x : 1
>1 : 1
var v2_c = x;
>v2_c : number
>x : number
>x : 1
(function() { return x + v2_c});
>(function() { return x + v2_c}) : () => number
>function() { return x + v2_c} : () => number
>x + v2_c : number
>x : number
>x : 1
>v2_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
do {
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v3_c = x;
>v3_c : number
>x : number
>x : 1
(function() { return x + v3_c});
>(function() { return x + v3_c}) : () => number
>function() { return x + v3_c} : () => number
>x + v3_c : number
>x : number
>x : 1
>v3_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
} while (1 === 1)
>1 === 1 : boolean
@ -445,61 +445,61 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v4_c = x;
>v4_c : number
>x : number
>x : 1
(function() { return x + v4_c});
>(function() { return x + v4_c}) : () => number
>function() { return x + v4_c} : () => number
>x + v4_c : number
>x : number
>x : 1
>v4_c : number
(() => x);
>(() => x) : () => number
>() => x : () => number
>x : number
>x : 1
}
for (const x = 0, y = 1; x < 1;) {
>x : number
>0 : number
>y : number
>1 : number
>x : 0
>0 : 0
>y : 1
>1 : 1
>x < 1 : boolean
>x : number
>1 : number
>x : 0
>1 : 1
var v5_c = x;
>v5_c : number
>x : number
>x : 0
(function() { return x + y + v5_c});
>(function() { return x + y + v5_c}) : () => number
>function() { return x + y + v5_c} : () => number
>x + y + v5_c : number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
>v5_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 0
>y : 1
}
while (1 === 1) {
@ -508,58 +508,58 @@ while (1 === 1) {
>1 : 1
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v6_c = x;
>v6_c : number
>x : number
>x : 1
(function() { return x + y + v6_c});
>(function() { return x + y + v6_c}) : () => number
>function() { return x + y + v6_c} : () => number
>x + y + v6_c : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v6_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
}
do {
const x = 1, y = 1;
>x : number
>1 : number
>y : number
>1 : number
>x : 1
>1 : 1
>y : 1
>1 : 1
var v7_c = x;
>v7_c : number
>x : number
>x : 1
(function() { return x + y + v7_c});
>(function() { return x + y + v7_c}) : () => number
>function() { return x + y + v7_c} : () => number
>x + y + v7_c : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
>v7_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 1
} while (1 === 1)
>1 === 1 : boolean
@ -567,34 +567,34 @@ do {
>1 : 1
for (const y = 0; y < 1;) {
>y : number
>0 : number
>y : 0
>0 : 0
>y < 1 : boolean
>y : number
>1 : number
>y : 0
>1 : 1
const x = 1;
>x : number
>1 : number
>x : 1
>1 : 1
var v8_c = x;
>v8_c : number
>x : number
>x : 1
(function() { return x + y + v8_c});
>(function() { return x + y + v8_c}) : () => number
>function() { return x + y + v8_c} : () => number
>x + y + v8_c : number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
>v8_c : number
(() => x + y);
>(() => x + y) : () => number
>() => x + y : () => number
>x + y : number
>x : number
>y : number
>x : 1
>y : 0
}

View file

@ -1,12 +1,8 @@
tests/cases/compiler/capturedLetConstInLoop5.ts(170,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5.ts(174,13): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5.ts(211,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5.ts(225,30): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5.ts(229,13): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5.ts(268,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop5.ts (6 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop5.ts (2 errors) ====
declare function use(a: any);
//====let
@ -177,8 +173,6 @@ tests/cases/compiler/capturedLetConstInLoop5.ts(268,23): error TS2365: Operator
function foo1_c(x) {
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + v });
(() => x + v);
@ -222,8 +216,6 @@ tests/cases/compiler/capturedLetConstInLoop5.ts(268,23): error TS2365: Operator
function foo4_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = y;
let x = 1;
(function() { return x + v });
@ -238,8 +230,6 @@ tests/cases/compiler/capturedLetConstInLoop5.ts(268,23): error TS2365: Operator
function foo5_c(x) {
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + y + v });
(() => x + y + v);
@ -285,8 +275,6 @@ tests/cases/compiler/capturedLetConstInLoop5.ts(268,23): error TS2365: Operator
function foo8_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v = x;
(function() { return x + y + v });

View file

@ -1,12 +1,8 @@
tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(171,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(175,13): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(212,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(226,30): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(230,13): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(269,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop5_ES6.ts (6 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop5_ES6.ts (2 errors) ====
declare function use(a: any);
@ -178,8 +174,6 @@ tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(269,23): error TS2365: Opera
function foo1_c(x) {
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + v });
(() => x + v);
@ -223,8 +217,6 @@ tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(269,23): error TS2365: Opera
function foo4_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = y;
let x = 1;
(function() { return x + v });
@ -239,8 +231,6 @@ tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(269,23): error TS2365: Opera
function foo5_c(x) {
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
var v = x;
(function() { return x + y + v });
(() => x + y + v);
@ -286,8 +276,6 @@ tests/cases/compiler/capturedLetConstInLoop5_ES6.ts(269,23): error TS2365: Opera
function foo8_c(x) {
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
var v = x;
(function() { return x + y + v });

View file

@ -1,14 +1,10 @@
tests/cases/compiler/capturedLetConstInLoop6.ts(144,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6.ts(147,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6.ts(150,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop6.ts(179,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6.ts(191,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6.ts(194,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6.ts(197,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop6.ts(226,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop6.ts (8 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop6.ts (4 errors) ====
// ====let
for (let x of []) {
(function() { return x});
@ -153,8 +149,6 @@ tests/cases/compiler/capturedLetConstInLoop6.ts(226,19): error TS2365: Operator
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x});
(() => x);
if (x == 1) {
@ -194,8 +188,6 @@ tests/cases/compiler/capturedLetConstInLoop6.ts(226,19): error TS2365: Operator
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x});
(() => x);
@ -208,8 +200,6 @@ tests/cases/compiler/capturedLetConstInLoop6.ts(226,19): error TS2365: Operator
}
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y});
(() => x + y);
if (x == 1) {
@ -249,8 +239,6 @@ tests/cases/compiler/capturedLetConstInLoop6.ts(226,19): error TS2365: Operator
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x + y});
(() => x + y);

View file

@ -1,14 +1,10 @@
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(144,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(147,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(150,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(179,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(191,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(194,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(197,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(226,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop6_ES6.ts (8 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop6_ES6.ts (4 errors) ====
// ====let
for (let x of []) {
(function() { return x});
@ -153,8 +149,6 @@ tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(226,19): error TS2365: Opera
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x});
(() => x);
if (x == 1) {
@ -194,8 +188,6 @@ tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(226,19): error TS2365: Opera
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x});
(() => x);
@ -208,8 +200,6 @@ tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(226,19): error TS2365: Opera
}
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y});
(() => x + y);
if (x == 1) {
@ -249,8 +239,6 @@ tests/cases/compiler/capturedLetConstInLoop6_ES6.ts(226,19): error TS2365: Opera
} while (1 === 1)
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x + y});
(() => x + y);

View file

@ -1,18 +1,14 @@
tests/cases/compiler/capturedLetConstInLoop7.ts(227,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(230,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(233,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(236,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7.ts(239,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7.ts(283,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(302,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(305,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(308,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7.ts(311,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7.ts(314,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7.ts(359,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop7.ts (12 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop7.ts (8 errors) ====
//===let
l0:
for (let x of []) {
@ -240,8 +236,6 @@ tests/cases/compiler/capturedLetConstInLoop7.ts(359,19): error TS2365: Operator
l1_c:
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x});
(() => x);
if (x == 1) {
@ -306,8 +300,6 @@ tests/cases/compiler/capturedLetConstInLoop7.ts(359,19): error TS2365: Operator
l4_c:
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x});
(() => x);
@ -327,8 +319,6 @@ tests/cases/compiler/capturedLetConstInLoop7.ts(359,19): error TS2365: Operator
l5_c:
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y});
(() => x + y);
if (x == 1) {
@ -394,8 +384,6 @@ tests/cases/compiler/capturedLetConstInLoop7.ts(359,19): error TS2365: Operator
l8_c:
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x + y});
(() => x + y);

View file

@ -1,18 +1,14 @@
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(227,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(230,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(233,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(236,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(239,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(283,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(302,26): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(305,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(308,9): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(311,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(314,9): error TS2365: Operator '==' cannot be applied to types '0' and '2'.
tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(359,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/capturedLetConstInLoop7_ES6.ts (12 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop7_ES6.ts (8 errors) ====
//===let
l0:
for (let x of []) {
@ -240,8 +236,6 @@ tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(359,19): error TS2365: Opera
l1_c:
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x});
(() => x);
if (x == 1) {
@ -306,8 +300,6 @@ tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(359,19): error TS2365: Opera
l4_c:
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x});
(() => x);
@ -327,8 +319,6 @@ tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(359,19): error TS2365: Opera
l5_c:
for (const x = 0, y = 1; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y});
(() => x + y);
if (x == 1) {
@ -394,8 +384,6 @@ tests/cases/compiler/capturedLetConstInLoop7_ES6.ts(359,19): error TS2365: Opera
l8_c:
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
const x = 1;
(function() { return x + y});
(() => x + y);

View file

@ -1,6 +1,3 @@
tests/cases/compiler/capturedLetConstInLoop8.ts(66,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8.ts(68,27): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8.ts(70,31): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8.ts(73,21): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8.ts(76,21): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8.ts(79,21): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
@ -19,7 +16,7 @@ tests/cases/compiler/capturedLetConstInLoop8.ts(117,17): error TS2365: Operator
tests/cases/compiler/capturedLetConstInLoop8.ts(120,17): error TS2365: Operator '==' cannot be applied to types '0' and '3'.
==== tests/cases/compiler/capturedLetConstInLoop8.ts (19 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop8.ts (16 errors) ====
function foo() {
l0:
for (let z = 0; z < 1; ++z) {
@ -86,16 +83,10 @@ tests/cases/compiler/capturedLetConstInLoop8.ts(120,17): error TS2365: Operator
function foo_c() {
l0:
for (const z = 0; z < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
l1:
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
ll1:
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y });
(() => x + y);
if (y == 1) {

View file

@ -1,6 +1,3 @@
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(66,23): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(68,27): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(70,31): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(73,21): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(76,21): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(79,21): error TS2365: Operator '==' cannot be applied to types '0' and '1'.
@ -19,7 +16,7 @@ tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(117,17): error TS2365: Opera
tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(120,17): error TS2365: Operator '==' cannot be applied to types '0' and '3'.
==== tests/cases/compiler/capturedLetConstInLoop8_ES6.ts (19 errors) ====
==== tests/cases/compiler/capturedLetConstInLoop8_ES6.ts (16 errors) ====
function foo() {
l0:
for (let z = 0; z < 1; ++z) {
@ -86,16 +83,10 @@ tests/cases/compiler/capturedLetConstInLoop8_ES6.ts(120,17): error TS2365: Opera
function foo_c() {
l0:
for (const z = 0; z < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
l1:
for (const x = 0; x < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
ll1:
for (const y = 0; y < 1;) {
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
(function() { return x + y });
(() => x + y);
if (y == 1) {

View file

@ -1,58 +0,0 @@
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts(5,1): error TS2365: Operator '>' cannot be applied to types 'BrandedNum' and '0'.
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts(10,1): error TS2365: Operator '<' cannot be applied to types 'BrandedNum' and '0'.
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts(15,1): error TS2365: Operator '>=' cannot be applied to types 'BrandedNum' and '0'.
tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts(20,1): error TS2365: Operator '<=' cannot be applied to types 'BrandedNum' and '0'.
==== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts (4 errors) ====
type BrandedNum = number & { __numberBrand: any };
var x : BrandedNum;
// operator >
x > 0;
~~~~~
!!! error TS2365: Operator '>' cannot be applied to types 'BrandedNum' and '0'.
x > <number>0;
x > <BrandedNum>0;
// operator <
x < 0;
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'BrandedNum' and '0'.
x < <number>0;
x < <BrandedNum>0;
// operator >=
x >= 0;
~~~~~~
!!! error TS2365: Operator '>=' cannot be applied to types 'BrandedNum' and '0'.
x >= <number>0;
x >= <BrandedNum>0;
// operator <=
x <= 0;
~~~~~~
!!! error TS2365: Operator '<=' cannot be applied to types 'BrandedNum' and '0'.
x <= <number>0;
x <= <BrandedNum>0;
// operator ==
x == 0;
x == <number>0;
x == <BrandedNum>0;
// operator !=
x != 0;
x != <number>0;
x != <BrandedNum>0;
// operator ===
x === 0;
x === <number>0;
x === <BrandedNum>0;
// operator !==
x !== 0;
x !== <number>0;
x !== <BrandedNum>0;

View file

@ -0,0 +1,97 @@
=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts ===
type BrandedNum = number & { __numberBrand: any };
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
>__numberBrand : Symbol(__numberBrand, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 28))
var x : BrandedNum;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator >
x > 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x > <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x > <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator <
x < 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x < <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x < <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator >=
x >= 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x >= <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x >= <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator <=
x <= 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x <= <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x <= <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator ==
x == 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x == <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x == <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator !=
x != 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x != <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x != <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator ===
x === 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x === <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x === <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))
// operator !==
x !== 0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x !== <number>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
x !== <BrandedNum>0;
>x : Symbol(x, Decl(comparisonOperatorWithNumericLiteral.ts, 1, 3))
>BrandedNum : Symbol(BrandedNum, Decl(comparisonOperatorWithNumericLiteral.ts, 0, 0))

View file

@ -0,0 +1,161 @@
=== tests/cases/conformance/expressions/binaryOperators/comparisonOperator/comparisonOperatorWithNumericLiteral.ts ===
type BrandedNum = number & { __numberBrand: any };
>BrandedNum : BrandedNum
>__numberBrand : any
var x : BrandedNum;
>x : BrandedNum
>BrandedNum : BrandedNum
// operator >
x > 0;
>x > 0 : boolean
>x : BrandedNum
>0 : 0
x > <number>0;
>x > <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x > <BrandedNum>0;
>x > <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator <
x < 0;
>x < 0 : boolean
>x : BrandedNum
>0 : 0
x < <number>0;
>x < <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x < <BrandedNum>0;
>x < <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator >=
x >= 0;
>x >= 0 : boolean
>x : BrandedNum
>0 : 0
x >= <number>0;
>x >= <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x >= <BrandedNum>0;
>x >= <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator <=
x <= 0;
>x <= 0 : boolean
>x : BrandedNum
>0 : 0
x <= <number>0;
>x <= <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x <= <BrandedNum>0;
>x <= <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator ==
x == 0;
>x == 0 : boolean
>x : BrandedNum
>0 : 0
x == <number>0;
>x == <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x == <BrandedNum>0;
>x == <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator !=
x != 0;
>x != 0 : boolean
>x : BrandedNum
>0 : 0
x != <number>0;
>x != <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x != <BrandedNum>0;
>x != <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator ===
x === 0;
>x === 0 : boolean
>x : BrandedNum
>0 : 0
x === <number>0;
>x === <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x === <BrandedNum>0;
>x === <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0
// operator !==
x !== 0;
>x !== 0 : boolean
>x : BrandedNum
>0 : 0
x !== <number>0;
>x !== <number>0 : boolean
>x : BrandedNum
><number>0 : number
>0 : 0
x !== <BrandedNum>0;
>x !== <BrandedNum>0 : boolean
>x : BrandedNum
><BrandedNum>0 : BrandedNum
>BrandedNum : BrandedNum
>0 : 0

View file

@ -1,71 +0,0 @@
tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsBooleanType.ts(35,1): error TS2365: Operator '>' cannot be applied to types '2' and '1'.
tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsBooleanType.ts(58,23): error TS2365: Operator '>' cannot be applied to types '2' and '1'.
==== tests/cases/conformance/expressions/conditonalOperator/conditionalOperatorConditionIsBooleanType.ts (2 errors) ====
//Cond ? Expr1 : Expr2, Cond is of boolean type, Expr1 and Expr2 have the same type
var condBoolean: boolean;
var exprAny1: any;
var exprBoolean1: boolean;
var exprNumber1: number;
var exprString1: string;
var exprIsObject1: Object;
var exprAny2: any;
var exprBoolean2: boolean;
var exprNumber2: number;
var exprString2: string;
var exprIsObject2: Object;
//Cond is a boolean type variable
condBoolean ? exprAny1 : exprAny2;
condBoolean ? exprBoolean1 : exprBoolean2;
condBoolean ? exprNumber1 : exprNumber2;
condBoolean ? exprString1 : exprString2;
condBoolean ? exprIsObject1 : exprIsObject2;
condBoolean ? exprString1 : exprBoolean1; // union
//Cond is a boolean type literal
true ? exprAny1 : exprAny2;
false ? exprBoolean1 : exprBoolean2;
true ? exprNumber1 : exprNumber2;
false ? exprString1 : exprString2;
true ? exprIsObject1 : exprIsObject2;
true ? exprString1 : exprBoolean1; // union
//Cond is a boolean type expression
!true ? exprAny1 : exprAny2;
typeof "123" == "string" ? exprBoolean1 : exprBoolean2;
2 > 1 ? exprNumber1 : exprNumber2;
~~~~~
!!! error TS2365: Operator '>' cannot be applied to types '2' and '1'.
null === undefined ? exprString1 : exprString2;
true || false ? exprIsObject1 : exprIsObject2;
null === undefined ? exprString1 : exprBoolean1; // union
//Results shoud be same as Expr1 and Expr2
var resultIsAny1 = condBoolean ? exprAny1 : exprAny2;
var resultIsBoolean1 = condBoolean ? exprBoolean1 : exprBoolean2;
var resultIsNumber1 = condBoolean ? exprNumber1 : exprNumber2;
var resultIsString1 = condBoolean ? exprString1 : exprString2;
var resultIsObject1 = condBoolean ? exprIsObject1 : exprIsObject2;
var resultIsStringOrBoolean1 = condBoolean ? exprString1 : exprBoolean1; // union
var resultIsAny2 = true ? exprAny1 : exprAny2;
var resultIsBoolean2 = false ? exprBoolean1 : exprBoolean2;
var resultIsNumber2 = true ? exprNumber1 : exprNumber2;
var resultIsString2 = false ? exprString1 : exprString2;
var resultIsObject2 = true ? exprIsObject1 : exprIsObject2;
var resultIsStringOrBoolean2 = true ? exprString1 : exprBoolean1; // union
var resultIsStringOrBoolean3 = false ? exprString1 : exprBoolean1; // union
var resultIsAny3 = !true ? exprAny1 : exprAny2;
var resultIsBoolean3 = typeof "123" == "string" ? exprBoolean1 : exprBoolean2;
var resultIsNumber3 = 2 > 1 ? exprNumber1 : exprNumber2;
~~~~~
!!! error TS2365: Operator '>' cannot be applied to types '2' and '1'.
var resultIsString3 = null === undefined ? exprString1 : exprString2;
var resultIsObject3 = true || false ? exprIsObject1 : exprIsObject2;
var resultIsStringOrBoolean4 = typeof "123" === "string" ? exprString1 : exprBoolean1; // union

View file

@ -75,37 +75,37 @@ condBoolean ? exprString1 : exprBoolean1; // union
//Cond is a boolean type literal
true ? exprAny1 : exprAny2;
>true ? exprAny1 : exprAny2 : any
>true : boolean
>true : true
>exprAny1 : any
>exprAny2 : any
false ? exprBoolean1 : exprBoolean2;
>false ? exprBoolean1 : exprBoolean2 : boolean
>false : boolean
>false : false
>exprBoolean1 : boolean
>exprBoolean2 : boolean
true ? exprNumber1 : exprNumber2;
>true ? exprNumber1 : exprNumber2 : number
>true : boolean
>true : true
>exprNumber1 : number
>exprNumber2 : number
false ? exprString1 : exprString2;
>false ? exprString1 : exprString2 : string
>false : boolean
>false : false
>exprString1 : string
>exprString2 : string
true ? exprIsObject1 : exprIsObject2;
>true ? exprIsObject1 : exprIsObject2 : Object
>true : boolean
>true : true
>exprIsObject1 : Object
>exprIsObject2 : Object
true ? exprString1 : exprBoolean1; // union
>true ? exprString1 : exprBoolean1 : string | boolean
>true : boolean
>true : true
>exprString1 : string
>exprBoolean1 : boolean
@ -113,7 +113,7 @@ true ? exprString1 : exprBoolean1; // union
!true ? exprAny1 : exprAny2;
>!true ? exprAny1 : exprAny2 : any
>!true : boolean
>true : boolean
>true : true
>exprAny1 : any
>exprAny2 : any
@ -121,7 +121,7 @@ typeof "123" == "string" ? exprBoolean1 : exprBoolean2;
>typeof "123" == "string" ? exprBoolean1 : exprBoolean2 : boolean
>typeof "123" == "string" : boolean
>typeof "123" : string
>"123" : string
>"123" : "123"
>"string" : "string"
>exprBoolean1 : boolean
>exprBoolean2 : boolean
@ -129,8 +129,8 @@ typeof "123" == "string" ? exprBoolean1 : exprBoolean2;
2 > 1 ? exprNumber1 : exprNumber2;
>2 > 1 ? exprNumber1 : exprNumber2 : number
>2 > 1 : boolean
>2 : number
>1 : number
>2 : 2
>1 : 1
>exprNumber1 : number
>exprNumber2 : number
@ -145,7 +145,7 @@ null === undefined ? exprString1 : exprString2;
true || false ? exprIsObject1 : exprIsObject2;
>true || false ? exprIsObject1 : exprIsObject2 : Object
>true || false : boolean
>true : boolean
>true : true
>false : false
>exprIsObject1 : Object
>exprIsObject2 : Object
@ -204,49 +204,49 @@ var resultIsStringOrBoolean1 = condBoolean ? exprString1 : exprBoolean1; // unio
var resultIsAny2 = true ? exprAny1 : exprAny2;
>resultIsAny2 : any
>true ? exprAny1 : exprAny2 : any
>true : boolean
>true : true
>exprAny1 : any
>exprAny2 : any
var resultIsBoolean2 = false ? exprBoolean1 : exprBoolean2;
>resultIsBoolean2 : boolean
>false ? exprBoolean1 : exprBoolean2 : boolean
>false : boolean
>false : false
>exprBoolean1 : boolean
>exprBoolean2 : boolean
var resultIsNumber2 = true ? exprNumber1 : exprNumber2;
>resultIsNumber2 : number
>true ? exprNumber1 : exprNumber2 : number
>true : boolean
>true : true
>exprNumber1 : number
>exprNumber2 : number
var resultIsString2 = false ? exprString1 : exprString2;
>resultIsString2 : string
>false ? exprString1 : exprString2 : string
>false : boolean
>false : false
>exprString1 : string
>exprString2 : string
var resultIsObject2 = true ? exprIsObject1 : exprIsObject2;
>resultIsObject2 : Object
>true ? exprIsObject1 : exprIsObject2 : Object
>true : boolean
>true : true
>exprIsObject1 : Object
>exprIsObject2 : Object
var resultIsStringOrBoolean2 = true ? exprString1 : exprBoolean1; // union
>resultIsStringOrBoolean2 : string | boolean
>true ? exprString1 : exprBoolean1 : string | boolean
>true : boolean
>true : true
>exprString1 : string
>exprBoolean1 : boolean
var resultIsStringOrBoolean3 = false ? exprString1 : exprBoolean1; // union
>resultIsStringOrBoolean3 : string | boolean
>false ? exprString1 : exprBoolean1 : string | boolean
>false : boolean
>false : false
>exprString1 : string
>exprBoolean1 : boolean
@ -254,7 +254,7 @@ var resultIsAny3 = !true ? exprAny1 : exprAny2;
>resultIsAny3 : any
>!true ? exprAny1 : exprAny2 : any
>!true : boolean
>true : boolean
>true : true
>exprAny1 : any
>exprAny2 : any
@ -263,7 +263,7 @@ var resultIsBoolean3 = typeof "123" == "string" ? exprBoolean1 : exprBoolean2;
>typeof "123" == "string" ? exprBoolean1 : exprBoolean2 : boolean
>typeof "123" == "string" : boolean
>typeof "123" : string
>"123" : string
>"123" : "123"
>"string" : "string"
>exprBoolean1 : boolean
>exprBoolean2 : boolean
@ -272,8 +272,8 @@ var resultIsNumber3 = 2 > 1 ? exprNumber1 : exprNumber2;
>resultIsNumber3 : number
>2 > 1 ? exprNumber1 : exprNumber2 : number
>2 > 1 : boolean
>2 : number
>1 : number
>2 : 2
>1 : 1
>exprNumber1 : number
>exprNumber2 : number
@ -290,7 +290,7 @@ var resultIsObject3 = true || false ? exprIsObject1 : exprIsObject2;
>resultIsObject3 : Object
>true || false ? exprIsObject1 : exprIsObject2 : Object
>true || false : boolean
>true : boolean
>true : true
>false : false
>exprIsObject1 : Object
>exprIsObject2 : Object
@ -300,7 +300,7 @@ var resultIsStringOrBoolean4 = typeof "123" === "string" ? exprString1 : exprBoo
>typeof "123" === "string" ? exprString1 : exprBoolean1 : string | boolean
>typeof "123" === "string" : boolean
>typeof "123" : string
>"123" : string
>"123" : "123"
>"string" : "string"
>exprString1 : string
>exprBoolean1 : boolean

View file

@ -4,14 +4,12 @@ tests/cases/compiler/constDeclarations-errors.ts(5,7): error TS1155: 'const' dec
tests/cases/compiler/constDeclarations-errors.ts(5,11): error TS1155: 'const' declarations must be initialized
tests/cases/compiler/constDeclarations-errors.ts(5,15): error TS1155: 'const' declarations must be initialized
tests/cases/compiler/constDeclarations-errors.ts(5,27): error TS1155: 'const' declarations must be initialized
tests/cases/compiler/constDeclarations-errors.ts(10,19): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
tests/cases/compiler/constDeclarations-errors.ts(10,27): error TS2540: Cannot assign to 'c8' because it is a constant or a read-only property.
tests/cases/compiler/constDeclarations-errors.ts(13,11): error TS1155: 'const' declarations must be initialized
tests/cases/compiler/constDeclarations-errors.ts(16,20): error TS1155: 'const' declarations must be initialized
tests/cases/compiler/constDeclarations-errors.ts(16,25): error TS2365: Operator '<' cannot be applied to types '0' and '1'.
==== tests/cases/compiler/constDeclarations-errors.ts (11 errors) ====
==== tests/cases/compiler/constDeclarations-errors.ts (9 errors) ====
// error, missing intialicer
const c1;
@ -34,8 +32,6 @@ tests/cases/compiler/constDeclarations-errors.ts(16,25): error TS2365: Operator
// error, assigning to a const
for(const c8 = 0; c8 < 1; c8++) { }
~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
~~
!!! error TS2540: Cannot assign to 'c8' because it is a constant or a read-only property.
@ -47,6 +43,4 @@ tests/cases/compiler/constDeclarations-errors.ts(16,25): error TS2365: Operator
// error, can not be unintalized
for(const c10 = 0, c11; c10 < 1;) { }
~~~
!!! error TS1155: 'const' declarations must be initialized
~~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '1'.
!!! error TS1155: 'const' declarations must be initialized

View file

@ -1,21 +0,0 @@
tests/cases/compiler/constDeclarations-scopes2.ts(9,19): error TS2365: Operator '<' cannot be applied to types '0' and '10'.
==== tests/cases/compiler/constDeclarations-scopes2.ts (1 errors) ====
// global
const c = "string";
var n: number;
var b: boolean;
// for scope
for (const c = 0; c < 10; n = c ) {
~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '10'.
// for block
const c = false;
b = c;
}

View file

@ -2,8 +2,8 @@
// global
const c = "string";
>c : string
>"string" : string
>c : "string"
>"string" : "string"
var n: number;
>n : number
@ -13,24 +13,24 @@ var b: boolean;
// for scope
for (const c = 0; c < 10; n = c ) {
>c : number
>0 : number
>c : 0
>0 : 0
>c < 10 : boolean
>c : number
>10 : number
>n = c : number
>c : 0
>10 : 10
>n = c : 0
>n : number
>c : number
>c : 0
// for block
const c = false;
>c : boolean
>false : boolean
>c : false
>false : false
b = c;
>b = c : boolean
>b = c : false
>b : boolean
>c : boolean
>c : false
}

View file

@ -1,17 +0,0 @@
tests/cases/compiler/constDeclarations.ts(8,19): error TS2365: Operator '<' cannot be applied to types '0' and '9'.
==== tests/cases/compiler/constDeclarations.ts (1 errors) ====
// No error
const c1 = false;
const c2: number = 23;
const c3 = 0, c4 :string = "", c5 = null;
for(const c4 = 0; c4 < 9; ) { break; }
~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '0' and '9'.
for(const c5 = 0, c6 = 0; c5 < c6; ) { break; }

View file

@ -2,36 +2,36 @@
// No error
const c1 = false;
>c1 : boolean
>false : boolean
>c1 : false
>false : false
const c2: number = 23;
>c2 : number
>23 : number
>23 : 23
const c3 = 0, c4 :string = "", c5 = null;
>c3 : number
>0 : number
>c3 : 0
>0 : 0
>c4 : string
>"" : string
>"" : ""
>c5 : any
>null : null
for(const c4 = 0; c4 < 9; ) { break; }
>c4 : number
>0 : number
>c4 : 0
>0 : 0
>c4 < 9 : boolean
>c4 : number
>9 : number
>c4 : 0
>9 : 9
for(const c5 = 0, c6 = 0; c5 < c6; ) { break; }
>c5 : number
>0 : number
>c6 : number
>0 : number
>c5 : 0
>0 : 0
>c6 : 0
>0 : 0
>c5 < c6 : boolean
>c5 : number
>c6 : number
>c5 : 0
>c6 : 0

View file

@ -2,7 +2,7 @@ tests/cases/compiler/duplicateLocalVariable1.ts(2,4): error TS1005: ';' expected
tests/cases/compiler/duplicateLocalVariable1.ts(2,11): error TS1146: Declaration expected.
tests/cases/compiler/duplicateLocalVariable1.ts(2,13): error TS2304: Cannot find name 'commonjs'.
tests/cases/compiler/duplicateLocalVariable1.ts(187,22): error TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'string', but here has type 'number'.
tests/cases/compiler/duplicateLocalVariable1.ts(187,29): error TS2365: Operator '<' cannot be applied to types 'string' and '14'.
tests/cases/compiler/duplicateLocalVariable1.ts(187,29): error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
tests/cases/compiler/duplicateLocalVariable1.ts(187,37): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
@ -203,7 +203,7 @@ tests/cases/compiler/duplicateLocalVariable1.ts(187,37): error TS2356: An arithm
~
!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'string', but here has type 'number'.
~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'string' and '14'.
!!! error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
~
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
bytes.push(fb.readByte());

View file

@ -1,5 +1,5 @@
tests/cases/compiler/duplicateLocalVariable2.ts(27,22): error TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'string', but here has type 'number'.
tests/cases/compiler/duplicateLocalVariable2.ts(27,29): error TS2365: Operator '<' cannot be applied to types 'string' and '14'.
tests/cases/compiler/duplicateLocalVariable2.ts(27,29): error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
tests/cases/compiler/duplicateLocalVariable2.ts(27,37): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
@ -34,7 +34,7 @@ tests/cases/compiler/duplicateLocalVariable2.ts(27,37): error TS2356: An arithme
~
!!! error TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'string', but here has type 'number'.
~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'string' and '14'.
!!! error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
~
!!! error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
bytes.push(fb.readByte());

View file

@ -1,6 +1,6 @@
tests/cases/compiler/grammarAmbiguities1.ts(8,1): error TS2346: Supplied parameters do not match any signature of call target.
tests/cases/compiler/grammarAmbiguities1.ts(8,3): error TS2365: Operator '<' cannot be applied to types '<T, U>(x: any) => any' and 'typeof A'.
tests/cases/compiler/grammarAmbiguities1.ts(8,10): error TS2365: Operator '>' cannot be applied to types 'typeof B' and '7'.
tests/cases/compiler/grammarAmbiguities1.ts(8,10): error TS2365: Operator '>' cannot be applied to types 'typeof B' and 'number'.
tests/cases/compiler/grammarAmbiguities1.ts(9,1): error TS2346: Supplied parameters do not match any signature of call target.
tests/cases/compiler/grammarAmbiguities1.ts(9,3): error TS2365: Operator '<' cannot be applied to types '<T, U>(x: any) => any' and 'typeof A'.
tests/cases/compiler/grammarAmbiguities1.ts(9,10): error TS2365: Operator '>' cannot be applied to types 'typeof B' and 'number'.
@ -20,7 +20,7 @@ tests/cases/compiler/grammarAmbiguities1.ts(9,10): error TS2365: Operator '>' ca
~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '<T, U>(x: any) => any' and 'typeof A'.
~~~~~
!!! error TS2365: Operator '>' cannot be applied to types 'typeof B' and '7'.
!!! error TS2365: Operator '>' cannot be applied to types 'typeof B' and 'number'.
f(g < A, B > +(7));
~~~~~~~~~~~~~~~~~~
!!! error TS2346: Supplied parameters do not match any signature of call target.

View file

@ -1,10 +1,10 @@
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity2.ts(1,1): error TS2365: Operator '>' cannot be applied to types 'boolean' and '2'.
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity2.ts(1,1): error TS2365: Operator '>' cannot be applied to types 'boolean' and 'number'.
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity2.ts(1,5): error TS1109: Expression expected.
==== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity2.ts (2 errors) ====
1 > > 2;
~~~~~~~
!!! error TS2365: Operator '>' cannot be applied to types 'boolean' and '2'.
!!! error TS2365: Operator '>' cannot be applied to types 'boolean' and 'number'.
~
!!! error TS1109: Expression expected.

View file

@ -1,10 +1,10 @@
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity3.ts(1,1): error TS2365: Operator '>' cannot be applied to types 'boolean' and '2'.
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity3.ts(1,1): error TS2365: Operator '>' cannot be applied to types 'boolean' and 'number'.
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity3.ts(1,8): error TS1109: Expression expected.
==== tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity3.ts (2 errors) ====
1 >/**/> 2;
~~~~~~~~~~
!!! error TS2365: Operator '>' cannot be applied to types 'boolean' and '2'.
!!! error TS2365: Operator '>' cannot be applied to types 'boolean' and 'number'.
~
!!! error TS1109: Expression expected.

View file

@ -1,4 +1,4 @@
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity4.ts(1,1): error TS2365: Operator '>' cannot be applied to types 'boolean' and '2'.
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity4.ts(1,1): error TS2365: Operator '>' cannot be applied to types 'boolean' and 'number'.
tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbiguity4.ts(2,1): error TS1109: Expression expected.
@ -7,6 +7,6 @@ tests/cases/conformance/parser/ecmascript5/Generics/parserGreaterThanTokenAmbigu
~~~
> 2;
~~~
!!! error TS2365: Operator '>' cannot be applied to types 'boolean' and '2'.
!!! error TS2365: Operator '>' cannot be applied to types 'boolean' and 'number'.
~
!!! error TS1109: Expression expected.

View file

@ -0,0 +1,40 @@
tests/cases/compiler/relationalOperatorComparable.ts(5,14): error TS2365: Operator '<' cannot be applied to types 'number' and 'boolean'.
tests/cases/compiler/relationalOperatorComparable.ts(6,14): error TS2365: Operator '<=' cannot be applied to types 'number' and 'boolean'.
tests/cases/compiler/relationalOperatorComparable.ts(7,14): error TS2365: Operator '>=' cannot be applied to types 'number' and 'boolean'.
tests/cases/compiler/relationalOperatorComparable.ts(8,14): error TS2365: Operator '>' cannot be applied to types 'number' and 'boolean'.
tests/cases/compiler/relationalOperatorComparable.ts(9,14): error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
tests/cases/compiler/relationalOperatorComparable.ts(10,14): error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
tests/cases/compiler/relationalOperatorComparable.ts(11,14): error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
==== tests/cases/compiler/relationalOperatorComparable.ts (7 errors) ====
function f(onethree: 1 | 3, two: 2) {
const t = true;
const f = false;
let a1 = onethree < two; // ok
let a2 = onethree < true; // error, number and boolean
~~~~~~~~~~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'number' and 'boolean'.
let a3 = onethree <= false; // error, number and boolean
~~~~~~~~~~~~~~~~~
!!! error TS2365: Operator '<=' cannot be applied to types 'number' and 'boolean'.
let a4 = onethree >= t; // error, number and boolean
~~~~~~~~~~~~~
!!! error TS2365: Operator '>=' cannot be applied to types 'number' and 'boolean'.
let a5 = onethree > f; // error, number and boolean
~~~~~~~~~~~~
!!! error TS2365: Operator '>' cannot be applied to types 'number' and 'boolean'.
let a6 = true < onethree; // error, boolean and number
~~~~~~~~~~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
let a7 = false < two; // error, boolean and number
~~~~~~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'boolean' and 'number'.
let a8 = 'foo' < onethree; // error, string and number
~~~~~~~~~~~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types 'string' and 'number'.
let a9 = onethree < 1; // ok
let a10 = 1 < two; // ok
let a11 = 2 < 1; // ok
}

View file

@ -0,0 +1,34 @@
//// [relationalOperatorComparable.ts]
function f(onethree: 1 | 3, two: 2) {
const t = true;
const f = false;
let a1 = onethree < two; // ok
let a2 = onethree < true; // error, number and boolean
let a3 = onethree <= false; // error, number and boolean
let a4 = onethree >= t; // error, number and boolean
let a5 = onethree > f; // error, number and boolean
let a6 = true < onethree; // error, boolean and number
let a7 = false < two; // error, boolean and number
let a8 = 'foo' < onethree; // error, string and number
let a9 = onethree < 1; // ok
let a10 = 1 < two; // ok
let a11 = 2 < 1; // ok
}
//// [relationalOperatorComparable.js]
function f(onethree, two) {
var t = true;
var f = false;
var a1 = onethree < two; // ok
var a2 = onethree < true; // error, number and boolean
var a3 = onethree <= false; // error, number and boolean
var a4 = onethree >= t; // error, number and boolean
var a5 = onethree > f; // error, number and boolean
var a6 = true < onethree; // error, boolean and number
var a7 = false < two; // error, boolean and number
var a8 = 'foo' < onethree; // error, string and number
var a9 = onethree < 1; // ok
var a10 = 1 < two; // ok
var a11 = 2 < 1; // ok
}

View file

@ -7,12 +7,11 @@ tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperato
tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts(13,11): error TS2356: An arithmetic operand must be of type 'any', 'number' or an enum type.
tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts(14,9): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts(15,9): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts(16,9): error TS2365: Operator '<' cannot be applied to types '"ABC"' and '"XYZ"'.
tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts(17,9): error TS2365: Operator '===' cannot be applied to types '"ABC"' and '"XYZ"'.
tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts(18,9): error TS2365: Operator '!=' cannot be applied to types '"ABC"' and '"XYZ"'.
==== tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts (12 errors) ====
==== tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperators02.ts (11 errors) ====
let abc: "ABC" = "ABC";
let xyz: "XYZ" = "XYZ";
@ -47,8 +46,6 @@ tests/cases/conformance/types/stringLiteral/stringLiteralTypesWithVariousOperato
~~~~~~~~~~~~~~~~
!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
let j = abc < xyz;
~~~~~~~~~
!!! error TS2365: Operator '<' cannot be applied to types '"ABC"' and '"XYZ"'.
let k = abc === xyz;
~~~~~~~~~~~
!!! error TS2365: Operator '===' cannot be applied to types '"ABC"' and '"XYZ"'.

View file

@ -0,0 +1,15 @@
function f(onethree: 1 | 3, two: 2) {
const t = true;
const f = false;
let a1 = onethree < two; // ok
let a2 = onethree < true; // error, number and boolean
let a3 = onethree <= false; // error, number and boolean
let a4 = onethree >= t; // error, number and boolean
let a5 = onethree > f; // error, number and boolean
let a6 = true < onethree; // error, boolean and number
let a7 = false < two; // error, boolean and number
let a8 = 'foo' < onethree; // error, string and number
let a9 = onethree < 1; // ok
let a10 = 1 < two; // ok
let a11 = 2 < 1; // ok
}