diff --git a/src/compiler/binder.ts b/src/compiler/binder.ts index 8ff6712ad3..c648a0f583 100644 --- a/src/compiler/binder.ts +++ b/src/compiler/binder.ts @@ -1433,15 +1433,15 @@ namespace ts { } function bindLogicalLikeExpression(node: BinaryExpression, trueTarget: FlowLabel, falseTarget: FlowLabel) { - const preRightLabel = createBranchLabel(); + const preRightLabel = createBranchLabel(); // V if (node.operatorToken.kind === SyntaxKind.AmpersandAmpersandToken || node.operatorToken.kind === SyntaxKind.AmpersandAmpersandEqualsToken) { bindCondition(node.left, preRightLabel, falseTarget); } else { bindCondition(node.left, trueTarget, preRightLabel); } - currentFlow = finishFlowLabel(preRightLabel); - bind(node.operatorToken); + currentFlow = finishFlowLabel(preRightLabel); // V + bind(node.operatorToken); // V if (isLogicalOrCoalescingAssignmentOperator(node.operatorToken.kind)) { doWithConditionalBranches(bind, node.right, trueTarget, falseTarget); @@ -1498,11 +1498,21 @@ namespace ts { } function createBindBinaryExpressionFlow() { + interface LogicalLikeState { + trueTarget: FlowLabel; + falseTarget: FlowLabel; + preRightLabel: FlowLabel; + postExpressionLabel?: FlowLabel; + } + interface WorkArea { stackIndex: number; - skip: boolean; + // skip: boolean; inStrictModeStack: (boolean | undefined)[]; parentStack: (Node | undefined)[]; + currentBranchTargetStack: ([FlowLabel | undefined, FlowLabel | undefined])[]; + logicalStack: (LogicalLikeState | undefined)[]; + isLogicalLike: boolean; } return createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, /*foldState*/ undefined); @@ -1517,70 +1527,139 @@ namespace ts { bindWorker(node); const saveParent = parent; parent = node; - state.skip = false; + // state.skip = false; state.inStrictModeStack[state.stackIndex] = saveInStrictMode; state.parentStack[state.stackIndex] = saveParent; + state.currentBranchTargetStack[state.stackIndex] = [currentTrueTarget, currentFalseTarget]; } else { state = { stackIndex: 0, - skip: false, + // skip: false, inStrictModeStack: [undefined], - parentStack: [undefined] + parentStack: [undefined], + logicalStack: [undefined], + currentBranchTargetStack: [[currentTrueTarget, currentFalseTarget]], + isLogicalLike: false, }; } - // TODO: bindLogicalExpression is recursive - if we want to handle deeply nested `&&` expressions - // we'll need to handle the `bindLogicalExpression` scenarios in this state machine, too - // For now, though, since the common cases are chained `+`, leaving it recursive is fine + const operator = node.operatorToken.kind; if (operator === SyntaxKind.AmpersandAmpersandToken || operator === SyntaxKind.BarBarToken || operator === SyntaxKind.QuestionQuestionToken || isLogicalOrCoalescingAssignmentOperator(operator)) { + state.isLogicalLike = true; + + let logicalState: LogicalLikeState; + const preRightLabel = createBranchLabel(); if (isTopLevelLogicalExpression(node)) { - const postExpressionLabel = createBranchLabel(); - bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel); - currentFlow = finishFlowLabel(postExpressionLabel); + const postExpressionLabel = createBranchLabel(); // >> TODO: we need to set current flow afterwards, at the end of onexit + logicalState = { + preRightLabel, + trueTarget: postExpressionLabel, + falseTarget: postExpressionLabel, + postExpressionLabel, + }; + // bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel); + // currentFlow = finishFlowLabel(postExpressionLabel); // >> TODO: on exit? } else { - bindLogicalLikeExpression(node, currentTrueTarget!, currentFalseTarget!); + logicalState = { + preRightLabel, + trueTarget: currentTrueTarget!, + falseTarget: currentFalseTarget!, + }; } - state.skip = true; + state.logicalStack[state.stackIndex] = logicalState; } + + // TODO: bindLogicalExpression is recursive - if we want to handle deeply nested `&&` expressions + // we'll need to handle the `bindLogicalExpression` scenarios in this state machine, too + // For now, though, since the common cases are chained `+`, leaving it recursive is fine // >> TODO: suspiscious + // const operator = node.operatorToken.kind; + // if (operator === SyntaxKind.AmpersandAmpersandToken || + // operator === SyntaxKind.BarBarToken || + // operator === SyntaxKind.QuestionQuestionToken || + // isLogicalOrCoalescingAssignmentOperator(operator)) { + // if (isTopLevelLogicalExpression(node)) { + // const postExpressionLabel = createBranchLabel(); + // bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel); + // currentFlow = finishFlowLabel(postExpressionLabel); + // } + // else { + // bindLogicalLikeExpression(node, currentTrueTarget!, currentFalseTarget!); + // } + // state.skip = true; + // } return state; } - function onLeft(left: Expression, state: WorkArea, _node: BinaryExpression) { - if (!state.skip) { - return maybeBind(left); + function onLeft(left: Expression, state: WorkArea, node: BinaryExpression) { + if (state.isLogicalLike) { + if (node.operatorToken.kind === SyntaxKind.AmpersandAmpersandToken || + node.operatorToken.kind === SyntaxKind.AmpersandAmpersandEqualsToken) { + currentTrueTarget = state.logicalStack[state.stackIndex]!.preRightLabel; + currentFalseTarget = state.logicalStack[state.stackIndex]!.falseTarget; + } + else { + currentTrueTarget = state.logicalStack[state.stackIndex]!.trueTarget; + currentFalseTarget = state.logicalStack[state.stackIndex]!.preRightLabel; + } } + return maybeBind(left); + // if (!state.skip) { + // return maybeBind(left); + // } } function onOperator(operatorToken: BinaryOperatorToken, state: WorkArea, node: BinaryExpression) { - if (!state.skip) { - if (operatorToken.kind === SyntaxKind.CommaToken) { - maybeBindExpressionFlowIfCall(node.left); + if (state.isLogicalLike) { + if (!isLogicalAssignmentExpression(node) && !isLogicalExpression(node) && !(isOptionalChain(node) && isOutermostOptionalChain(node))) { + addAntecedent(currentTrueTarget!, createFlowCondition(FlowFlags.TrueCondition, currentFlow, node)); + addAntecedent(currentFalseTarget!, createFlowCondition(FlowFlags.FalseCondition, currentFlow, node)); } - bind(operatorToken); + // >> TODO: restore current true and current false right here, to emulate end of `bindCondition` call + currentFlow = finishFlowLabel(state.logicalStack[state.stackIndex]!.preRightLabel); } + else if (operatorToken.kind === SyntaxKind.CommaToken) { + maybeBindExpressionFlowIfCall(node.left); + } + bind(operatorToken); + // if (!state.skip) { + // if (operatorToken.kind === SyntaxKind.CommaToken) { + // maybeBindExpressionFlowIfCall(node.left); + // } + // bind(operatorToken); + // } } - function onRight(right: Expression, state: WorkArea, _node: BinaryExpression) { - if (!state.skip) { - return maybeBind(right); + function onRight(right: Expression, state: WorkArea, node: BinaryExpression) { + if (state.isLogicalLike) { + // >> TODO: do special stuff if assignment operator + currentTrueTarget = state.logicalStack[state.stackIndex]!.trueTarget; + currentFalseTarget = state.logicalStack[state.stackIndex]!.falseTarget; } + return maybeBind(right); + // if (!state.skip) { + // return maybeBind(right); + // } } function onExit(node: BinaryExpression, state: WorkArea) { - if (!state.skip) { - const operator = node.operatorToken.kind; - if (isAssignmentOperator(operator) && !isAssignmentTarget(node)) { - bindAssignmentTargetFlow(node.left); - if (operator === SyntaxKind.EqualsToken && node.left.kind === SyntaxKind.ElementAccessExpression) { - const elementAccess = node.left as ElementAccessExpression; - if (isNarrowableOperand(elementAccess.expression)) { - currentFlow = createFlowMutation(FlowFlags.ArrayMutation, currentFlow, node); - } + const operator = node.operatorToken.kind; + if (state.isLogicalLike) { + const postExpressionLabel = state.logicalStack[state.stackIndex]?.postExpressionLabel; + if (postExpressionLabel) { + currentFlow = finishFlowLabel(postExpressionLabel); + } + } + else if (isAssignmentOperator(operator) && !isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + if (operator === SyntaxKind.EqualsToken && node.left.kind === SyntaxKind.ElementAccessExpression) { + const elementAccess = node.left as ElementAccessExpression; + if (isNarrowableOperand(elementAccess.expression)) { + currentFlow = createFlowMutation(FlowFlags.ArrayMutation, currentFlow, node); } } } @@ -1592,7 +1671,9 @@ namespace ts { if (savedParent !== undefined) { parent = savedParent; } - state.skip = false; + currentTrueTarget = state.currentBranchTargetStack[state.stackIndex][0]; + currentFalseTarget = state.currentBranchTargetStack[state.stackIndex][1]; + state.isLogicalLike = false; state.stackIndex--; } diff --git a/src/compiler/factory/utilities.ts b/src/compiler/factory/utilities.ts index 7daa31c522..dbecd37b79 100644 --- a/src/compiler/factory/utilities.ts +++ b/src/compiler/factory/utilities.ts @@ -1016,7 +1016,15 @@ namespace ts { * @param frame The current frame * @returns The new frame */ - export function enter(machine: BinaryExpressionStateMachine, stackIndex: number, stateStack: BinaryExpressionState[], nodeStack: BinaryExpression[], userStateStack: TState[], _resultHolder: { value: TResult }, outerState: TOuterState): number { + export function enter( + machine: BinaryExpressionStateMachine, + stackIndex: number, + stateStack: BinaryExpressionState[], + nodeStack: BinaryExpression[], + userStateStack: TState[], + _resultHolder: { value: TResult }, + outerState: TOuterState, + ): number { const prevUserState = stackIndex > 0 ? userStateStack[stackIndex - 1] : undefined; Debug.assertEqual(stateStack[stackIndex], enter); userStateStack[stackIndex] = machine.onEnter(nodeStack[stackIndex], prevUserState, outerState); @@ -1030,7 +1038,15 @@ namespace ts { * @param frame The current frame * @returns The new frame */ - export function left(machine: BinaryExpressionStateMachine, stackIndex: number, stateStack: BinaryExpressionState[], nodeStack: BinaryExpression[], userStateStack: TState[], _resultHolder: { value: TResult }, _outerState: TOuterState): number { + export function left( + machine: BinaryExpressionStateMachine, + stackIndex: number, + stateStack: BinaryExpressionState[], + nodeStack: BinaryExpression[], + userStateStack: TState[], + _resultHolder: { value: TResult }, + _outerState: TOuterState, + ): number { Debug.assertEqual(stateStack[stackIndex], left); Debug.assertIsDefined(machine.onLeft); stateStack[stackIndex] = nextState(machine, left); diff --git a/tests/cases/compiler/bigOrExpression.ts b/tests/cases/compiler/bigOrExpression.ts new file mode 100644 index 0000000000..393d60335a --- /dev/null +++ b/tests/cases/compiler/bigOrExpression.ts @@ -0,0 +1,1005 @@ +const record = Math.floor(Math.random() * 1000); +if (record == 1 +|| record == 2 +|| record == 3 +|| record == 4 +|| record == 5 +|| record == 6 +|| record == 7 +|| record == 8 +|| record == 9 +|| record == 10 +|| record == 11 +|| record == 12 +|| record == 13 +|| record == 14 +|| record == 15 +|| record == 16 +|| record == 17 +|| record == 18 +|| record == 19 +|| record == 20 +|| record == 21 +|| record == 22 +|| record == 23 +|| record == 24 +|| record == 25 +|| record == 26 +|| record == 27 +|| record == 28 +|| record == 29 +|| record == 30 +|| record == 31 +|| record == 32 +|| record == 33 +|| record == 34 +|| record == 35 +|| record == 36 +|| record == 37 +|| record == 38 +|| record == 39 +|| record == 40 +|| record == 41 +|| record == 42 +|| record == 43 +|| record == 44 +|| record == 45 +|| record == 46 +|| record == 47 +|| record == 48 +|| record == 49 +|| record == 50 +|| record == 51 +|| record == 52 +|| record == 53 +|| record == 54 +|| record == 55 +|| record == 56 +|| record == 57 +|| record == 58 +|| record == 59 +|| record == 60 +|| record == 61 +|| record == 62 +|| record == 63 +|| record == 64 +|| record == 65 +|| record == 66 +|| record == 67 +|| record == 68 +|| record == 69 +|| record == 70 +|| record == 71 +|| record == 72 +|| record == 73 +|| record == 74 +|| record == 75 +|| record == 76 +|| record == 77 +|| record == 78 +|| record == 79 +|| record == 80 +|| record == 81 +|| record == 82 +|| record == 83 +|| record == 84 +|| record == 85 +|| record == 86 +|| record == 87 +|| record == 88 +|| record == 89 +|| record == 90 +|| record == 91 +|| record == 92 +|| record == 93 +|| record == 94 +|| record == 95 +|| record == 96 +|| record == 97 +|| record == 98 +|| record == 99 +|| record == 100 +|| record == 101 +|| record == 102 +|| record == 103 +|| record == 104 +|| record == 105 +|| record == 106 +|| record == 107 +|| record == 108 +|| record == 109 +|| record == 110 +|| record == 111 +|| record == 112 +|| record == 113 +|| record == 114 +|| record == 115 +|| record == 116 +|| record == 117 +|| record == 118 +|| record == 119 +|| record == 120 +|| record == 121 +|| record == 122 +|| record == 123 +|| record == 124 +|| record == 125 +|| record == 126 +|| record == 127 +|| record == 128 +|| record == 129 +|| record == 130 +|| record == 131 +|| record == 132 +|| record == 133 +|| record == 134 +|| record == 135 +|| record == 136 +|| record == 137 +|| record == 138 +|| record == 139 +|| record == 140 +|| record == 141 +|| record == 142 +|| record == 143 +|| record == 144 +|| record == 145 +|| record == 146 +|| record == 147 +|| record == 148 +|| record == 149 +|| record == 150 +|| record == 151 +|| record == 152 +|| record == 153 +|| record == 154 +|| record == 155 +|| record == 156 +|| record == 157 +|| record == 158 +|| record == 159 +|| record == 160 +|| record == 161 +|| record == 162 +|| record == 163 +|| record == 164 +|| record == 165 +|| record == 166 +|| record == 167 +|| record == 168 +|| record == 169 +|| record == 170 +|| record == 171 +|| record == 172 +|| record == 173 +|| record == 174 +|| record == 175 +|| record == 176 +|| record == 177 +|| record == 178 +|| record == 179 +|| record == 180 +|| record == 181 +|| record == 182 +|| record == 183 +|| record == 184 +|| record == 185 +|| record == 186 +|| record == 187 +|| record == 188 +|| record == 189 +|| record == 190 +|| record == 191 +|| record == 192 +|| record == 193 +|| record == 194 +|| record == 195 +|| record == 196 +|| record == 197 +|| record == 198 +|| record == 199 +|| record == 200 +|| record == 201 +|| record == 202 +|| record == 203 +|| record == 204 +|| record == 205 +|| record == 206 +|| record == 207 +|| record == 208 +|| record == 209 +|| record == 210 +|| record == 211 +|| record == 212 +|| record == 213 +|| record == 214 +|| record == 215 +|| record == 216 +|| record == 217 +|| record == 218 +|| record == 219 +|| record == 220 +|| record == 221 +|| record == 222 +|| record == 223 +|| record == 224 +|| record == 225 +|| record == 226 +|| record == 227 +|| record == 228 +|| record == 229 +|| record == 230 +|| record == 231 +|| record == 232 +|| record == 233 +|| record == 234 +|| record == 235 +|| record == 236 +|| record == 237 +|| record == 238 +|| record == 239 +|| record == 240 +|| record == 241 +|| record == 242 +|| record == 243 +|| record == 244 +|| record == 245 +|| record == 246 +|| record == 247 +|| record == 248 +|| record == 249 +|| record == 250 +|| record == 251 +|| record == 252 +|| record == 253 +|| record == 254 +|| record == 255 +|| record == 256 +|| record == 257 +|| record == 258 +|| record == 259 +|| record == 260 +|| record == 261 +|| record == 262 +|| record == 263 +|| record == 264 +|| record == 265 +|| record == 266 +|| record == 267 +|| record == 268 +|| record == 269 +|| record == 270 +|| record == 271 +|| record == 272 +|| record == 273 +|| record == 274 +|| record == 275 +|| record == 276 +|| record == 277 +|| record == 278 +|| record == 279 +|| record == 280 +|| record == 281 +|| record == 282 +|| record == 283 +|| record == 284 +|| record == 285 +|| record == 286 +|| record == 287 +|| record == 288 +|| record == 289 +|| record == 290 +|| record == 291 +|| record == 292 +|| record == 293 +|| record == 294 +|| record == 295 +|| record == 296 +|| record == 297 +|| record == 298 +|| record == 299 +|| record == 300 +|| record == 301 +|| record == 302 +|| record == 303 +|| record == 304 +|| record == 305 +|| record == 306 +|| record == 307 +|| record == 308 +|| record == 309 +|| record == 310 +|| record == 311 +|| record == 312 +|| record == 313 +|| record == 314 +|| record == 315 +|| record == 316 +|| record == 317 +|| record == 318 +|| record == 319 +|| record == 320 +|| record == 321 +|| record == 322 +|| record == 323 +|| record == 324 +|| record == 325 +|| record == 326 +|| record == 327 +|| record == 328 +|| record == 329 +|| record == 330 +|| record == 331 +|| record == 332 +|| record == 333 +|| record == 334 +|| record == 335 +|| record == 336 +|| record == 337 +|| record == 338 +|| record == 339 +|| record == 340 +|| record == 341 +|| record == 342 +|| record == 343 +|| record == 344 +|| record == 345 +|| record == 346 +|| record == 347 +|| record == 348 +|| record == 349 +|| record == 350 +|| record == 351 +|| record == 352 +|| record == 353 +|| record == 354 +|| record == 355 +|| record == 356 +|| record == 357 +|| record == 358 +|| record == 359 +|| record == 360 +|| record == 361 +|| record == 362 +|| record == 363 +|| record == 364 +|| record == 365 +|| record == 366 +|| record == 367 +|| record == 368 +|| record == 369 +|| record == 370 +|| record == 371 +|| record == 372 +|| record == 373 +|| record == 374 +|| record == 375 +|| record == 376 +|| record == 377 +|| record == 378 +|| record == 379 +|| record == 380 +|| record == 381 +|| record == 382 +|| record == 383 +|| record == 384 +|| record == 385 +|| record == 386 +|| record == 387 +|| record == 388 +|| record == 389 +|| record == 390 +|| record == 391 +|| record == 392 +|| record == 393 +|| record == 394 +|| record == 395 +|| record == 396 +|| record == 397 +|| record == 398 +|| record == 399 +|| record == 400 +|| record == 401 +|| record == 402 +|| record == 403 +|| record == 404 +|| record == 405 +|| record == 406 +|| record == 407 +|| record == 408 +|| record == 409 +|| record == 410 +|| record == 411 +|| record == 412 +|| record == 413 +|| record == 414 +|| record == 415 +|| record == 416 +|| record == 417 +|| record == 418 +|| record == 419 +|| record == 420 +|| record == 421 +|| record == 422 +|| record == 423 +|| record == 424 +|| record == 425 +|| record == 426 +|| record == 427 +|| record == 428 +|| record == 429 +|| record == 430 +|| record == 431 +|| record == 432 +|| record == 433 +|| record == 434 +|| record == 435 +|| record == 436 +|| record == 437 +|| record == 438 +|| record == 439 +|| record == 440 +|| record == 441 +|| record == 442 +|| record == 443 +|| record == 444 +|| record == 445 +|| record == 446 +|| record == 447 +|| record == 448 +|| record == 449 +|| record == 450 +|| record == 451 +|| record == 452 +|| record == 453 +|| record == 454 +|| record == 455 +|| record == 456 +|| record == 457 +|| record == 458 +|| record == 459 +|| record == 460 +|| record == 461 +|| record == 462 +|| record == 463 +|| record == 464 +|| record == 465 +|| record == 466 +|| record == 467 +|| record == 468 +|| record == 469 +|| record == 470 +|| record == 471 +|| record == 472 +|| record == 473 +|| record == 474 +|| record == 475 +|| record == 476 +|| record == 477 +|| record == 478 +|| record == 479 +|| record == 480 +|| record == 481 +|| record == 482 +|| record == 483 +|| record == 484 +|| record == 485 +|| record == 486 +|| record == 487 +|| record == 488 +|| record == 489 +|| record == 490 +|| record == 491 +|| record == 492 +|| record == 493 +|| record == 494 +|| record == 495 +|| record == 496 +|| record == 497 +|| record == 498 +|| record == 499 +|| record == 500 +|| record == 501 +|| record == 502 +|| record == 503 +|| record == 504 +|| record == 505 +|| record == 506 +|| record == 507 +|| record == 508 +|| record == 509 +|| record == 510 +|| record == 511 +|| record == 512 +|| record == 513 +|| record == 514 +|| record == 515 +|| record == 516 +|| record == 517 +|| record == 518 +|| record == 519 +|| record == 520 +|| record == 521 +|| record == 522 +|| record == 523 +|| record == 524 +|| record == 525 +|| record == 526 +|| record == 527 +|| record == 528 +|| record == 529 +|| record == 530 +|| record == 531 +|| record == 532 +|| record == 533 +|| record == 534 +|| record == 535 +|| record == 536 +|| record == 537 +|| record == 538 +|| record == 539 +|| record == 540 +|| record == 541 +|| record == 542 +|| record == 543 +|| record == 544 +|| record == 545 +|| record == 546 +|| record == 547 +|| record == 548 +|| record == 549 +|| record == 550 +|| record == 551 +|| record == 552 +|| record == 553 +|| record == 554 +|| record == 555 +|| record == 556 +|| record == 557 +|| record == 558 +|| record == 559 +|| record == 560 +|| record == 561 +|| record == 562 +|| record == 563 +|| record == 564 +|| record == 565 +|| record == 566 +|| record == 567 +|| record == 568 +|| record == 569 +|| record == 570 +|| record == 571 +|| record == 572 +|| record == 573 +|| record == 574 +|| record == 575 +|| record == 576 +|| record == 577 +|| record == 578 +|| record == 579 +|| record == 580 +|| record == 581 +|| record == 582 +|| record == 583 +|| record == 584 +|| record == 585 +|| record == 586 +|| record == 587 +|| record == 588 +|| record == 589 +|| record == 590 +|| record == 591 +|| record == 592 +|| record == 593 +|| record == 594 +|| record == 595 +|| record == 596 +|| record == 597 +|| record == 598 +|| record == 599 +|| record == 600 +|| record == 601 +|| record == 602 +|| record == 603 +|| record == 604 +|| record == 605 +|| record == 606 +|| record == 607 +|| record == 608 +|| record == 609 +|| record == 610 +|| record == 611 +|| record == 612 +|| record == 613 +|| record == 614 +|| record == 615 +|| record == 616 +|| record == 617 +|| record == 618 +|| record == 619 +|| record == 620 +|| record == 621 +|| record == 622 +|| record == 623 +|| record == 624 +|| record == 625 +|| record == 626 +|| record == 627 +|| record == 628 +|| record == 629 +|| record == 630 +|| record == 631 +|| record == 632 +|| record == 633 +|| record == 634 +|| record == 635 +|| record == 636 +|| record == 637 +|| record == 638 +|| record == 639 +|| record == 640 +|| record == 641 +|| record == 642 +|| record == 643 +|| record == 644 +|| record == 645 +|| record == 646 +|| record == 647 +|| record == 648 +|| record == 649 +|| record == 650 +|| record == 651 +|| record == 652 +|| record == 653 +|| record == 654 +|| record == 655 +|| record == 656 +|| record == 657 +|| record == 658 +|| record == 659 +|| record == 660 +|| record == 661 +|| record == 662 +|| record == 663 +|| record == 664 +|| record == 665 +|| record == 666 +|| record == 667 +|| record == 668 +|| record == 669 +|| record == 670 +|| record == 671 +|| record == 672 +|| record == 673 +|| record == 674 +|| record == 675 +|| record == 676 +|| record == 677 +|| record == 678 +|| record == 679 +|| record == 680 +|| record == 681 +|| record == 682 +|| record == 683 +|| record == 684 +|| record == 685 +|| record == 686 +|| record == 687 +|| record == 688 +|| record == 689 +|| record == 690 +|| record == 691 +|| record == 692 +|| record == 693 +|| record == 694 +|| record == 695 +|| record == 696 +|| record == 697 +|| record == 698 +|| record == 699 +|| record == 700 +|| record == 701 +|| record == 702 +|| record == 703 +|| record == 704 +|| record == 705 +|| record == 706 +|| record == 707 +|| record == 708 +|| record == 709 +|| record == 710 +|| record == 711 +|| record == 712 +|| record == 713 +|| record == 714 +|| record == 715 +|| record == 716 +|| record == 717 +|| record == 718 +|| record == 719 +|| record == 720 +|| record == 721 +|| record == 722 +|| record == 723 +|| record == 724 +|| record == 725 +|| record == 726 +|| record == 727 +|| record == 728 +|| record == 729 +|| record == 730 +|| record == 731 +|| record == 732 +|| record == 733 +|| record == 734 +|| record == 735 +|| record == 736 +|| record == 737 +|| record == 738 +|| record == 739 +|| record == 740 +|| record == 741 +|| record == 742 +|| record == 743 +|| record == 744 +|| record == 745 +|| record == 746 +|| record == 747 +|| record == 748 +|| record == 749 +|| record == 750 +|| record == 751 +|| record == 752 +|| record == 753 +|| record == 754 +|| record == 755 +|| record == 756 +|| record == 757 +|| record == 758 +|| record == 759 +|| record == 760 +|| record == 761 +|| record == 762 +|| record == 763 +|| record == 764 +|| record == 765 +|| record == 766 +|| record == 767 +|| record == 768 +|| record == 769 +|| record == 770 +|| record == 771 +|| record == 772 +|| record == 773 +|| record == 774 +|| record == 775 +|| record == 776 +|| record == 777 +|| record == 778 +|| record == 779 +|| record == 780 +|| record == 781 +|| record == 782 +|| record == 783 +|| record == 784 +|| record == 785 +|| record == 786 +|| record == 787 +|| record == 788 +|| record == 789 +|| record == 790 +|| record == 791 +|| record == 792 +|| record == 793 +|| record == 794 +|| record == 795 +|| record == 796 +|| record == 797 +|| record == 798 +|| record == 799 +|| record == 800 +|| record == 801 +|| record == 802 +|| record == 803 +|| record == 804 +|| record == 805 +|| record == 806 +|| record == 807 +|| record == 808 +|| record == 809 +|| record == 810 +|| record == 811 +|| record == 812 +|| record == 813 +|| record == 814 +|| record == 815 +|| record == 816 +|| record == 817 +|| record == 818 +|| record == 819 +|| record == 820 +|| record == 821 +|| record == 822 +|| record == 823 +|| record == 824 +|| record == 825 +|| record == 826 +|| record == 827 +|| record == 828 +|| record == 829 +|| record == 830 +|| record == 831 +|| record == 832 +|| record == 833 +|| record == 834 +|| record == 835 +|| record == 836 +|| record == 837 +|| record == 838 +|| record == 839 +|| record == 840 +|| record == 841 +|| record == 842 +|| record == 843 +|| record == 844 +|| record == 845 +|| record == 846 +|| record == 847 +|| record == 848 +|| record == 849 +|| record == 850 +|| record == 851 +|| record == 852 +|| record == 853 +|| record == 854 +|| record == 855 +|| record == 856 +|| record == 857 +|| record == 858 +|| record == 859 +|| record == 860 +|| record == 861 +|| record == 862 +|| record == 863 +|| record == 864 +|| record == 865 +|| record == 866 +|| record == 867 +|| record == 868 +|| record == 869 +|| record == 870 +|| record == 871 +|| record == 872 +|| record == 873 +|| record == 874 +|| record == 875 +|| record == 876 +|| record == 877 +|| record == 878 +|| record == 879 +|| record == 880 +|| record == 881 +|| record == 882 +|| record == 883 +|| record == 884 +|| record == 885 +|| record == 886 +|| record == 887 +|| record == 888 +|| record == 889 +|| record == 890 +|| record == 891 +|| record == 892 +|| record == 893 +|| record == 894 +|| record == 895 +|| record == 896 +|| record == 897 +|| record == 898 +|| record == 899 +|| record == 900 +|| record == 901 +|| record == 902 +|| record == 903 +|| record == 904 +|| record == 905 +|| record == 906 +|| record == 907 +|| record == 908 +|| record == 909 +|| record == 910 +|| record == 911 +|| record == 912 +|| record == 913 +|| record == 914 +|| record == 915 +|| record == 916 +|| record == 917 +|| record == 918 +|| record == 919 +|| record == 920 +|| record == 921 +|| record == 922 +|| record == 923 +|| record == 924 +|| record == 925 +|| record == 926 +|| record == 927 +|| record == 928 +|| record == 929 +|| record == 930 +|| record == 931 +|| record == 932 +|| record == 933 +|| record == 934 +|| record == 935 +|| record == 936 +|| record == 937 +|| record == 938 +|| record == 939 +|| record == 940 +|| record == 941 +|| record == 942 +|| record == 943 +|| record == 944 +|| record == 945 +|| record == 946 +|| record == 947 +|| record == 948 +|| record == 949 +|| record == 950 +|| record == 951 +|| record == 952 +|| record == 953 +|| record == 954 +|| record == 955 +|| record == 956 +|| record == 957 +|| record == 958 +|| record == 959 +|| record == 960 +|| record == 961 +|| record == 962 +|| record == 963 +|| record == 964 +|| record == 965 +|| record == 966 +|| record == 967 +|| record == 968 +|| record == 969 +|| record == 970 +|| record == 971 +|| record == 972 +|| record == 973 +|| record == 974 +|| record == 975 +|| record == 976 +|| record == 977 +|| record == 978 +|| record == 979 +|| record == 980 +|| record == 981 +|| record == 982 +|| record == 983 +|| record == 984 +|| record == 985 +|| record == 986 +|| record == 987 +|| record == 988 +|| record == 989 +|| record == 990 +|| record == 991 +|| record == 992 +|| record == 993 +|| record == 994 +|| record == 995 +|| record == 996 +|| record == 997 +|| record == 998 +|| record == 999 +|| record == 1000 +) + console.log('true'); +else + console.log('false'); diff --git a/tests/cases/compiler/bigOrExpressionTemp.ts b/tests/cases/compiler/bigOrExpressionTemp.ts new file mode 100644 index 0000000000..83248f58c1 --- /dev/null +++ b/tests/cases/compiler/bigOrExpressionTemp.ts @@ -0,0 +1 @@ +const x = "a" + "b" + "c" + "d" + "e" + "f" + "g"; \ No newline at end of file