// File: /workspace/github_c_makefile_star2_O1/ccxvii[P]mujs/./jscompile.c
// Function: ctrycatchfinally
static void ctrycatchfinally(JF, js_Ast *trystm, js_Ast *catchvar, js_Ast *catchstm, js_Ast *finallystm)
{
	int L1, L2, L3;
	L1 = emitjump(J, F, OP_TRY);
	{
		/* if we get here, we have caught an exception in the try block */
		L2 = emitjump(J, F, OP_TRY);
		{
			/* if we get here, we have caught an exception in the catch block */
			cstm(J, F, finallystm); /* inline finally block */
			emit(J, F, OP_THROW); /* rethrow exception */
		}
		label(J, F, L2);
		if (F->strict) {
			checkfutureword(J, F, catchvar);
			if (!strcmp(catchvar->string, "arguments"))
				jsC_error(J, catchvar, "redefining 'arguments' is not allowed in strict mode");
			if (!strcmp(catchvar->string, "eval"))
				jsC_error(J, catchvar, "redefining 'eval' is not allowed in strict mode");
		}
		emitline(J, F, catchvar);
		emitstring(J, F, OP_CATCH, catchvar->string);
		cstm(J, F, catchstm);
		emit(J, F, OP_ENDCATCH);
		emit(J, F, OP_ENDTRY);
		L3 = emitjump(J, F, OP_JUMP); /* skip past the try block to the finally block */
	}
	label(J, F, L1);
	cstm(J, F, trystm);
	emit(J, F, OP_ENDTRY);
	label(J, F, L3);
	cstm(J, F, finallystm);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, %r14
movq %r8, %rbp
movq %rcx, %r13
movq %rdx, 0x10(%rsp)
movq %rsi, %r15
movq %rdi, %rbx
movl 0x5c(%rsi), %edx
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4a, %edx
callq 0x1d8f3
movslq 0x2c(%r15), %rax
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x1d8f3
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4a, %edx
callq 0x1d8f3
movslq 0x2c(%r15), %r12
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x1d955
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x49, %edx
callq 0x1d8f3
movl 0x2c(%r15), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1f4c7
movq 0x20(%r15), %rcx
movw %ax, (%rcx,%r12,2)
cmpl $0x0, 0x10(%r15)
je 0x1f3b8
movq %rbx, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x1d64b
movq 0x38(%r13), %r12
leaq 0x14b03(%rip), %rsi     # 0x33e94
movq %r12, %rdi
callq 0x32f0
testl %eax, %eax
je 0x1f4d8
leaq 0x14b2b(%rip), %rsi     # 0x33ed3
movq %r12, %rdi
callq 0x32f0
testl %eax, %eax
je 0x1f4e1
movl 0x4(%r13), %eax
movl %eax, 0x5c(%r15)
movq 0x38(%r13), %rcx
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4c, %edx
callq 0x1f7fe
movq %rbx, %rdi
movq %r15, %rsi
movq %rbp, %rdx
callq 0x1d955
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4d, %edx
callq 0x1d8f3
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4b, %edx
callq 0x1d8f3
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x51, %edx
callq 0x1d8f3
movslq 0x2c(%r15), %r12
movq %rbx, %rdi
movq %r15, %rsi
xorl %edx, %edx
callq 0x1d8f3
movl 0x2c(%r15), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1f4c7
movq 0x20(%r15), %rcx
movq 0x8(%rsp), %rdx
movw %ax, (%rcx,%rdx,2)
movq %rbx, %rdi
movq %r15, %rsi
movq 0x10(%rsp), %rdx
callq 0x1d955
movl 0x5c(%r15), %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1d8f3
movq %rbx, %rdi
movq %r15, %rsi
movl $0x4b, %edx
callq 0x1d8f3
movl 0x2c(%r15), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1f4c7
movq 0x20(%r15), %rcx
movw %ax, (%rcx,%r12,2)
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x1d955
leaq 0x14c7c(%rip), %rsi     # 0x3414a
movq %rbx, %rdi
xorl %eax, %eax
callq 0xcc25
leaq 0x149bf(%rip), %rdx     # 0x33e9e
jmp 0x1f4e8
leaq 0x149f0(%rip), %rdx     # 0x33ed8
movq %rbx, %rdi
movq %r13, %rsi
xorl %eax, %eax
callq 0x8de3