// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: execute_while_const_statement
static enum result execute_while_const_statement( struct statement *this,
	struct variables *vars, struct variable *result ) {
	struct environment *env = vars->func->env;
	struct variable *lhs = &vars->locals[ this->local ];
	number rhs = ( ( struct block_statement * ) this )->num;
	int oper = ( ( struct block_statement * ) this )->oper;
	struct statement *stmt;
	enum result ret;
	while( 1 ) {
		if( lhs->string_value ) {
			if( oper ) {
				return execute_while_statement( this, vars, result );
			}
		} else {
			switch( oper ) {
				case  0 : if( lhs->number_value == 0 ) return OKAY; break;
				case '!': if( lhs->number_value == rhs ) return OKAY; break;
				case '(': if( lhs->number_value >  rhs ) return OKAY; break;
				case ')': if( lhs->number_value <  rhs ) return OKAY; break;
				case '<': if( lhs->number_value >= rhs ) return OKAY; break;
				case '=': if( lhs->number_value != rhs ) return OKAY; break;
				case '>': if( lhs->number_value <= rhs ) 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 -0x10(%rbp), %rax
movl 0x40(%rax), %eax
movl %eax, -0x34(%rbp)
movq -0x10(%rbp), %rax
movl 0x38(%rax), %eax
movl %eax, -0x38(%rbp)
movq -0x30(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x101e1
cmpl $0x0, -0x38(%rbp)
je 0x101dc
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xfdd0
movl %eax, -0x4(%rbp)
jmp 0x10384
jmp 0x102d4
movl -0x38(%rbp), %eax
movq %rax, -0x50(%rbp)
subq $0x3e, %rax
ja 0x102b9
movq -0x50(%rbp), %rax
leaq 0xb313(%rip), %rcx      # 0x1b510
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x30(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x1021b
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl -0x34(%rbp), %eax
jne 0x10237
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl -0x34(%rbp), %eax
jle 0x10253
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl -0x34(%rbp), %eax
jge 0x1026c
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl -0x34(%rbp), %eax
jl 0x10285
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl -0x34(%rbp), %eax
je 0x1029e
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl -0x34(%rbp), %eax
jg 0x102b7
movl $0x1, -0x4(%rbp)
jmp 0x10384
jmp 0x102d2
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0xfdd0
movl %eax, -0x4(%rbp)
jmp 0x10384
jmp 0x102d4
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x40(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x40(%rbp)
movb %al, -0x51(%rbp)
je 0x1030e
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x40(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq *%rax
movl %eax, -0x44(%rbp)
cmpl $0x1, %eax
sete %al
movb %al, -0x51(%rbp)
movb -0x51(%rbp), %al
testb $0x1, %al
jne 0x10317
jmp 0x10325
movq -0x40(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0x102e0
cmpq $0x0, -0x40(%rbp)
je 0x1035f
cmpl $0x2, -0x44(%rbp)
jne 0x1033b
movl $0x2, -0x4(%rbp)
jmp 0x10384
cmpl $0x3, -0x44(%rbp)
jne 0x1034a
movl $0x1, -0x4(%rbp)
jmp 0x10384
cmpl $0x0, -0x44(%rbp)
jne 0x10359
movl $0x0, -0x4(%rbp)
jmp 0x10384
jmp 0x1035b
jmp 0x1035d
jmp 0x1035f
movq -0x28(%rbp), %rax
cmpb $0x0, 0x18(%rax)
je 0x1037f
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x4e70
movl %eax, -0x4(%rbp)
jmp 0x10384
jmp 0x101b2
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)