// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: parse_try_statement
static struct element* parse_try_statement( struct element *elem,
	struct function *func, struct variables *vars, struct statement *prev, char *message ) {
	struct statement try_block = { 0 };
	struct block_statement *try_stmt = calloc( 1, sizeof( struct block_statement ) );
	if( try_stmt ) {
		try_stmt->stmt.dispose = dispose_block_statement;
		prev->next = &try_stmt->stmt;
		elem = elem->next;
		if( elem->child ) {
			parse_keywords_indexed( func->env->statements_index, elem->child, func, vars, &try_block, message );
			try_stmt->if_block = try_block.next;
		}
		if( message[ 0 ] == 0 ) {
			elem = parse_catch_block( elem->next, func, vars, try_stmt, message );
			while( message[ 0 ] == 0 && elem
			&& ( is_keyword( elem->str.string, "catch" ) || is_keyword( elem->str.string, "finally" ) ) ) {
				try_stmt = calloc( 1, sizeof( struct block_statement ) );
				if( try_stmt ) {
					try_stmt->stmt.dispose = dispose_block_statement;
					try_stmt->if_block = prev->next;
					prev->next = &try_stmt->stmt;
					elem = parse_catch_block( elem, func, vars, try_stmt, message );
				} else {
					strcpy( message, OUT_OF_MEMORY );
				}
			}
		}
	} else {
		strcpy( message, OUT_OF_MEMORY );
	}
	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 -0x50(%rbp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x30f0
movl $0x1, %edi
movl $0x48, %esi
callq 0x3120
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x58(%rbp)
je 0xe43b
movq -0x58(%rbp), %rax
leaq -0x93f5(%rip), %rcx     # 0x4ed0
movq %rcx, 0x18(%rax)
movq -0x58(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0xe324
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 -0x50(%rbp), %r8
callq 0x9050
movq -0x30(%rbp), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0xe439
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x58(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0x10530
movq %rax, -0x8(%rbp)
movq -0x28(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x59(%rbp)
jne 0xe3b5
xorl %eax, %eax
cmpq $0x0, -0x8(%rbp)
movb %al, -0x59(%rbp)
je 0xe3b5
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xd518(%rip), %rsi      # 0x1b899
callq 0x83b0
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x5a(%rbp)
jne 0xe3af
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xd4fe(%rip), %rsi      # 0x1b89f
callq 0x83b0
cmpl $0x0, %eax
setne %al
movb %al, -0x5a(%rbp)
movb -0x5a(%rbp), %al
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0xe3be
jmp 0xe437
movl $0x1, %edi
movl $0x48, %esi
callq 0x3120
movq %rax, -0x58(%rbp)
cmpq $0x0, -0x58(%rbp)
je 0xe422
movq -0x58(%rbp), %rax
leaq -0x9513(%rip), %rcx     # 0x4ed0
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x58(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x58(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0x10530
movq %rax, -0x8(%rbp)
jmp 0xe432
movq -0x28(%rbp), %rdi
movq 0x12d33(%rip), %rsi     # 0x21160
callq 0x3070
jmp 0xe355
jmp 0xe439
jmp 0xe44b
movq -0x28(%rbp), %rdi
movq 0x12d1a(%rip), %rsi     # 0x21160
callq 0x3070
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)