// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: parse_tt_program
int parse_tt_program( char *program, struct string *file, struct environment *env, char *message ) {
	int idx;
	struct string_list *list;
	struct function *init, *func;
	struct element *elem = parse_element( program, env->element_depth, message );
	if( elem ) {
		/* Create empty function for global evaluation. */
		init = new_function( "[Init]", NULL );
		if( init ) {
			init->file = file;
			file->reference_count++;
			init->env = env;
			/* Populate execution environment. */
			parse_keywords( declarations, elem, init, NULL, NULL, message );
			/* Parse function bodies. */
			for( idx = 0; idx < 32; idx++ ) {
				list = env->decls_index[ idx ];
				while( list && message[ 0 ] == 0 ) {
					if( list->str->type == FUNCTION ) {
						func = ( struct function * ) list->str;
						if( func->body ) {
							parse_function_body( func, NULL, message );
							func->body = NULL;
						}
					}
					list = list->next;
				}
			}
			unref_string( &init->str );
		}
		unref_string( &elem->str );
	}
	if( env->interrupted ) {
		strcpy( message, "Interrupted." );
	}
	return message[ 0 ] == 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movl 0x8(%rax), %esi
movq -0x20(%rbp), %rdx
callq 0x9d80
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x9d3f
leaq 0x11db7(%rip), %rdi     # 0x1b9d9
xorl %eax, %eax
movl %eax, %esi
callq 0x94a0
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
je 0x9d36
movq -0x10(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x18(%rbp), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x48(%rbp), %rsi
movq -0x38(%rbp), %rdx
movq -0x20(%rbp), %r9
leaq 0x174fd(%rip), %rdi     # 0x21170
xorl %eax, %eax
movl %eax, %r8d
movq %r8, %rcx
callq 0x9e50
movl $0x0, -0x24(%rbp)
cmpl $0x20, -0x24(%rbp)
jge 0x9d2d
movq -0x18(%rbp), %rax
movslq -0x24(%rbp), %rcx
movq 0x280(%rax,%rcx,8), %rax
movq %rax, -0x30(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x30(%rbp)
movb %al, -0x49(%rbp)
je 0x9cc1
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
sete %al
movb %al, -0x49(%rbp)
movb -0x49(%rbp), %al
testb $0x1, %al
jne 0x9cca
jmp 0x9d1d
movq -0x30(%rbp), %rax
movq (%rax), %rax
movsbl 0x14(%rax), %eax
cmpl $0x6, %eax
jne 0x9d0f
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0x9d0d
movq -0x40(%rbp), %rdi
movq -0x20(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0x9700
movq -0x40(%rbp), %rax
movq $0x0, 0x38(%rax)
jmp 0x9d0f
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
jmp 0x9ca5
jmp 0x9d1f
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x9c87
movq -0x38(%rbp), %rdi
callq 0x3c20
movq -0x48(%rbp), %rdi
callq 0x3c20
movq -0x18(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x9d59
movq -0x20(%rbp), %rdi
leaq 0x118f8(%rip), %rsi     # 0x1b64c
callq 0x3070
movq -0x20(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)