// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x4a, %edx
callq 0x20dd0
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x4a, %edx
callq 0x20dd0
movl %eax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x1f4c0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x49, %edx
callq 0x1ef90
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x38(%rbp), %edx
callq 0x20e20
movq -0x10(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0x218d8
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x1ee80
movq -0x20(%rbp), %rax
movq 0x38(%rax), %rdi
leaq 0x1acb8(%rip), %rsi     # 0x3c53f
callq 0x32d0
cmpl $0x0, %eax
jne 0x218a7
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq 0x1aca9(%rip), %rdx     # 0x3c549
movb $0x0, %al
callq 0x8b80
movq -0x20(%rbp), %rax
movq 0x38(%rax), %rdi
leaq 0x1acc8(%rip), %rsi     # 0x3c57e
callq 0x32d0
cmpl $0x0, %eax
jne 0x218d6
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
leaq 0x1acb4(%rip), %rdx     # 0x3c583
movb $0x0, %al
callq 0x8b80
jmp 0x218d8
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x1f2b0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rax
movq 0x38(%rax), %rcx
movl $0x4c, %edx
callq 0x21d10
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x1f4c0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x4d, %edx
callq 0x1ef90
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x4b, %edx
callq 0x1ef90
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x51, %edx
callq 0x20dd0
movl %eax, -0x3c(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x34(%rbp), %edx
callq 0x20e20
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x1f4c0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl $0x4b, %edx
callq 0x1ef90
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x3c(%rbp), %edx
callq 0x20e20
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x1f4c0
addq $0x40, %rsp
popq %rbp
retq
nopw (%rax,%rax)