// File: /workspace/github_cpp_makefile_star2_O2/Nallantli[P]Rossa/main/rossa/node_parser/node_parser.cpp
// Function: node_parser_t::parseTryCatchNode(std::vector<node_scope_t, std::allocator<node_scope_t>>*)
ptr_node_t node_parser_t::parseTryCatchNode(std::vector<node_scope_t> *scopes)
{
	scopes->push_back({ROSSA_HASH("<TRY@" + std::to_string(scope_i++) + ">")});
	nextToken();
	if (currentToken.type != '{')
		return logErrorN(util::format(_EXPECTED_ERROR_, {"{"}), currentToken);
	nextToken();
	std::vector<ptr_node_t> tbody;
	while (currentToken.type != NULL_TOK)
	{
		if (currentToken.type == '}')
			break;

		if (auto e = parseExprNode(scopes))
			tbody.push_back(e);
		else
			return logErrorN(_FAILURE_PARSE_CODE_, currentToken);
	}
	if (currentToken.type != '}')
		return logErrorN(util::format(_EXPECTED_ERROR_, {"}"}), currentToken);
	nextToken();

	if (currentToken.type != TOK_CATCH)
		return logErrorN(util::format(_EXPECTED_ERROR_, {KEYWORD_CATCH}), currentToken);
	nextToken();

	if (currentToken.type != TOK_IDF)
		return logErrorN(_EXPECTED_IDF_, currentToken);
	hash_ull key = ROSSA_HASH(currentToken.valueString);
	nextToken();

	if (currentToken.type != TOK_THEN)
		return logErrorN(util::format(_EXPECTED_ERROR_, {KEYWORD_THEN}), currentToken);
	nextToken();

	if (currentToken.type != '{')
		return logErrorN(util::format(_EXPECTED_ERROR_, {"{"}), currentToken);
	nextToken();
	std::vector<ptr_node_t> cbody;

	scopes->pop_back();
	scopes->push_back({ROSSA_HASH("<CAT@" + std::to_string(scope_i++) + ">")});
	while (currentToken.type != NULL_TOK)
	{
		if (currentToken.type == '}')
			break;

		if (auto e = parseExprNode(scopes))
			cbody.push_back(e);
		else
			return logErrorN(_FAILURE_PARSE_CODE_, currentToken);
	}
	if (currentToken.type != '}')
		return logErrorN(util::format(_EXPECTED_ERROR_, {"}"}), currentToken);
	nextToken();

	scopes->pop_back();
	return std::make_shared<TryCatchNode>(*scopes, std::make_shared<VectorNode>(*scopes, tbody, true, currentToken), std::make_shared<VectorNode>(*scopes, cbody, true, currentToken), key, currentToken);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
movq %rdx, %r12
movq %rsi, %rbx
movq %rdi, %r15
movq (%rsi), %rsi
leaq 0x1(%rsi), %rax
movq %rax, (%rbx)
leaq 0x78(%rsp), %r14
movq %r14, %rdi
callq 0x2ecd6
leaq 0x4a291(%rip), %rsi     # 0x76a65
leaq 0x50(%rsp), %rdi
movq %r14, %rdx
callq 0x1ca9c
leaq 0x49b86(%rip), %rdx     # 0x7636e
leaq 0x10(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x1ca7d
leaq 0x8a10a(%rip), %rdi     # 0xb6908
leaq 0x10(%rsp), %rsi
callq 0x1efb0
leaq 0x38(%rsp), %r14
movq %rax, -0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, (%r14)
andq $0x0, 0x10(%r14)
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x1fe52
movq %r14, %rdi
callq 0x1f5c4
leaq 0x10(%rsp), %rdi
callq 0x101d0
leaq 0x50(%rsp), %rdi
callq 0x101d0
leaq 0x78(%rsp), %rdi
callq 0x101d0
movq %rbx, %rdi
callq 0x22e24
leaq 0x58(%rbx), %rax
movq %rax, 0x8(%rsp)
cmpl $0x7b, 0xd0(%rbx)
jne 0x2cc51
movq %rbx, %rdi
callq 0x22e24
leaq 0xc0(%rsp), %rbp
andq $0x0, 0x10(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, (%rbp)
leaq 0x18(%rsp), %r13
leaq 0x10(%rsp), %r14
movl 0xd0(%rbx), %eax
cmpl $0x7d, %eax
je 0x2c8d6
testl %eax, %eax
je 0x2cb29
movq %r14, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x23390
cmpq $0x0, 0x10(%rsp)
je 0x2cb98
movq %rbp, %rdi
movq %r14, %rsi
callq 0x2e880
movq %r13, %rdi
callq 0x1d786
jmp 0x2c894
movq %rbx, %rdi
callq 0x22e24
cmpl $-0x32, 0xd0(%rbx)
jne 0x2ccc3
movq %rbx, %rdi
callq 0x22e24
cmpl $-0x2, 0xd0(%rbx)
jne 0x2cd32
leaq 0xb0(%rbx), %rsi
leaq 0x89ffa(%rip), %rdi     # 0xb6908
callq 0x1efb0
movq %rax, 0x98(%rsp)
movq %rbx, %rdi
callq 0x22e24
cmpl $-0xc, 0xd0(%rbx)
jne 0x2cd5a
movq %rbx, %rdi
callq 0x22e24
cmpl $0x7b, 0xd0(%rbx)
jne 0x2cdc6
movq %rbx, %rdi
callq 0x22e24
xorps %xmm0, %xmm0
movaps %xmm0, 0xa0(%rsp)
andq $0x0, 0xb0(%rsp)
movq %r12, %rdi
callq 0x2eb8e
movq (%rbx), %rsi
leaq 0x1(%rsi), %rax
movq %rax, (%rbx)
leaq 0x78(%rsp), %rdi
callq 0x2ecd6
leaq 0x4a0fb(%rip), %rsi     # 0x76a7f
leaq 0x50(%rsp), %rdi
leaq 0x78(%rsp), %rdx
callq 0x1ca9c
leaq 0x499d4(%rip), %rdx     # 0x7636e
leaq 0x10(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x1ca7d
leaq 0x89f58(%rip), %rdi     # 0xb6908
leaq 0x10(%rsp), %rsi
callq 0x1efb0
leaq 0x38(%rsp), %r14
movq %rax, -0x8(%r14)
xorps %xmm0, %xmm0
movups %xmm0, (%r14)
andq $0x0, 0x10(%r14)
leaq 0x30(%rsp), %rsi
movq %r12, %rdi
callq 0x1fe52
movq %r14, %rdi
callq 0x1f5c4
leaq 0x10(%rsp), %rbp
movq %rbp, %rdi
callq 0x101d0
leaq 0x50(%rsp), %rdi
callq 0x101d0
leaq 0x78(%rsp), %rdi
callq 0x101d0
leaq 0x18(%rsp), %r13
leaq 0xa0(%rsp), %r14
movl 0xd0(%rbx), %eax
cmpl $0x7d, %eax
je 0x2ca54
testl %eax, %eax
je 0x2cbc0
movq %rbp, %rdi
movq %rbx, %rsi
movq %r12, %rdx
callq 0x23390
cmpq $0x0, 0x10(%rsp)
je 0x2cc29
movq %r14, %rdi
movq %rbp, %rsi
callq 0x2e880
movq %r13, %rdi
callq 0x1d786
jmp 0x2ca12
movq %rbx, %rdi
callq 0x22e24
movq %r12, %rdi
callq 0x2eb8e
leaq 0x78(%rsp), %rcx
movb $0x1, (%rcx)
leaq 0x10(%rsp), %rdi
leaq 0xc0(%rsp), %rdx
movq %r12, %rsi
movq 0x8(%rsp), %rbx
movq %rbx, %r8
callq 0x2e811
leaq 0x6(%rsp), %rcx
movb $0x1, (%rcx)
leaq 0x50(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
movq %r12, %rsi
movq %rbx, %r8
callq 0x2e811
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
leaq 0x50(%rsp), %rcx
leaq 0x98(%rsp), %r8
movq %r12, %rsi
movq %rbx, %r9
callq 0x2f125
leaq 0x38(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
andq $0x0, (%rdi)
movups %xmm0, (%r15)
andq $0x0, -0x8(%rdi)
callq 0x1d786
leaq 0x58(%rsp), %rdi
callq 0x1d786
leaq 0x18(%rsp), %rdi
callq 0x1d786
leaq 0xa0(%rsp), %rdi
callq 0x2e838
leaq 0xc0(%rsp), %rdi
callq 0x2e838
movq %r15, %rax
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x49d74(%rip), %rsi     # 0x768a4
leaq 0x10(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x1c814
leaq 0x4dd78(%rip), %rsi     # 0x7a8c1
leaq 0x50(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0x1c814
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x6(%rsp), %rcx
callq 0x1f298
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x3f724
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49d9b(%rip), %rsi     # 0x7693a
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rdx
callq 0x1c814
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49cdd(%rip), %rsi     # 0x768a4
leaq 0x10(%rsp), %rdi
leaq 0x6(%rsp), %rdx
callq 0x1c814
leaq 0x4dce4(%rip), %rsi     # 0x7a8c1
leaq 0x50(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x1c814
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x77(%rsp), %rcx
callq 0x1f298
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x3f724
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49d0a(%rip), %rsi     # 0x7693a
leaq 0x30(%rsp), %rdi
leaq 0x50(%rsp), %rdx
callq 0x1c814
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49c4c(%rip), %rsi     # 0x768a4
leaq 0x10(%rsp), %rdi
leaq 0xc0(%rsp), %rdx
callq 0x1c814
leaq 0x49de4(%rip), %rsi     # 0x76a55
leaq 0x50(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x1c814
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x98(%rsp), %rcx
callq 0x1f298
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x3f724
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49bda(%rip), %rsi     # 0x768a4
leaq 0x10(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x1c814
leaq 0x498e2(%rip), %rsi     # 0x765c5
leaq 0x50(%rsp), %rdi
leaq 0x98(%rsp), %rdx
callq 0x1c814
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x6(%rsp), %rcx
callq 0x1f298
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x3f724
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49d32(%rip), %rsi     # 0x76a6b
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rdx
callq 0x1c814
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49b43(%rip), %rsi     # 0x768a4
leaq 0x10(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x1c814
leaq 0x4979a(%rip), %rsi     # 0x76514
leaq 0x50(%rsp), %rdi
leaq 0x6(%rsp), %rdx
callq 0x1c814
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x7(%rsp), %rcx
callq 0x1f298
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x3f724
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
leaq 0x49ad7(%rip), %rsi     # 0x768a4
leaq 0x10(%rsp), %rdi
leaq 0xa0(%rsp), %rdx
callq 0x1c814
leaq 0x49c6f(%rip), %rsi     # 0x76a55
leaq 0x50(%rsp), %rdi
leaq 0x6(%rsp), %rdx
callq 0x1c814
leaq 0x78(%rsp), %rdi
leaq 0x50(%rsp), %rsi
pushq $0x1
popq %rdx
leaq 0x7(%rsp), %rcx
callq 0x1f298
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x3f724
leaq 0x30(%rsp), %rdx
movq %rbx, %rsi
movq 0x8(%rsp), %rcx
callq 0x25932
jmp 0x2cf8f
jmp 0x2cf9e
jmp 0x2cf8f
jmp 0x2cf9e
jmp 0x2cf8f
jmp 0x2cf9e
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x101d0
jmp 0x2ce62
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x1cea0
jmp 0x2ce80
jmp 0x2cfc1
jmp 0x2cfc1
jmp 0x2cfc1
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x101d0
jmp 0x2ce9e
jmp 0x2cfe1
jmp 0x2cfe1
jmp 0x2cfe1
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
jmp 0x2cf67
jmp 0x2d042
jmp 0x2d042
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
jmp 0x2cfe9
jmp 0x2d042
jmp 0x2d042
movq %rax, %rbx
jmp 0x2d052
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x1d786
jmp 0x2cee3
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
jmp 0x2d01c
jmp 0x2d023
jmp 0x2d023
movq %rax, %rbx
movq %r14, %rdi
callq 0x1f5c4
jmp 0x2cf07
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
jmp 0x2cf16
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x101d0
jmp 0x2cf25
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
jmp 0x2cfda
jmp 0x2d023
movq %rax, %rbx
movq %r14, %rdi
callq 0x1f5c4
jmp 0x2cf44
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
jmp 0x2cf53
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x101d0
jmp 0x2cf62
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x101d0
jmp 0x2d052
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x101d0
jmp 0x2cf83
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x1cea0
jmp 0x2cfb5
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x101d0
jmp 0x2cfa1
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x1cea0
jmp 0x2cfc4
jmp 0x2d042
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x101d0
jmp 0x2cfd5
movq %rax, %rbx
leaq 0x50(%rsp), %rdi
callq 0x101d0
jmp 0x2cfe4
jmp 0x2d042
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
jmp 0x2d026
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x101d0
jmp 0x2d045
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x101d0
jmp 0x2d019
jmp 0x2d016
jmp 0x2d023
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x101d0
jmp 0x2d038
jmp 0x2d035
jmp 0x2d042
movq %rax, %rbx
movq %r13, %rdi
callq 0x1d786
jmp 0x2d026
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x2e838
jmp 0x2d045
movq %rax, %rbx
movq %r13, %rdi
callq 0x1d786
jmp 0x2d045
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x2e838
movq %rbx, %rdi
callq 0x106f0