// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: parse_catch_block
static struct element* parse_catch_block( struct element *elem,
	struct function *func, struct variables *vars, struct block_statement *try_stmt, char *message ) {
	struct local_variable *local;
	struct statement block = { 0 };
	if( strchr( "Cc", elem->str.string[ 0 ] ) ) {
		elem = elem->next;
		if( elem->str.string[ 0 ] == '(' ) {
			parse_variable_declaration( elem, func, vars, NULL, add_local_variable, message );
			if( message[ 0 ] == 0 ) {
				elem = elem->next;
			}
		}
		if( message[ 0 ] == 0 ) {
			local = get_local_variable( func->variable_decls, elem->str.string, "" );
			if( local ) {
				try_stmt->stmt.local = local->index;
				try_stmt->stmt.execute = execute_try_catch_statement;
			} else {
				sprintf( message, "Undeclared local variable '%.64s' on line %d.", elem->str.string, elem->line );
			}
		}
	} else {
		try_stmt->stmt.execute = execute_try_finally_statement;
	}
	if( message[ 0 ] == 0 ) {
		elem = elem->next;
		if( elem->child ) {
			parse_keywords_indexed( func->env->statements_index, elem->child, func, vars, &block, message );
			try_stmt->else_block = block.next;
		}
		if( message[ 0 ] == 0 ) {
			elem = elem->next;
		}
	}
	return elem;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
leaq -0x58(%rbp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x30f0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %esi
leaq 0xb339(%rip), %rdi      # 0x1b8a7
callq 0x30d0
cmpq $0x0, %rax
je 0x10648
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x28, %eax
jne 0x105d3
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x28(%rbp), %r9
xorl %eax, %eax
movl %eax, %ecx
leaq -0x1bd4(%rip), %r8      # 0xe9e0
callq 0xcd60
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x105d1
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x105d3
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x10646
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0xaa60(%rip), %rdx      # 0x1b056
callq 0x74c0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x10623
movq -0x30(%rbp), %rax
movl (%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movq -0x20(%rbp), %rax
leaq 0xc3(%rip), %rcx        # 0x106e0
movq %rcx, 0x10(%rax)
jmp 0x10644
movq -0x28(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdx
movq -0x8(%rbp), %rax
movl 0x28(%rax), %ecx
leaq 0xbcbf(%rip), %rsi      # 0x1c2fc
movb $0x0, %al
callq 0x31f0
jmp 0x10646
jmp 0x10657
movq -0x20(%rbp), %rax
leaq 0x1bd(%rip), %rcx       # 0x10810
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x106cc
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x106b2
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rdi
addq $0x80, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
movq -0x28(%rbp), %r9
leaq -0x58(%rbp), %r8
callq 0x9050
movq -0x38(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x106ca
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x106cc
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)