diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 7becc4a2f78c6..7a9b0501c9464 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -540,7 +540,8 @@ namespace ts { let flowLoopStart = 0; let flowLoopCount = 0; let sharedFlowCount = 0; - let flowAnalysisDisabled = false; + let flowNodeCount = -1; + let flowAnalysisErrors = false; const emptyStringType = getLiteralType(""); const zeroType = getLiteralType(0); @@ -15949,17 +15950,14 @@ namespace ts { return false; } - function reportFlowControlError(node: Node) { - const block = findAncestor(node, isFunctionOrModuleBlock); - const sourceFile = getSourceFileOfNode(node); - const span = getSpanOfTokenAtPosition(sourceFile, block.statements.pos); - diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.The_containing_function_or_module_body_is_too_large_for_control_flow_analysis)); + function getContainingBlock(node: Node) { + return findAncestor(node, isFunctionOrModuleBlock); } function getFlowTypeOfReference(reference: Node, declaredType: Type, initialType = declaredType, flowContainer?: Node, couldBeUninitialized?: boolean) { let key: string | undefined; let flowDepth = 0; - if (flowAnalysisDisabled) { + if (flowAnalysisErrors && getNodeLinks(getContainingBlock(reference)).flags & NodeCheckFlags.FlowAnalysisError) { return errorType; } if (!reference.flowNode || !couldBeUninitialized && !(declaredType.flags & TypeFlags.Narrowable)) { @@ -15979,14 +15977,23 @@ namespace ts { return resultType; function getTypeAtFlowNode(flow: FlowNode): FlowType { - if (flowDepth === 2000) { - // We have made 2000 recursive invocations. To avoid overflowing the call stack we report an error - // and disable further control flow analysis in the containing function or module body. - flowAnalysisDisabled = true; - reportFlowControlError(reference); + if (flowDepth === 2000 || flowNodeCount === 500000) { + // We have made 2000 recursive invocations or visited 500000 control flow nodes while analyzing + // the containing function or module body, the limit at which we consider the function or module + // body is too complex and disable further control flow analysis. + const block = getContainingBlock(reference); + const nodeLinks = getNodeLinks(block); + if (!(nodeLinks.flags & NodeCheckFlags.FlowAnalysisError)) { + nodeLinks.flags |= NodeCheckFlags.FlowAnalysisError; + const sourceFile = getSourceFileOfNode(block); + const span = getSpanOfTokenAtPosition(sourceFile, block.statements.pos); + diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.The_containing_function_or_module_body_is_too_complex_for_control_flow_analysis)); + flowAnalysisErrors = true; + } return errorType; } flowDepth++; + if (flowNodeCount >= 0) flowNodeCount++; while (true) { const flags = flow.flags; if (flags & FlowFlags.Shared) { @@ -26026,9 +26033,10 @@ namespace ts { checkGrammarStatementInAmbientContext(node); } if (isFunctionOrModuleBlock(node)) { - const saveFlowAnalysisDisabled = flowAnalysisDisabled; + const saveFlowNodeCount = flowNodeCount; + flowNodeCount = 0; forEach(node.statements, checkSourceElement); - flowAnalysisDisabled = saveFlowAnalysisDisabled; + flowNodeCount = saveFlowNodeCount; } else { forEach(node.statements, checkSourceElement); @@ -28861,7 +28869,9 @@ namespace ts { function checkSourceFile(node: SourceFile) { performance.mark("beforeCheck"); + flowNodeCount = 0; checkSourceFileWorker(node); + flowNodeCount = -1; performance.mark("afterCheck"); performance.measure("Check", "beforeCheck", "afterCheck"); } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 7717f51bd50fe..a04b76421cc02 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2044,7 +2044,7 @@ "category": "Error", "code": 2562 }, - "The containing function or module body is too large for control flow analysis.": { + "The containing function or module body is too complex for control flow analysis.": { "category": "Error", "code": 2563 }, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 23d72875e4f1b..57d53ad0ed7f1 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3855,6 +3855,7 @@ namespace ts { AssignmentsMarked = 0x00800000, // Parameter assignments have been marked ClassWithConstructorReference = 0x01000000, // Class that contains a binding to its constructor inside of the class body. ConstructorReferenceInClass = 0x02000000, // Binding to a class constructor inside of the class's body. + FlowAnalysisError = 0x04000000, // Control flow analysis error in this block } /* @internal */ diff --git a/tests/baselines/reference/complexControlFlowGraph.errors.txt b/tests/baselines/reference/complexControlFlowGraph.errors.txt new file mode 100644 index 0000000000000..c87da54be16ed --- /dev/null +++ b/tests/baselines/reference/complexControlFlowGraph.errors.txt @@ -0,0 +1,163 @@ +tests/cases/compiler/complexControlFlowGraph.ts(4,3): error TS2563: The containing function or module body is too complex for control flow analysis. + + +==== tests/cases/compiler/complexControlFlowGraph.ts (1 errors) ==== + // Repro from #29926 + + const foo = function (this: any) { + var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; + ~~~ +!!! error TS2563: The containing function or module body is too complex for control flow analysis. + + if (this.first) { + a = blocks[0] - 1; + a = (a << 3) | (a >>> 29); + d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; + d = (d << 7) | (d >>> 25); + c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; + c = (c << 11) | (c >>> 21); + b = ((c & d) | (~c & a)) + blocks[3] - 271733879; + b = (b << 19) | (b >>> 13); + } else { + a = this.h0; + b = this.h1; + c = this.h2; + d = this.h3; + a += ((b & c) | (~b & d)) + blocks[0]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[1]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[2]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[3]; + b = (b << 19) | (b >>> 13); + } + + a += ((b & c) | (~b & d)) + blocks[4]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[5]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[6]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[7]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[8]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[9]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[10]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[11]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[12]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[13]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[14]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[15]; + b = (b << 19) | (b >>> 13); + + bc = b & c; + a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[4] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[8] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[12] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[1] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[5] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[9] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[13] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[2] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[6] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[10] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[14] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[3] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[7] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[11] + 1518500249; + c = (c << 9) | (c >>> 23); + b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; + b = (b << 13) | (b >>> 19); + + bc = b ^ c; + a += (bc ^ d) + blocks[0] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[8] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[4] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[12] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[2] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[10] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[6] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[14] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[1] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[9] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[5] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[13] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[3] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[11] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[7] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[15] + 1859775393; + b = (b << 15) | (b >>> 17); + + if (this.first) { + this.h0 = a + 1732584193 << 0; + this.h1 = b - 271733879 << 0; + this.h2 = c - 1732584194 << 0; + this.h3 = d + 271733878 << 0; + this.first = false; + } else { + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + } + }; + \ No newline at end of file diff --git a/tests/baselines/reference/complexControlFlowGraph.js b/tests/baselines/reference/complexControlFlowGraph.js new file mode 100644 index 0000000000000..16d3731e28150 --- /dev/null +++ b/tests/baselines/reference/complexControlFlowGraph.js @@ -0,0 +1,313 @@ +//// [complexControlFlowGraph.ts] +// Repro from #29926 + +const foo = function (this: any) { + var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; + + if (this.first) { + a = blocks[0] - 1; + a = (a << 3) | (a >>> 29); + d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; + d = (d << 7) | (d >>> 25); + c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; + c = (c << 11) | (c >>> 21); + b = ((c & d) | (~c & a)) + blocks[3] - 271733879; + b = (b << 19) | (b >>> 13); + } else { + a = this.h0; + b = this.h1; + c = this.h2; + d = this.h3; + a += ((b & c) | (~b & d)) + blocks[0]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[1]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[2]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[3]; + b = (b << 19) | (b >>> 13); + } + + a += ((b & c) | (~b & d)) + blocks[4]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[5]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[6]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[7]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[8]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[9]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[10]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[11]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[12]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[13]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[14]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[15]; + b = (b << 19) | (b >>> 13); + + bc = b & c; + a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[4] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[8] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[12] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[1] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[5] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[9] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[13] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[2] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[6] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[10] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[14] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[3] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[7] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[11] + 1518500249; + c = (c << 9) | (c >>> 23); + b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; + b = (b << 13) | (b >>> 19); + + bc = b ^ c; + a += (bc ^ d) + blocks[0] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[8] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[4] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[12] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[2] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[10] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[6] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[14] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[1] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[9] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[5] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[13] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[3] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[11] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[7] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[15] + 1859775393; + b = (b << 15) | (b >>> 17); + + if (this.first) { + this.h0 = a + 1732584193 << 0; + this.h1 = b - 271733879 << 0; + this.h2 = c - 1732584194 << 0; + this.h3 = d + 271733878 << 0; + this.first = false; + } else { + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + } +}; + + +//// [complexControlFlowGraph.js] +"use strict"; +// Repro from #29926 +var foo = function () { + var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; + if (this.first) { + a = blocks[0] - 1; + a = (a << 3) | (a >>> 29); + d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; + d = (d << 7) | (d >>> 25); + c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; + c = (c << 11) | (c >>> 21); + b = ((c & d) | (~c & a)) + blocks[3] - 271733879; + b = (b << 19) | (b >>> 13); + } + else { + a = this.h0; + b = this.h1; + c = this.h2; + d = this.h3; + a += ((b & c) | (~b & d)) + blocks[0]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[1]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[2]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[3]; + b = (b << 19) | (b >>> 13); + } + a += ((b & c) | (~b & d)) + blocks[4]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[5]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[6]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[7]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[8]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[9]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[10]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[11]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[12]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[13]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[14]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[15]; + b = (b << 19) | (b >>> 13); + bc = b & c; + a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[4] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[8] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[12] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[1] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[5] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[9] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[13] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[2] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[6] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[10] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[14] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[3] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[7] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[11] + 1518500249; + c = (c << 9) | (c >>> 23); + b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b ^ c; + a += (bc ^ d) + blocks[0] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[8] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[4] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[12] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[2] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[10] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[6] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[14] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[1] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[9] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[5] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[13] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[3] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[11] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[7] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[15] + 1859775393; + b = (b << 15) | (b >>> 17); + if (this.first) { + this.h0 = a + 1732584193 << 0; + this.h1 = b - 271733879 << 0; + this.h2 = c - 1732584194 << 0; + this.h3 = d + 271733878 << 0; + this.first = false; + } + else { + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + } +}; diff --git a/tests/baselines/reference/complexControlFlowGraph.symbols b/tests/baselines/reference/complexControlFlowGraph.symbols new file mode 100644 index 0000000000000..a7449a3cb81a7 --- /dev/null +++ b/tests/baselines/reference/complexControlFlowGraph.symbols @@ -0,0 +1,839 @@ +=== tests/cases/compiler/complexControlFlowGraph.ts === +// Repro from #29926 + +const foo = function (this: any) { +>foo : Symbol(foo, Decl(complexControlFlowGraph.ts, 2, 5)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + if (this.first) { +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + a = blocks[0] - 1; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 7) | (d >>> 25); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b = ((c & d) | (~c & a)) + blocks[3] - 271733879; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 19) | (b >>> 13); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + } else { + a = this.h0; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + b = this.h1; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + c = this.h2; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + d = this.h3; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + a += ((b & c) | (~b & d)) + blocks[0]; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += ((a & b) | (~a & c)) + blocks[1]; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 7) | (d >>> 25); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + c += ((d & a) | (~d & b)) + blocks[2]; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += ((c & d) | (~c & a)) + blocks[3]; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 19) | (b >>> 13); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + } + + a += ((b & c) | (~b & d)) + blocks[4]; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += ((a & b) | (~a & c)) + blocks[5]; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 7) | (d >>> 25); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + c += ((d & a) | (~d & b)) + blocks[6]; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += ((c & d) | (~c & a)) + blocks[7]; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 19) | (b >>> 13); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + a += ((b & c) | (~b & d)) + blocks[8]; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += ((a & b) | (~a & c)) + blocks[9]; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 7) | (d >>> 25); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + c += ((d & a) | (~d & b)) + blocks[10]; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += ((c & d) | (~c & a)) + blocks[11]; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 19) | (b >>> 13); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + a += ((b & c) | (~b & d)) + blocks[12]; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += ((a & b) | (~a & c)) + blocks[13]; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 7) | (d >>> 25); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + c += ((d & a) | (~d & b)) + blocks[14]; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += ((c & d) | (~c & a)) + blocks[15]; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 19) | (b >>> 13); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b & c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + ab = a & b; +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + d += (ab | (a & c) | bc) + blocks[4] + 1518500249; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 5) | (d >>> 27); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d & a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da | (d & b) | ab) + blocks[8] + 1518500249; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 9) | (c >>> 23); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + cd = c & d; +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + b += (cd | (c & a) | da) + blocks[12] + 1518500249; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 13) | (b >>> 19); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b & c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc | (b & d) | cd) + blocks[1] + 1518500249; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + ab = a & b; +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + d += (ab | (a & c) | bc) + blocks[5] + 1518500249; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 5) | (d >>> 27); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d & a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da | (d & b) | ab) + blocks[9] + 1518500249; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 9) | (c >>> 23); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + cd = c & d; +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + b += (cd | (c & a) | da) + blocks[13] + 1518500249; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 13) | (b >>> 19); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b & c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc | (b & d) | cd) + blocks[2] + 1518500249; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + ab = a & b; +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + d += (ab | (a & c) | bc) + blocks[6] + 1518500249; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 5) | (d >>> 27); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d & a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da | (d & b) | ab) + blocks[10] + 1518500249; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 9) | (c >>> 23); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + cd = c & d; +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + b += (cd | (c & a) | da) + blocks[14] + 1518500249; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 13) | (b >>> 19); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b & c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc | (b & d) | cd) + blocks[3] + 1518500249; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>cd : Symbol(cd, Decl(complexControlFlowGraph.ts, 3, 25)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + ab = a & b; +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + d += (ab | (a & c) | bc) + blocks[7] + 1518500249; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 5) | (d >>> 27); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d & a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da | (d & b) | ab) + blocks[11] + 1518500249; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>ab : Symbol(ab, Decl(complexControlFlowGraph.ts, 3, 17)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 9) | (c >>> 23); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 13) | (b >>> 19); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b ^ c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc ^ d) + blocks[0] + 1859775393; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += (bc ^ a) + blocks[8] + 1859775393; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 9) | (d >>> 23); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d ^ a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da ^ b) + blocks[4] + 1859775393; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += (da ^ c) + blocks[12] + 1859775393; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 15) | (b >>> 17); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b ^ c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc ^ d) + blocks[2] + 1859775393; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += (bc ^ a) + blocks[10] + 1859775393; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 9) | (d >>> 23); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d ^ a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da ^ b) + blocks[6] + 1859775393; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += (da ^ c) + blocks[14] + 1859775393; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 15) | (b >>> 17); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b ^ c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc ^ d) + blocks[1] + 1859775393; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += (bc ^ a) + blocks[9] + 1859775393; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 9) | (d >>> 23); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d ^ a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da ^ b) + blocks[5] + 1859775393; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += (da ^ c) + blocks[13] + 1859775393; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 15) | (b >>> 17); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + bc = b ^ c; +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + a += (bc ^ d) + blocks[3] + 1859775393; +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + a = (a << 3) | (a >>> 29); +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + d += (bc ^ a) + blocks[11] + 1859775393; +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>bc : Symbol(bc, Decl(complexControlFlowGraph.ts, 3, 21)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + d = (d << 9) | (d >>> 23); +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + da = d ^ a; +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + c += (da ^ b) + blocks[7] + 1859775393; +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + c = (c << 11) | (c >>> 21); +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + b += (da ^ c) + blocks[15] + 1859775393; +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>da : Symbol(da, Decl(complexControlFlowGraph.ts, 3, 29)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) +>blocks : Symbol(blocks, Decl(complexControlFlowGraph.ts, 3, 33)) + + b = (b << 15) | (b >>> 17); +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + if (this.first) { +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + this.h0 = a + 1732584193 << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + this.h1 = b - 271733879 << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + this.h2 = c - 1732584194 << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + this.h3 = d + 271733878 << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + + this.first = false; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) + + } else { + this.h0 = this.h0 + a << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>a : Symbol(a, Decl(complexControlFlowGraph.ts, 3, 5)) + + this.h1 = this.h1 + b << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>b : Symbol(b, Decl(complexControlFlowGraph.ts, 3, 8)) + + this.h2 = this.h2 + c << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>c : Symbol(c, Decl(complexControlFlowGraph.ts, 3, 11)) + + this.h3 = this.h3 + d << 0; +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>this : Symbol(this, Decl(complexControlFlowGraph.ts, 2, 22)) +>d : Symbol(d, Decl(complexControlFlowGraph.ts, 3, 14)) + } +}; + diff --git a/tests/baselines/reference/complexControlFlowGraph.types b/tests/baselines/reference/complexControlFlowGraph.types new file mode 100644 index 0000000000000..46da0bbe62b38 --- /dev/null +++ b/tests/baselines/reference/complexControlFlowGraph.types @@ -0,0 +1,1915 @@ +=== tests/cases/compiler/complexControlFlowGraph.ts === +// Repro from #29926 + +const foo = function (this: any) { +>foo : (this: any) => void +>function (this: any) { var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; if (this.first) { a = blocks[0] - 1; a = (a << 3) | (a >>> 29); d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; d = (d << 7) | (d >>> 25); c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; c = (c << 11) | (c >>> 21); b = ((c & d) | (~c & a)) + blocks[3] - 271733879; b = (b << 19) | (b >>> 13); } else { a = this.h0; b = this.h1; c = this.h2; d = this.h3; a += ((b & c) | (~b & d)) + blocks[0]; a = (a << 3) | (a >>> 29); d += ((a & b) | (~a & c)) + blocks[1]; d = (d << 7) | (d >>> 25); c += ((d & a) | (~d & b)) + blocks[2]; c = (c << 11) | (c >>> 21); b += ((c & d) | (~c & a)) + blocks[3]; b = (b << 19) | (b >>> 13); } a += ((b & c) | (~b & d)) + blocks[4]; a = (a << 3) | (a >>> 29); d += ((a & b) | (~a & c)) + blocks[5]; d = (d << 7) | (d >>> 25); c += ((d & a) | (~d & b)) + blocks[6]; c = (c << 11) | (c >>> 21); b += ((c & d) | (~c & a)) + blocks[7]; b = (b << 19) | (b >>> 13); a += ((b & c) | (~b & d)) + blocks[8]; a = (a << 3) | (a >>> 29); d += ((a & b) | (~a & c)) + blocks[9]; d = (d << 7) | (d >>> 25); c += ((d & a) | (~d & b)) + blocks[10]; c = (c << 11) | (c >>> 21); b += ((c & d) | (~c & a)) + blocks[11]; b = (b << 19) | (b >>> 13); a += ((b & c) | (~b & d)) + blocks[12]; a = (a << 3) | (a >>> 29); d += ((a & b) | (~a & c)) + blocks[13]; d = (d << 7) | (d >>> 25); c += ((d & a) | (~d & b)) + blocks[14]; c = (c << 11) | (c >>> 21); b += ((c & d) | (~c & a)) + blocks[15]; b = (b << 19) | (b >>> 13); bc = b & c; a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; a = (a << 3) | (a >>> 29); ab = a & b; d += (ab | (a & c) | bc) + blocks[4] + 1518500249; d = (d << 5) | (d >>> 27); da = d & a; c += (da | (d & b) | ab) + blocks[8] + 1518500249; c = (c << 9) | (c >>> 23); cd = c & d; b += (cd | (c & a) | da) + blocks[12] + 1518500249; b = (b << 13) | (b >>> 19); bc = b & c; a += (bc | (b & d) | cd) + blocks[1] + 1518500249; a = (a << 3) | (a >>> 29); ab = a & b; d += (ab | (a & c) | bc) + blocks[5] + 1518500249; d = (d << 5) | (d >>> 27); da = d & a; c += (da | (d & b) | ab) + blocks[9] + 1518500249; c = (c << 9) | (c >>> 23); cd = c & d; b += (cd | (c & a) | da) + blocks[13] + 1518500249; b = (b << 13) | (b >>> 19); bc = b & c; a += (bc | (b & d) | cd) + blocks[2] + 1518500249; a = (a << 3) | (a >>> 29); ab = a & b; d += (ab | (a & c) | bc) + blocks[6] + 1518500249; d = (d << 5) | (d >>> 27); da = d & a; c += (da | (d & b) | ab) + blocks[10] + 1518500249; c = (c << 9) | (c >>> 23); cd = c & d; b += (cd | (c & a) | da) + blocks[14] + 1518500249; b = (b << 13) | (b >>> 19); bc = b & c; a += (bc | (b & d) | cd) + blocks[3] + 1518500249; a = (a << 3) | (a >>> 29); ab = a & b; d += (ab | (a & c) | bc) + blocks[7] + 1518500249; d = (d << 5) | (d >>> 27); da = d & a; c += (da | (d & b) | ab) + blocks[11] + 1518500249; c = (c << 9) | (c >>> 23); b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; b = (b << 13) | (b >>> 19); bc = b ^ c; a += (bc ^ d) + blocks[0] + 1859775393; a = (a << 3) | (a >>> 29); d += (bc ^ a) + blocks[8] + 1859775393; d = (d << 9) | (d >>> 23); da = d ^ a; c += (da ^ b) + blocks[4] + 1859775393; c = (c << 11) | (c >>> 21); b += (da ^ c) + blocks[12] + 1859775393; b = (b << 15) | (b >>> 17); bc = b ^ c; a += (bc ^ d) + blocks[2] + 1859775393; a = (a << 3) | (a >>> 29); d += (bc ^ a) + blocks[10] + 1859775393; d = (d << 9) | (d >>> 23); da = d ^ a; c += (da ^ b) + blocks[6] + 1859775393; c = (c << 11) | (c >>> 21); b += (da ^ c) + blocks[14] + 1859775393; b = (b << 15) | (b >>> 17); bc = b ^ c; a += (bc ^ d) + blocks[1] + 1859775393; a = (a << 3) | (a >>> 29); d += (bc ^ a) + blocks[9] + 1859775393; d = (d << 9) | (d >>> 23); da = d ^ a; c += (da ^ b) + blocks[5] + 1859775393; c = (c << 11) | (c >>> 21); b += (da ^ c) + blocks[13] + 1859775393; b = (b << 15) | (b >>> 17); bc = b ^ c; a += (bc ^ d) + blocks[3] + 1859775393; a = (a << 3) | (a >>> 29); d += (bc ^ a) + blocks[11] + 1859775393; d = (d << 9) | (d >>> 23); da = d ^ a; c += (da ^ b) + blocks[7] + 1859775393; c = (c << 11) | (c >>> 21); b += (da ^ c) + blocks[15] + 1859775393; b = (b << 15) | (b >>> 17); if (this.first) { this.h0 = a + 1732584193 << 0; this.h1 = b - 271733879 << 0; this.h2 = c - 1732584194 << 0; this.h3 = d + 271733878 << 0; this.first = false; } else { this.h0 = this.h0 + a << 0; this.h1 = this.h1 + b << 0; this.h2 = this.h2 + c << 0; this.h3 = this.h3 + d << 0; }} : (this: any) => void +>this : any + + var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; +>a : any +>b : any +>c : any +>d : any +>ab : any +>bc : any +>cd : any +>da : any +>blocks : any +>this.blocks : any +>this : any +>blocks : any + + if (this.first) { +>this.first : any +>this : any +>first : any + + a = blocks[0] - 1; +>a = blocks[0] - 1 : number +>a : any +>blocks[0] - 1 : number +>blocks[0] : any +>blocks : any +>0 : 0 +>1 : 1 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; +>d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878 : any +>d : any +>((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878 : any +>((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] : any +>((a & 0xefcdab89) | (~a & 0x98badcfe)) : number +>(a & 0xefcdab89) | (~a & 0x98badcfe) : number +>(a & 0xefcdab89) : number +>a & 0xefcdab89 : number +>a : any +>0xefcdab89 : 4023233417 +>(~a & 0x98badcfe) : number +>~a & 0x98badcfe : number +>~a : number +>a : any +>0x98badcfe : 2562383102 +>blocks[1] : any +>blocks : any +>1 : 1 +>271733878 : 271733878 + + d = (d << 7) | (d >>> 25); +>d = (d << 7) | (d >>> 25) : number +>d : any +>(d << 7) | (d >>> 25) : number +>(d << 7) : number +>d << 7 : number +>d : any +>7 : 7 +>(d >>> 25) : number +>d >>> 25 : number +>d : any +>25 : 25 + + c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; +>c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194 : number +>c : any +>((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194 : number +>((d & a) | (~d & 0xefcdab89)) + blocks[2] : any +>((d & a) | (~d & 0xefcdab89)) : number +>(d & a) | (~d & 0xefcdab89) : number +>(d & a) : number +>d & a : number +>d : any +>a : any +>(~d & 0xefcdab89) : number +>~d & 0xefcdab89 : number +>~d : number +>d : any +>0xefcdab89 : 4023233417 +>blocks[2] : any +>blocks : any +>2 : 2 +>1732584194 : 1732584194 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b = ((c & d) | (~c & a)) + blocks[3] - 271733879; +>b = ((c & d) | (~c & a)) + blocks[3] - 271733879 : number +>b : any +>((c & d) | (~c & a)) + blocks[3] - 271733879 : number +>((c & d) | (~c & a)) + blocks[3] : any +>((c & d) | (~c & a)) : number +>(c & d) | (~c & a) : number +>(c & d) : number +>c & d : number +>c : any +>d : any +>(~c & a) : number +>~c & a : number +>~c : number +>c : any +>a : any +>blocks[3] : any +>blocks : any +>3 : 3 +>271733879 : 271733879 + + b = (b << 19) | (b >>> 13); +>b = (b << 19) | (b >>> 13) : number +>b : any +>(b << 19) | (b >>> 13) : number +>(b << 19) : number +>b << 19 : number +>b : any +>19 : 19 +>(b >>> 13) : number +>b >>> 13 : number +>b : any +>13 : 13 + + } else { + a = this.h0; +>a = this.h0 : any +>a : any +>this.h0 : any +>this : any +>h0 : any + + b = this.h1; +>b = this.h1 : any +>b : any +>this.h1 : any +>this : any +>h1 : any + + c = this.h2; +>c = this.h2 : any +>c : any +>this.h2 : any +>this : any +>h2 : any + + d = this.h3; +>d = this.h3 : any +>d : any +>this.h3 : any +>this : any +>h3 : any + + a += ((b & c) | (~b & d)) + blocks[0]; +>a += ((b & c) | (~b & d)) + blocks[0] : any +>a : any +>((b & c) | (~b & d)) + blocks[0] : any +>((b & c) | (~b & d)) : number +>(b & c) | (~b & d) : number +>(b & c) : number +>b & c : number +>b : any +>c : any +>(~b & d) : number +>~b & d : number +>~b : number +>b : any +>d : any +>blocks[0] : any +>blocks : any +>0 : 0 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += ((a & b) | (~a & c)) + blocks[1]; +>d += ((a & b) | (~a & c)) + blocks[1] : any +>d : any +>((a & b) | (~a & c)) + blocks[1] : any +>((a & b) | (~a & c)) : number +>(a & b) | (~a & c) : number +>(a & b) : number +>a & b : number +>a : any +>b : any +>(~a & c) : number +>~a & c : number +>~a : number +>a : any +>c : any +>blocks[1] : any +>blocks : any +>1 : 1 + + d = (d << 7) | (d >>> 25); +>d = (d << 7) | (d >>> 25) : number +>d : any +>(d << 7) | (d >>> 25) : number +>(d << 7) : number +>d << 7 : number +>d : any +>7 : 7 +>(d >>> 25) : number +>d >>> 25 : number +>d : any +>25 : 25 + + c += ((d & a) | (~d & b)) + blocks[2]; +>c += ((d & a) | (~d & b)) + blocks[2] : any +>c : any +>((d & a) | (~d & b)) + blocks[2] : any +>((d & a) | (~d & b)) : number +>(d & a) | (~d & b) : number +>(d & a) : number +>d & a : number +>d : any +>a : any +>(~d & b) : number +>~d & b : number +>~d : number +>d : any +>b : any +>blocks[2] : any +>blocks : any +>2 : 2 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += ((c & d) | (~c & a)) + blocks[3]; +>b += ((c & d) | (~c & a)) + blocks[3] : any +>b : any +>((c & d) | (~c & a)) + blocks[3] : any +>((c & d) | (~c & a)) : number +>(c & d) | (~c & a) : number +>(c & d) : number +>c & d : number +>c : any +>d : any +>(~c & a) : number +>~c & a : number +>~c : number +>c : any +>a : any +>blocks[3] : any +>blocks : any +>3 : 3 + + b = (b << 19) | (b >>> 13); +>b = (b << 19) | (b >>> 13) : number +>b : any +>(b << 19) | (b >>> 13) : number +>(b << 19) : number +>b << 19 : number +>b : any +>19 : 19 +>(b >>> 13) : number +>b >>> 13 : number +>b : any +>13 : 13 + } + + a += ((b & c) | (~b & d)) + blocks[4]; +>a += ((b & c) | (~b & d)) + blocks[4] : any +>a : any +>((b & c) | (~b & d)) + blocks[4] : any +>((b & c) | (~b & d)) : number +>(b & c) | (~b & d) : number +>(b & c) : number +>b & c : number +>b : any +>c : any +>(~b & d) : number +>~b & d : number +>~b : number +>b : any +>d : any +>blocks[4] : any +>blocks : any +>4 : 4 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += ((a & b) | (~a & c)) + blocks[5]; +>d += ((a & b) | (~a & c)) + blocks[5] : any +>d : any +>((a & b) | (~a & c)) + blocks[5] : any +>((a & b) | (~a & c)) : number +>(a & b) | (~a & c) : number +>(a & b) : number +>a & b : number +>a : any +>b : any +>(~a & c) : number +>~a & c : number +>~a : number +>a : any +>c : any +>blocks[5] : any +>blocks : any +>5 : 5 + + d = (d << 7) | (d >>> 25); +>d = (d << 7) | (d >>> 25) : number +>d : any +>(d << 7) | (d >>> 25) : number +>(d << 7) : number +>d << 7 : number +>d : any +>7 : 7 +>(d >>> 25) : number +>d >>> 25 : number +>d : any +>25 : 25 + + c += ((d & a) | (~d & b)) + blocks[6]; +>c += ((d & a) | (~d & b)) + blocks[6] : any +>c : any +>((d & a) | (~d & b)) + blocks[6] : any +>((d & a) | (~d & b)) : number +>(d & a) | (~d & b) : number +>(d & a) : number +>d & a : number +>d : any +>a : any +>(~d & b) : number +>~d & b : number +>~d : number +>d : any +>b : any +>blocks[6] : any +>blocks : any +>6 : 6 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += ((c & d) | (~c & a)) + blocks[7]; +>b += ((c & d) | (~c & a)) + blocks[7] : any +>b : any +>((c & d) | (~c & a)) + blocks[7] : any +>((c & d) | (~c & a)) : number +>(c & d) | (~c & a) : number +>(c & d) : number +>c & d : number +>c : any +>d : any +>(~c & a) : number +>~c & a : number +>~c : number +>c : any +>a : any +>blocks[7] : any +>blocks : any +>7 : 7 + + b = (b << 19) | (b >>> 13); +>b = (b << 19) | (b >>> 13) : number +>b : any +>(b << 19) | (b >>> 13) : number +>(b << 19) : number +>b << 19 : number +>b : any +>19 : 19 +>(b >>> 13) : number +>b >>> 13 : number +>b : any +>13 : 13 + + a += ((b & c) | (~b & d)) + blocks[8]; +>a += ((b & c) | (~b & d)) + blocks[8] : any +>a : any +>((b & c) | (~b & d)) + blocks[8] : any +>((b & c) | (~b & d)) : number +>(b & c) | (~b & d) : number +>(b & c) : number +>b & c : number +>b : any +>c : any +>(~b & d) : number +>~b & d : number +>~b : number +>b : any +>d : any +>blocks[8] : any +>blocks : any +>8 : 8 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += ((a & b) | (~a & c)) + blocks[9]; +>d += ((a & b) | (~a & c)) + blocks[9] : any +>d : any +>((a & b) | (~a & c)) + blocks[9] : any +>((a & b) | (~a & c)) : number +>(a & b) | (~a & c) : number +>(a & b) : number +>a & b : number +>a : any +>b : any +>(~a & c) : number +>~a & c : number +>~a : number +>a : any +>c : any +>blocks[9] : any +>blocks : any +>9 : 9 + + d = (d << 7) | (d >>> 25); +>d = (d << 7) | (d >>> 25) : number +>d : any +>(d << 7) | (d >>> 25) : number +>(d << 7) : number +>d << 7 : number +>d : any +>7 : 7 +>(d >>> 25) : number +>d >>> 25 : number +>d : any +>25 : 25 + + c += ((d & a) | (~d & b)) + blocks[10]; +>c += ((d & a) | (~d & b)) + blocks[10] : any +>c : any +>((d & a) | (~d & b)) + blocks[10] : any +>((d & a) | (~d & b)) : number +>(d & a) | (~d & b) : number +>(d & a) : number +>d & a : number +>d : any +>a : any +>(~d & b) : number +>~d & b : number +>~d : number +>d : any +>b : any +>blocks[10] : any +>blocks : any +>10 : 10 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += ((c & d) | (~c & a)) + blocks[11]; +>b += ((c & d) | (~c & a)) + blocks[11] : any +>b : any +>((c & d) | (~c & a)) + blocks[11] : any +>((c & d) | (~c & a)) : number +>(c & d) | (~c & a) : number +>(c & d) : number +>c & d : number +>c : any +>d : any +>(~c & a) : number +>~c & a : number +>~c : number +>c : any +>a : any +>blocks[11] : any +>blocks : any +>11 : 11 + + b = (b << 19) | (b >>> 13); +>b = (b << 19) | (b >>> 13) : number +>b : any +>(b << 19) | (b >>> 13) : number +>(b << 19) : number +>b << 19 : number +>b : any +>19 : 19 +>(b >>> 13) : number +>b >>> 13 : number +>b : any +>13 : 13 + + a += ((b & c) | (~b & d)) + blocks[12]; +>a += ((b & c) | (~b & d)) + blocks[12] : any +>a : any +>((b & c) | (~b & d)) + blocks[12] : any +>((b & c) | (~b & d)) : number +>(b & c) | (~b & d) : number +>(b & c) : number +>b & c : number +>b : any +>c : any +>(~b & d) : number +>~b & d : number +>~b : number +>b : any +>d : any +>blocks[12] : any +>blocks : any +>12 : 12 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += ((a & b) | (~a & c)) + blocks[13]; +>d += ((a & b) | (~a & c)) + blocks[13] : any +>d : any +>((a & b) | (~a & c)) + blocks[13] : any +>((a & b) | (~a & c)) : number +>(a & b) | (~a & c) : number +>(a & b) : number +>a & b : number +>a : any +>b : any +>(~a & c) : number +>~a & c : number +>~a : number +>a : any +>c : any +>blocks[13] : any +>blocks : any +>13 : 13 + + d = (d << 7) | (d >>> 25); +>d = (d << 7) | (d >>> 25) : number +>d : any +>(d << 7) | (d >>> 25) : number +>(d << 7) : number +>d << 7 : number +>d : any +>7 : 7 +>(d >>> 25) : number +>d >>> 25 : number +>d : any +>25 : 25 + + c += ((d & a) | (~d & b)) + blocks[14]; +>c += ((d & a) | (~d & b)) + blocks[14] : any +>c : any +>((d & a) | (~d & b)) + blocks[14] : any +>((d & a) | (~d & b)) : number +>(d & a) | (~d & b) : number +>(d & a) : number +>d & a : number +>d : any +>a : any +>(~d & b) : number +>~d & b : number +>~d : number +>d : any +>b : any +>blocks[14] : any +>blocks : any +>14 : 14 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += ((c & d) | (~c & a)) + blocks[15]; +>b += ((c & d) | (~c & a)) + blocks[15] : any +>b : any +>((c & d) | (~c & a)) + blocks[15] : any +>((c & d) | (~c & a)) : number +>(c & d) | (~c & a) : number +>(c & d) : number +>c & d : number +>c : any +>d : any +>(~c & a) : number +>~c & a : number +>~c : number +>c : any +>a : any +>blocks[15] : any +>blocks : any +>15 : 15 + + b = (b << 19) | (b >>> 13); +>b = (b << 19) | (b >>> 13) : number +>b : any +>(b << 19) | (b >>> 13) : number +>(b << 19) : number +>b << 19 : number +>b : any +>19 : 19 +>(b >>> 13) : number +>b >>> 13 : number +>b : any +>13 : 13 + + bc = b & c; +>bc = b & c : number +>bc : any +>b & c : number +>b : any +>c : any + + a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; +>a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249 : any +>a : any +>(bc | (b & d) | (c & d)) + blocks[0] + 1518500249 : any +>(bc | (b & d) | (c & d)) + blocks[0] : any +>(bc | (b & d) | (c & d)) : number +>bc | (b & d) | (c & d) : number +>bc | (b & d) : number +>bc : any +>(b & d) : number +>b & d : number +>b : any +>d : any +>(c & d) : number +>c & d : number +>c : any +>d : any +>blocks[0] : any +>blocks : any +>0 : 0 +>1518500249 : 1518500249 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + ab = a & b; +>ab = a & b : number +>ab : any +>a & b : number +>a : any +>b : any + + d += (ab | (a & c) | bc) + blocks[4] + 1518500249; +>d += (ab | (a & c) | bc) + blocks[4] + 1518500249 : any +>d : any +>(ab | (a & c) | bc) + blocks[4] + 1518500249 : any +>(ab | (a & c) | bc) + blocks[4] : any +>(ab | (a & c) | bc) : number +>ab | (a & c) | bc : number +>ab | (a & c) : number +>ab : any +>(a & c) : number +>a & c : number +>a : any +>c : any +>bc : any +>blocks[4] : any +>blocks : any +>4 : 4 +>1518500249 : 1518500249 + + d = (d << 5) | (d >>> 27); +>d = (d << 5) | (d >>> 27) : number +>d : any +>(d << 5) | (d >>> 27) : number +>(d << 5) : number +>d << 5 : number +>d : any +>5 : 5 +>(d >>> 27) : number +>d >>> 27 : number +>d : any +>27 : 27 + + da = d & a; +>da = d & a : number +>da : any +>d & a : number +>d : any +>a : any + + c += (da | (d & b) | ab) + blocks[8] + 1518500249; +>c += (da | (d & b) | ab) + blocks[8] + 1518500249 : any +>c : any +>(da | (d & b) | ab) + blocks[8] + 1518500249 : any +>(da | (d & b) | ab) + blocks[8] : any +>(da | (d & b) | ab) : number +>da | (d & b) | ab : number +>da | (d & b) : number +>da : any +>(d & b) : number +>d & b : number +>d : any +>b : any +>ab : any +>blocks[8] : any +>blocks : any +>8 : 8 +>1518500249 : 1518500249 + + c = (c << 9) | (c >>> 23); +>c = (c << 9) | (c >>> 23) : number +>c : any +>(c << 9) | (c >>> 23) : number +>(c << 9) : number +>c << 9 : number +>c : any +>9 : 9 +>(c >>> 23) : number +>c >>> 23 : number +>c : any +>23 : 23 + + cd = c & d; +>cd = c & d : number +>cd : any +>c & d : number +>c : any +>d : any + + b += (cd | (c & a) | da) + blocks[12] + 1518500249; +>b += (cd | (c & a) | da) + blocks[12] + 1518500249 : any +>b : any +>(cd | (c & a) | da) + blocks[12] + 1518500249 : any +>(cd | (c & a) | da) + blocks[12] : any +>(cd | (c & a) | da) : number +>cd | (c & a) | da : number +>cd | (c & a) : number +>cd : any +>(c & a) : number +>c & a : number +>c : any +>a : any +>da : any +>blocks[12] : any +>blocks : any +>12 : 12 +>1518500249 : 1518500249 + + b = (b << 13) | (b >>> 19); +>b = (b << 13) | (b >>> 19) : number +>b : any +>(b << 13) | (b >>> 19) : number +>(b << 13) : number +>b << 13 : number +>b : any +>13 : 13 +>(b >>> 19) : number +>b >>> 19 : number +>b : any +>19 : 19 + + bc = b & c; +>bc = b & c : number +>bc : any +>b & c : number +>b : any +>c : any + + a += (bc | (b & d) | cd) + blocks[1] + 1518500249; +>a += (bc | (b & d) | cd) + blocks[1] + 1518500249 : any +>a : any +>(bc | (b & d) | cd) + blocks[1] + 1518500249 : any +>(bc | (b & d) | cd) + blocks[1] : any +>(bc | (b & d) | cd) : number +>bc | (b & d) | cd : number +>bc | (b & d) : number +>bc : any +>(b & d) : number +>b & d : number +>b : any +>d : any +>cd : any +>blocks[1] : any +>blocks : any +>1 : 1 +>1518500249 : 1518500249 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + ab = a & b; +>ab = a & b : number +>ab : any +>a & b : number +>a : any +>b : any + + d += (ab | (a & c) | bc) + blocks[5] + 1518500249; +>d += (ab | (a & c) | bc) + blocks[5] + 1518500249 : any +>d : any +>(ab | (a & c) | bc) + blocks[5] + 1518500249 : any +>(ab | (a & c) | bc) + blocks[5] : any +>(ab | (a & c) | bc) : number +>ab | (a & c) | bc : number +>ab | (a & c) : number +>ab : any +>(a & c) : number +>a & c : number +>a : any +>c : any +>bc : any +>blocks[5] : any +>blocks : any +>5 : 5 +>1518500249 : 1518500249 + + d = (d << 5) | (d >>> 27); +>d = (d << 5) | (d >>> 27) : number +>d : any +>(d << 5) | (d >>> 27) : number +>(d << 5) : number +>d << 5 : number +>d : any +>5 : 5 +>(d >>> 27) : number +>d >>> 27 : number +>d : any +>27 : 27 + + da = d & a; +>da = d & a : number +>da : any +>d & a : number +>d : any +>a : any + + c += (da | (d & b) | ab) + blocks[9] + 1518500249; +>c += (da | (d & b) | ab) + blocks[9] + 1518500249 : any +>c : any +>(da | (d & b) | ab) + blocks[9] + 1518500249 : any +>(da | (d & b) | ab) + blocks[9] : any +>(da | (d & b) | ab) : number +>da | (d & b) | ab : number +>da | (d & b) : number +>da : any +>(d & b) : number +>d & b : number +>d : any +>b : any +>ab : any +>blocks[9] : any +>blocks : any +>9 : 9 +>1518500249 : 1518500249 + + c = (c << 9) | (c >>> 23); +>c = (c << 9) | (c >>> 23) : number +>c : any +>(c << 9) | (c >>> 23) : number +>(c << 9) : number +>c << 9 : number +>c : any +>9 : 9 +>(c >>> 23) : number +>c >>> 23 : number +>c : any +>23 : 23 + + cd = c & d; +>cd = c & d : number +>cd : any +>c & d : number +>c : any +>d : any + + b += (cd | (c & a) | da) + blocks[13] + 1518500249; +>b += (cd | (c & a) | da) + blocks[13] + 1518500249 : any +>b : any +>(cd | (c & a) | da) + blocks[13] + 1518500249 : any +>(cd | (c & a) | da) + blocks[13] : any +>(cd | (c & a) | da) : number +>cd | (c & a) | da : number +>cd | (c & a) : number +>cd : any +>(c & a) : number +>c & a : number +>c : any +>a : any +>da : any +>blocks[13] : any +>blocks : any +>13 : 13 +>1518500249 : 1518500249 + + b = (b << 13) | (b >>> 19); +>b = (b << 13) | (b >>> 19) : number +>b : any +>(b << 13) | (b >>> 19) : number +>(b << 13) : number +>b << 13 : number +>b : any +>13 : 13 +>(b >>> 19) : number +>b >>> 19 : number +>b : any +>19 : 19 + + bc = b & c; +>bc = b & c : number +>bc : any +>b & c : number +>b : any +>c : any + + a += (bc | (b & d) | cd) + blocks[2] + 1518500249; +>a += (bc | (b & d) | cd) + blocks[2] + 1518500249 : any +>a : any +>(bc | (b & d) | cd) + blocks[2] + 1518500249 : any +>(bc | (b & d) | cd) + blocks[2] : any +>(bc | (b & d) | cd) : number +>bc | (b & d) | cd : number +>bc | (b & d) : number +>bc : any +>(b & d) : number +>b & d : number +>b : any +>d : any +>cd : any +>blocks[2] : any +>blocks : any +>2 : 2 +>1518500249 : 1518500249 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + ab = a & b; +>ab = a & b : number +>ab : any +>a & b : number +>a : any +>b : any + + d += (ab | (a & c) | bc) + blocks[6] + 1518500249; +>d += (ab | (a & c) | bc) + blocks[6] + 1518500249 : any +>d : any +>(ab | (a & c) | bc) + blocks[6] + 1518500249 : any +>(ab | (a & c) | bc) + blocks[6] : any +>(ab | (a & c) | bc) : number +>ab | (a & c) | bc : number +>ab | (a & c) : number +>ab : any +>(a & c) : number +>a & c : number +>a : any +>c : any +>bc : any +>blocks[6] : any +>blocks : any +>6 : 6 +>1518500249 : 1518500249 + + d = (d << 5) | (d >>> 27); +>d = (d << 5) | (d >>> 27) : number +>d : any +>(d << 5) | (d >>> 27) : number +>(d << 5) : number +>d << 5 : number +>d : any +>5 : 5 +>(d >>> 27) : number +>d >>> 27 : number +>d : any +>27 : 27 + + da = d & a; +>da = d & a : number +>da : any +>d & a : number +>d : any +>a : any + + c += (da | (d & b) | ab) + blocks[10] + 1518500249; +>c += (da | (d & b) | ab) + blocks[10] + 1518500249 : any +>c : any +>(da | (d & b) | ab) + blocks[10] + 1518500249 : any +>(da | (d & b) | ab) + blocks[10] : any +>(da | (d & b) | ab) : number +>da | (d & b) | ab : number +>da | (d & b) : number +>da : any +>(d & b) : number +>d & b : number +>d : any +>b : any +>ab : any +>blocks[10] : any +>blocks : any +>10 : 10 +>1518500249 : 1518500249 + + c = (c << 9) | (c >>> 23); +>c = (c << 9) | (c >>> 23) : number +>c : any +>(c << 9) | (c >>> 23) : number +>(c << 9) : number +>c << 9 : number +>c : any +>9 : 9 +>(c >>> 23) : number +>c >>> 23 : number +>c : any +>23 : 23 + + cd = c & d; +>cd = c & d : number +>cd : any +>c & d : number +>c : any +>d : any + + b += (cd | (c & a) | da) + blocks[14] + 1518500249; +>b += (cd | (c & a) | da) + blocks[14] + 1518500249 : any +>b : any +>(cd | (c & a) | da) + blocks[14] + 1518500249 : any +>(cd | (c & a) | da) + blocks[14] : any +>(cd | (c & a) | da) : number +>cd | (c & a) | da : number +>cd | (c & a) : number +>cd : any +>(c & a) : number +>c & a : number +>c : any +>a : any +>da : any +>blocks[14] : any +>blocks : any +>14 : 14 +>1518500249 : 1518500249 + + b = (b << 13) | (b >>> 19); +>b = (b << 13) | (b >>> 19) : number +>b : any +>(b << 13) | (b >>> 19) : number +>(b << 13) : number +>b << 13 : number +>b : any +>13 : 13 +>(b >>> 19) : number +>b >>> 19 : number +>b : any +>19 : 19 + + bc = b & c; +>bc = b & c : number +>bc : any +>b & c : number +>b : any +>c : any + + a += (bc | (b & d) | cd) + blocks[3] + 1518500249; +>a += (bc | (b & d) | cd) + blocks[3] + 1518500249 : any +>a : any +>(bc | (b & d) | cd) + blocks[3] + 1518500249 : any +>(bc | (b & d) | cd) + blocks[3] : any +>(bc | (b & d) | cd) : number +>bc | (b & d) | cd : number +>bc | (b & d) : number +>bc : any +>(b & d) : number +>b & d : number +>b : any +>d : any +>cd : any +>blocks[3] : any +>blocks : any +>3 : 3 +>1518500249 : 1518500249 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + ab = a & b; +>ab = a & b : number +>ab : any +>a & b : number +>a : any +>b : any + + d += (ab | (a & c) | bc) + blocks[7] + 1518500249; +>d += (ab | (a & c) | bc) + blocks[7] + 1518500249 : any +>d : any +>(ab | (a & c) | bc) + blocks[7] + 1518500249 : any +>(ab | (a & c) | bc) + blocks[7] : any +>(ab | (a & c) | bc) : number +>ab | (a & c) | bc : number +>ab | (a & c) : number +>ab : any +>(a & c) : number +>a & c : number +>a : any +>c : any +>bc : any +>blocks[7] : any +>blocks : any +>7 : 7 +>1518500249 : 1518500249 + + d = (d << 5) | (d >>> 27); +>d = (d << 5) | (d >>> 27) : number +>d : any +>(d << 5) | (d >>> 27) : number +>(d << 5) : number +>d << 5 : number +>d : any +>5 : 5 +>(d >>> 27) : number +>d >>> 27 : number +>d : any +>27 : 27 + + da = d & a; +>da = d & a : number +>da : any +>d & a : number +>d : any +>a : any + + c += (da | (d & b) | ab) + blocks[11] + 1518500249; +>c += (da | (d & b) | ab) + blocks[11] + 1518500249 : any +>c : any +>(da | (d & b) | ab) + blocks[11] + 1518500249 : any +>(da | (d & b) | ab) + blocks[11] : any +>(da | (d & b) | ab) : number +>da | (d & b) | ab : number +>da | (d & b) : number +>da : any +>(d & b) : number +>d & b : number +>d : any +>b : any +>ab : any +>blocks[11] : any +>blocks : any +>11 : 11 +>1518500249 : 1518500249 + + c = (c << 9) | (c >>> 23); +>c = (c << 9) | (c >>> 23) : number +>c : any +>(c << 9) | (c >>> 23) : number +>(c << 9) : number +>c << 9 : number +>c : any +>9 : 9 +>(c >>> 23) : number +>c >>> 23 : number +>c : any +>23 : 23 + + b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; +>b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249 : any +>b : any +>((c & d) | (c & a) | da) + blocks[15] + 1518500249 : any +>((c & d) | (c & a) | da) + blocks[15] : any +>((c & d) | (c & a) | da) : number +>(c & d) | (c & a) | da : number +>(c & d) | (c & a) : number +>(c & d) : number +>c & d : number +>c : any +>d : any +>(c & a) : number +>c & a : number +>c : any +>a : any +>da : any +>blocks[15] : any +>blocks : any +>15 : 15 +>1518500249 : 1518500249 + + b = (b << 13) | (b >>> 19); +>b = (b << 13) | (b >>> 19) : number +>b : any +>(b << 13) | (b >>> 19) : number +>(b << 13) : number +>b << 13 : number +>b : any +>13 : 13 +>(b >>> 19) : number +>b >>> 19 : number +>b : any +>19 : 19 + + bc = b ^ c; +>bc = b ^ c : number +>bc : any +>b ^ c : number +>b : any +>c : any + + a += (bc ^ d) + blocks[0] + 1859775393; +>a += (bc ^ d) + blocks[0] + 1859775393 : any +>a : any +>(bc ^ d) + blocks[0] + 1859775393 : any +>(bc ^ d) + blocks[0] : any +>(bc ^ d) : number +>bc ^ d : number +>bc : any +>d : any +>blocks[0] : any +>blocks : any +>0 : 0 +>1859775393 : 1859775393 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += (bc ^ a) + blocks[8] + 1859775393; +>d += (bc ^ a) + blocks[8] + 1859775393 : any +>d : any +>(bc ^ a) + blocks[8] + 1859775393 : any +>(bc ^ a) + blocks[8] : any +>(bc ^ a) : number +>bc ^ a : number +>bc : any +>a : any +>blocks[8] : any +>blocks : any +>8 : 8 +>1859775393 : 1859775393 + + d = (d << 9) | (d >>> 23); +>d = (d << 9) | (d >>> 23) : number +>d : any +>(d << 9) | (d >>> 23) : number +>(d << 9) : number +>d << 9 : number +>d : any +>9 : 9 +>(d >>> 23) : number +>d >>> 23 : number +>d : any +>23 : 23 + + da = d ^ a; +>da = d ^ a : number +>da : any +>d ^ a : number +>d : any +>a : any + + c += (da ^ b) + blocks[4] + 1859775393; +>c += (da ^ b) + blocks[4] + 1859775393 : any +>c : any +>(da ^ b) + blocks[4] + 1859775393 : any +>(da ^ b) + blocks[4] : any +>(da ^ b) : number +>da ^ b : number +>da : any +>b : any +>blocks[4] : any +>blocks : any +>4 : 4 +>1859775393 : 1859775393 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += (da ^ c) + blocks[12] + 1859775393; +>b += (da ^ c) + blocks[12] + 1859775393 : any +>b : any +>(da ^ c) + blocks[12] + 1859775393 : any +>(da ^ c) + blocks[12] : any +>(da ^ c) : number +>da ^ c : number +>da : any +>c : any +>blocks[12] : any +>blocks : any +>12 : 12 +>1859775393 : 1859775393 + + b = (b << 15) | (b >>> 17); +>b = (b << 15) | (b >>> 17) : number +>b : any +>(b << 15) | (b >>> 17) : number +>(b << 15) : number +>b << 15 : number +>b : any +>15 : 15 +>(b >>> 17) : number +>b >>> 17 : number +>b : any +>17 : 17 + + bc = b ^ c; +>bc = b ^ c : number +>bc : any +>b ^ c : number +>b : any +>c : any + + a += (bc ^ d) + blocks[2] + 1859775393; +>a += (bc ^ d) + blocks[2] + 1859775393 : any +>a : any +>(bc ^ d) + blocks[2] + 1859775393 : any +>(bc ^ d) + blocks[2] : any +>(bc ^ d) : number +>bc ^ d : number +>bc : any +>d : any +>blocks[2] : any +>blocks : any +>2 : 2 +>1859775393 : 1859775393 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += (bc ^ a) + blocks[10] + 1859775393; +>d += (bc ^ a) + blocks[10] + 1859775393 : any +>d : any +>(bc ^ a) + blocks[10] + 1859775393 : any +>(bc ^ a) + blocks[10] : any +>(bc ^ a) : number +>bc ^ a : number +>bc : any +>a : any +>blocks[10] : any +>blocks : any +>10 : 10 +>1859775393 : 1859775393 + + d = (d << 9) | (d >>> 23); +>d = (d << 9) | (d >>> 23) : number +>d : any +>(d << 9) | (d >>> 23) : number +>(d << 9) : number +>d << 9 : number +>d : any +>9 : 9 +>(d >>> 23) : number +>d >>> 23 : number +>d : any +>23 : 23 + + da = d ^ a; +>da = d ^ a : number +>da : any +>d ^ a : number +>d : any +>a : any + + c += (da ^ b) + blocks[6] + 1859775393; +>c += (da ^ b) + blocks[6] + 1859775393 : any +>c : any +>(da ^ b) + blocks[6] + 1859775393 : any +>(da ^ b) + blocks[6] : any +>(da ^ b) : number +>da ^ b : number +>da : any +>b : any +>blocks[6] : any +>blocks : any +>6 : 6 +>1859775393 : 1859775393 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += (da ^ c) + blocks[14] + 1859775393; +>b += (da ^ c) + blocks[14] + 1859775393 : any +>b : any +>(da ^ c) + blocks[14] + 1859775393 : any +>(da ^ c) + blocks[14] : any +>(da ^ c) : number +>da ^ c : number +>da : any +>c : any +>blocks[14] : any +>blocks : any +>14 : 14 +>1859775393 : 1859775393 + + b = (b << 15) | (b >>> 17); +>b = (b << 15) | (b >>> 17) : number +>b : any +>(b << 15) | (b >>> 17) : number +>(b << 15) : number +>b << 15 : number +>b : any +>15 : 15 +>(b >>> 17) : number +>b >>> 17 : number +>b : any +>17 : 17 + + bc = b ^ c; +>bc = b ^ c : number +>bc : any +>b ^ c : number +>b : any +>c : any + + a += (bc ^ d) + blocks[1] + 1859775393; +>a += (bc ^ d) + blocks[1] + 1859775393 : any +>a : any +>(bc ^ d) + blocks[1] + 1859775393 : any +>(bc ^ d) + blocks[1] : any +>(bc ^ d) : number +>bc ^ d : number +>bc : any +>d : any +>blocks[1] : any +>blocks : any +>1 : 1 +>1859775393 : 1859775393 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += (bc ^ a) + blocks[9] + 1859775393; +>d += (bc ^ a) + blocks[9] + 1859775393 : any +>d : any +>(bc ^ a) + blocks[9] + 1859775393 : any +>(bc ^ a) + blocks[9] : any +>(bc ^ a) : number +>bc ^ a : number +>bc : any +>a : any +>blocks[9] : any +>blocks : any +>9 : 9 +>1859775393 : 1859775393 + + d = (d << 9) | (d >>> 23); +>d = (d << 9) | (d >>> 23) : number +>d : any +>(d << 9) | (d >>> 23) : number +>(d << 9) : number +>d << 9 : number +>d : any +>9 : 9 +>(d >>> 23) : number +>d >>> 23 : number +>d : any +>23 : 23 + + da = d ^ a; +>da = d ^ a : number +>da : any +>d ^ a : number +>d : any +>a : any + + c += (da ^ b) + blocks[5] + 1859775393; +>c += (da ^ b) + blocks[5] + 1859775393 : any +>c : any +>(da ^ b) + blocks[5] + 1859775393 : any +>(da ^ b) + blocks[5] : any +>(da ^ b) : number +>da ^ b : number +>da : any +>b : any +>blocks[5] : any +>blocks : any +>5 : 5 +>1859775393 : 1859775393 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += (da ^ c) + blocks[13] + 1859775393; +>b += (da ^ c) + blocks[13] + 1859775393 : any +>b : any +>(da ^ c) + blocks[13] + 1859775393 : any +>(da ^ c) + blocks[13] : any +>(da ^ c) : number +>da ^ c : number +>da : any +>c : any +>blocks[13] : any +>blocks : any +>13 : 13 +>1859775393 : 1859775393 + + b = (b << 15) | (b >>> 17); +>b = (b << 15) | (b >>> 17) : number +>b : any +>(b << 15) | (b >>> 17) : number +>(b << 15) : number +>b << 15 : number +>b : any +>15 : 15 +>(b >>> 17) : number +>b >>> 17 : number +>b : any +>17 : 17 + + bc = b ^ c; +>bc = b ^ c : number +>bc : any +>b ^ c : number +>b : any +>c : any + + a += (bc ^ d) + blocks[3] + 1859775393; +>a += (bc ^ d) + blocks[3] + 1859775393 : any +>a : any +>(bc ^ d) + blocks[3] + 1859775393 : any +>(bc ^ d) + blocks[3] : any +>(bc ^ d) : number +>bc ^ d : number +>bc : any +>d : any +>blocks[3] : any +>blocks : any +>3 : 3 +>1859775393 : 1859775393 + + a = (a << 3) | (a >>> 29); +>a = (a << 3) | (a >>> 29) : number +>a : any +>(a << 3) | (a >>> 29) : number +>(a << 3) : number +>a << 3 : number +>a : any +>3 : 3 +>(a >>> 29) : number +>a >>> 29 : number +>a : any +>29 : 29 + + d += (bc ^ a) + blocks[11] + 1859775393; +>d += (bc ^ a) + blocks[11] + 1859775393 : any +>d : any +>(bc ^ a) + blocks[11] + 1859775393 : any +>(bc ^ a) + blocks[11] : any +>(bc ^ a) : number +>bc ^ a : number +>bc : any +>a : any +>blocks[11] : any +>blocks : any +>11 : 11 +>1859775393 : 1859775393 + + d = (d << 9) | (d >>> 23); +>d = (d << 9) | (d >>> 23) : number +>d : any +>(d << 9) | (d >>> 23) : number +>(d << 9) : number +>d << 9 : number +>d : any +>9 : 9 +>(d >>> 23) : number +>d >>> 23 : number +>d : any +>23 : 23 + + da = d ^ a; +>da = d ^ a : number +>da : any +>d ^ a : number +>d : any +>a : any + + c += (da ^ b) + blocks[7] + 1859775393; +>c += (da ^ b) + blocks[7] + 1859775393 : any +>c : any +>(da ^ b) + blocks[7] + 1859775393 : any +>(da ^ b) + blocks[7] : any +>(da ^ b) : number +>da ^ b : number +>da : any +>b : any +>blocks[7] : any +>blocks : any +>7 : 7 +>1859775393 : 1859775393 + + c = (c << 11) | (c >>> 21); +>c = (c << 11) | (c >>> 21) : number +>c : any +>(c << 11) | (c >>> 21) : number +>(c << 11) : number +>c << 11 : number +>c : any +>11 : 11 +>(c >>> 21) : number +>c >>> 21 : number +>c : any +>21 : 21 + + b += (da ^ c) + blocks[15] + 1859775393; +>b += (da ^ c) + blocks[15] + 1859775393 : any +>b : any +>(da ^ c) + blocks[15] + 1859775393 : any +>(da ^ c) + blocks[15] : any +>(da ^ c) : number +>da ^ c : number +>da : any +>c : any +>blocks[15] : any +>blocks : any +>15 : 15 +>1859775393 : 1859775393 + + b = (b << 15) | (b >>> 17); +>b = (b << 15) | (b >>> 17) : number +>b : any +>(b << 15) | (b >>> 17) : number +>(b << 15) : number +>b << 15 : number +>b : any +>15 : 15 +>(b >>> 17) : number +>b >>> 17 : number +>b : any +>17 : 17 + + if (this.first) { +>this.first : any +>this : any +>first : any + + this.h0 = a + 1732584193 << 0; +>this.h0 = a + 1732584193 << 0 : number +>this.h0 : any +>this : any +>h0 : any +>a + 1732584193 << 0 : number +>a + 1732584193 : any +>a : any +>1732584193 : 1732584193 +>0 : 0 + + this.h1 = b - 271733879 << 0; +>this.h1 = b - 271733879 << 0 : number +>this.h1 : any +>this : any +>h1 : any +>b - 271733879 << 0 : number +>b - 271733879 : number +>b : any +>271733879 : 271733879 +>0 : 0 + + this.h2 = c - 1732584194 << 0; +>this.h2 = c - 1732584194 << 0 : number +>this.h2 : any +>this : any +>h2 : any +>c - 1732584194 << 0 : number +>c - 1732584194 : number +>c : any +>1732584194 : 1732584194 +>0 : 0 + + this.h3 = d + 271733878 << 0; +>this.h3 = d + 271733878 << 0 : number +>this.h3 : any +>this : any +>h3 : any +>d + 271733878 << 0 : number +>d + 271733878 : any +>d : any +>271733878 : 271733878 +>0 : 0 + + this.first = false; +>this.first = false : false +>this.first : any +>this : any +>first : any +>false : false + + } else { + this.h0 = this.h0 + a << 0; +>this.h0 = this.h0 + a << 0 : number +>this.h0 : any +>this : any +>h0 : any +>this.h0 + a << 0 : number +>this.h0 + a : any +>this.h0 : any +>this : any +>h0 : any +>a : any +>0 : 0 + + this.h1 = this.h1 + b << 0; +>this.h1 = this.h1 + b << 0 : number +>this.h1 : any +>this : any +>h1 : any +>this.h1 + b << 0 : number +>this.h1 + b : any +>this.h1 : any +>this : any +>h1 : any +>b : any +>0 : 0 + + this.h2 = this.h2 + c << 0; +>this.h2 = this.h2 + c << 0 : number +>this.h2 : any +>this : any +>h2 : any +>this.h2 + c << 0 : number +>this.h2 + c : any +>this.h2 : any +>this : any +>h2 : any +>c : any +>0 : 0 + + this.h3 = this.h3 + d << 0; +>this.h3 = this.h3 + d << 0 : number +>this.h3 : any +>this : any +>h3 : any +>this.h3 + d << 0 : number +>this.h3 + d : any +>this.h3 : any +>this : any +>h3 : any +>d : any +>0 : 0 + } +}; + diff --git a/tests/baselines/reference/largeControlFlowGraph.errors.txt b/tests/baselines/reference/largeControlFlowGraph.errors.txt index 23095c25f7456..e757c8c277a04 100644 --- a/tests/baselines/reference/largeControlFlowGraph.errors.txt +++ b/tests/baselines/reference/largeControlFlowGraph.errors.txt @@ -1,4 +1,4 @@ -tests/cases/compiler/largeControlFlowGraph.ts(3,1): error TS2563: The containing function or module body is too large for control flow analysis. +tests/cases/compiler/largeControlFlowGraph.ts(3,1): error TS2563: The containing function or module body is too complex for control flow analysis. ==== tests/cases/compiler/largeControlFlowGraph.ts (1 errors) ==== @@ -6,7 +6,7 @@ tests/cases/compiler/largeControlFlowGraph.ts(3,1): error TS2563: The containing // we gracefully handle this, possibly by issuing an error. const data = []; ~~~~~ -!!! error TS2563: The containing function or module body is too large for control flow analysis. +!!! error TS2563: The containing function or module body is too complex for control flow analysis. data[0] = 0; data[0] = 0; data[0] = 0; diff --git a/tests/cases/compiler/complexControlFlowGraph.ts b/tests/cases/compiler/complexControlFlowGraph.ts new file mode 100644 index 0000000000000..bff70400ccc43 --- /dev/null +++ b/tests/cases/compiler/complexControlFlowGraph.ts @@ -0,0 +1,158 @@ +// @strict: true + +// Repro from #29926 + +const foo = function (this: any) { + var a, b, c, d, ab, bc, cd, da, blocks = this.blocks; + + if (this.first) { + a = blocks[0] - 1; + a = (a << 3) | (a >>> 29); + d = ((a & 0xefcdab89) | (~a & 0x98badcfe)) + blocks[1] + 271733878; + d = (d << 7) | (d >>> 25); + c = ((d & a) | (~d & 0xefcdab89)) + blocks[2] - 1732584194; + c = (c << 11) | (c >>> 21); + b = ((c & d) | (~c & a)) + blocks[3] - 271733879; + b = (b << 19) | (b >>> 13); + } else { + a = this.h0; + b = this.h1; + c = this.h2; + d = this.h3; + a += ((b & c) | (~b & d)) + blocks[0]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[1]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[2]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[3]; + b = (b << 19) | (b >>> 13); + } + + a += ((b & c) | (~b & d)) + blocks[4]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[5]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[6]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[7]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[8]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[9]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[10]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[11]; + b = (b << 19) | (b >>> 13); + a += ((b & c) | (~b & d)) + blocks[12]; + a = (a << 3) | (a >>> 29); + d += ((a & b) | (~a & c)) + blocks[13]; + d = (d << 7) | (d >>> 25); + c += ((d & a) | (~d & b)) + blocks[14]; + c = (c << 11) | (c >>> 21); + b += ((c & d) | (~c & a)) + blocks[15]; + b = (b << 19) | (b >>> 13); + + bc = b & c; + a += (bc | (b & d) | (c & d)) + blocks[0] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[4] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[8] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[12] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[1] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[5] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[9] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[13] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[2] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[6] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[10] + 1518500249; + c = (c << 9) | (c >>> 23); + cd = c & d; + b += (cd | (c & a) | da) + blocks[14] + 1518500249; + b = (b << 13) | (b >>> 19); + bc = b & c; + a += (bc | (b & d) | cd) + blocks[3] + 1518500249; + a = (a << 3) | (a >>> 29); + ab = a & b; + d += (ab | (a & c) | bc) + blocks[7] + 1518500249; + d = (d << 5) | (d >>> 27); + da = d & a; + c += (da | (d & b) | ab) + blocks[11] + 1518500249; + c = (c << 9) | (c >>> 23); + b += ((c & d) | (c & a) | da) + blocks[15] + 1518500249; + b = (b << 13) | (b >>> 19); + + bc = b ^ c; + a += (bc ^ d) + blocks[0] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[8] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[4] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[12] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[2] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[10] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[6] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[14] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[1] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[9] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[5] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[13] + 1859775393; + b = (b << 15) | (b >>> 17); + bc = b ^ c; + a += (bc ^ d) + blocks[3] + 1859775393; + a = (a << 3) | (a >>> 29); + d += (bc ^ a) + blocks[11] + 1859775393; + d = (d << 9) | (d >>> 23); + da = d ^ a; + c += (da ^ b) + blocks[7] + 1859775393; + c = (c << 11) | (c >>> 21); + b += (da ^ c) + blocks[15] + 1859775393; + b = (b << 15) | (b >>> 17); + + if (this.first) { + this.h0 = a + 1732584193 << 0; + this.h1 = b - 271733879 << 0; + this.h2 = c - 1732584194 << 0; + this.h3 = d + 271733878 << 0; + this.first = false; + } else { + this.h0 = this.h0 + a << 0; + this.h1 = this.h1 + b << 0; + this.h2 = this.h2 + c << 0; + this.h3 = this.h3 + d << 0; + } +};