// File: /workspace/github_c_makefile_star2_O0/martincameron[P]towntalk/towntalk.c
// Function: evaluate_logical_expression
static enum result evaluate_logical_expression( struct expression *this,
	struct variables *vars, struct variable *result ) {
	int value;
	struct variable var = { 0, NULL };
	struct expression *parameter = this->parameters;
	enum result ret = parameter->evaluate( parameter, vars, &var );
	if( ret ) {
		value = var.number_value || var.string_value;
		dispose_variable( &var );
		if( this->index == '!' ) {
			value = !value;
		} else {
			while( parameter->next ) {
				parameter = parameter->next;
				if( this->index == '&' ) {
					if( value ) {
						ret = parameter->evaluate( parameter, vars, &var );
						if( ret ) {
							value = var.number_value || var.string_value;
							dispose_variable( &var );
						} else {
							return ret;
						}
					} else {
						break;
					}
				} else {
					if( value ) {
						break;
					} else {
						ret = parameter->evaluate( parameter, vars, &var );
						if( ret ) {
							value = var.number_value || var.string_value;
							dispose_temporary( &var );
						} else {
							return ret;
						}
					}
				}
			}
		}
		result->number_value = value;
	}
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
leaq -0x38(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0x30f0
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x40(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq *%rax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x114c2
movb $0x1, %al
cmpl $0x0, -0x38(%rbp)
movb %al, -0x45(%rbp)
jne 0x11399
cmpq $0x0, -0x30(%rbp)
setne %al
movb %al, -0x45(%rbp)
movb -0x45(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x24(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3be0
movq -0x10(%rbp), %rax
cmpl $0x21, 0x4(%rax)
jne 0x113cd
cmpl $0x0, -0x24(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x24(%rbp)
jmp 0x114b9
jmp 0x113cf
movq -0x40(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x114b7
movq -0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x26, 0x4(%rax)
jne 0x11453
cmpl $0x0, -0x24(%rbp)
je 0x1144f
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x40(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq *%rax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x11445
movb $0x1, %al
cmpl $0x0, -0x38(%rbp)
movb %al, -0x46(%rbp)
jne 0x1142f
cmpq $0x0, -0x30(%rbp)
setne %al
movb %al, -0x46(%rbp)
movb -0x46(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x24(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3be0
jmp 0x1144d
movl -0x44(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x114c8
jmp 0x11451
jmp 0x114b7
jmp 0x114b2
cmpl $0x0, -0x24(%rbp)
je 0x1145b
jmp 0x114b7
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x40(%rbp), %rdi
movq -0x18(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq *%rax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0x114a6
movb $0x1, %al
cmpl $0x0, -0x38(%rbp)
movb %al, -0x47(%rbp)
jne 0x11490
cmpq $0x0, -0x30(%rbp)
setne %al
movb %al, -0x47(%rbp)
movb -0x47(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x24(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x3ce0
jmp 0x114ae
movl -0x44(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x114c8
jmp 0x114b0
jmp 0x114b2
jmp 0x113cf
jmp 0x114b9
movl -0x24(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl -0x44(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)