// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: execute_while_local_statement
static enum result execute_while_local_statement( struct statement *this,
	struct variables *vars, struct variable *result ) {
	struct environment *env = vars->func->env;
	struct variable *lhs = &vars->locals[ this->local ];
	struct variable *rhs = &vars->locals[ ( ( struct block_statement * ) this )->rhs ];
	int oper = ( ( struct block_statement * ) this )->oper;
	struct statement *stmt;
	enum result ret;
	while( 1 ) {
		if( lhs->string_value || rhs->string_value ) {
			return execute_while_statement( this, vars, result );
		} else {
			switch( oper ) {
				case '!': if( lhs->number_value == rhs->number_value ) return OKAY; break;
				case '(': if( lhs->number_value >  rhs->number_value ) return OKAY; break;
				case ')': if( lhs->number_value <  rhs->number_value ) return OKAY; break;
				case '<': if( lhs->number_value >= rhs->number_value ) return OKAY; break;
				case '=': if( lhs->number_value != rhs->number_value ) return OKAY; break;
				case '>': if( lhs->number_value <= rhs->number_value ) return OKAY; break;
				default: return execute_while_statement( this, vars, result );
			}
		}
		stmt = ( ( struct block_statement * ) this )->if_block;
		while( stmt && ( ret = stmt->execute( stmt, vars, result ) ) == OKAY ) {
			stmt = stmt->next;
		}
		if( stmt ) {
			if( ret == RETURN ) {
				return RETURN;
			} else if( ret == BREAK ) {
				return OKAY;
			} else if( ret == EXCEPTION ) {
				return EXCEPTION;
			}
		}
		if( env->interrupted ) {
			return throw_interrupted( vars, this->source );
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x40(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
movslq (%rcx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
movslq 0x3c(%rcx), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movl 0x38(%rax), %eax
movl %eax, -0x3c(%rbp)
movq -0x30(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0xff99
movq -0x38(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xffb2
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xfdd0
movl %eax, -0x4(%rbp)
jmp 0x10154
movl -0x3c(%rbp), %eax
addl $-0x21, %eax
movl %eax, %ecx
movq %rcx, -0x58(%rbp)
subl $0x1d, %eax
ja 0x10089
movq -0x58(%rbp), %rax
leaq 0xb4c6(%rip), %rcx      # 0x1b498
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x30(%rbp), %rax
movl (%rax), %eax
movq -0x38(%rbp), %rcx
cmpl (%rcx), %eax
jne 0xfff5
movl $0x1, -0x4(%rbp)
jmp 0x10154
jmp 0x100a2
movq -0x30(%rbp), %rax
movl (%rax), %eax
movq -0x38(%rbp), %rcx
cmpl (%rcx), %eax
jle 0x10014
movl $0x1, -0x4(%rbp)
jmp 0x10154
jmp 0x100a2
movq -0x30(%rbp), %rax
movl (%rax), %eax
movq -0x38(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x10033
movl $0x1, -0x4(%rbp)
jmp 0x10154
jmp 0x100a2
movq -0x30(%rbp), %rax
movl (%rax), %eax
movq -0x38(%rbp), %rcx
cmpl (%rcx), %eax
jl 0x1004f
movl $0x1, -0x4(%rbp)
jmp 0x10154
jmp 0x100a2
movq -0x30(%rbp), %rax
movl (%rax), %eax
movq -0x38(%rbp), %rcx
cmpl (%rcx), %eax
je 0x1006b
movl $0x1, -0x4(%rbp)
jmp 0x10154
jmp 0x100a2
movq -0x30(%rbp), %rax
movl (%rax), %eax
movq -0x38(%rbp), %rcx
cmpl (%rcx), %eax
jg 0x10087
movl $0x1, -0x4(%rbp)
jmp 0x10154
jmp 0x100a2
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xfdd0
movl %eax, -0x4(%rbp)
jmp 0x10154
jmp 0x100a4
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x48(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x48(%rbp)
movb %al, -0x59(%rbp)
je 0x100de
movq -0x48(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x48(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq *%rax
movl %eax, -0x4c(%rbp)
cmpl $0x1, %eax
sete %al
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x100e7
jmp 0x100f5
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x100b0
cmpq $0x0, -0x48(%rbp)
je 0x1012f
cmpl $0x2, -0x4c(%rbp)
jne 0x1010b
movl $0x2, -0x4(%rbp)
jmp 0x10154
cmpl $0x3, -0x4c(%rbp)
jne 0x1011a
movl $0x1, -0x4(%rbp)
jmp 0x10154
cmpl $0x0, -0x4c(%rbp)
jne 0x10129
movl $0x0, -0x4(%rbp)
jmp 0x10154
jmp 0x1012b
jmp 0x1012d
jmp 0x1012f
movq -0x28(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x1014f
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x4e70
movl %eax, -0x4(%rbp)
jmp 0x10154
jmp 0xff83
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)