// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: parse_function
struct function* parse_function( struct element *elem, char *name,
	struct function *parent, char *message ) {
	struct element *child;
	struct function *func;
	if( elem->line < 1 && !check_element_depth( elem, parent->env->element_depth ) ) {
		strcpy( message, "Maximum element depth exceeded." );
		return NULL;
	}
	func = new_function( name, parent );
	if( func ) {
		func->line = elem->line;
		func->file = parent->file;
		func->file->reference_count++;
		if( parent->library ) {
			func->library = parent->library;
			func->library->reference_count++;
		}
		func->body = elem->next;
		func->env = parent->env;
		child = elem->child;
		while( child && message[ 0 ] == 0 ) {
			child = add_function_parameter( func, child, message );
			if( child && child->str.string[ 0 ] == ',' && message[ 0 ] == 0 ) {
				child = child->next;
			}
		}
		if( message[ 0 ] ) {
			unref_string( &func->str );
			func = NULL;
		}
	} else {
		strcpy( message, OUT_OF_MEMORY );
	}
	return func;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x1, 0x28(%rax)
jge 0x92d8
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movl 0x8(%rax), %esi
callq 0x9430
cmpl $0x0, %eax
jne 0x92d8
movq -0x28(%rbp), %rdi
leaq 0x126f3(%rip), %rsi     # 0x1b9b9
callq 0x3070
movq $0x0, -0x8(%rbp)
jmp 0x941c
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x94a0
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x9404
movq -0x10(%rbp), %rax
movl 0x28(%rax), %ecx
movq -0x38(%rbp), %rax
movl %ecx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x9351
movq -0x20(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x38(%rbp), %rax
movq 0x30(%rax), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x30(%rbp)
movb %al, -0x39(%rbp)
je 0x9399
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
sete %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0x93a2
jmp 0x93e8
movq -0x38(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x28(%rbp), %rdx
callq 0x9580
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x93e6
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movsbl (%rax), %eax
cmpl $0x2c, %eax
jne 0x93e6
movq -0x28(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x93e6
movq -0x30(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x937d
movq -0x28(%rbp), %rax
cmpb $0x0, (%rax)
je 0x9402
movq -0x38(%rbp), %rdi
callq 0x3c20
movq $0x0, -0x38(%rbp)
jmp 0x9414
movq -0x28(%rbp), %rdi
movq 0x17d51(%rip), %rsi     # 0x21160
callq 0x3070
movq -0x38(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)