// File: wo3kie[P]calc/calc.cpp
// Function: ast::Calc::operator()(ast::Operation const&, double) const
double operator()( Operation const & x, double lhs ) const
        {
            if( x.operator_ == "&&" )
            {
                if( fabs( lhs ) < 0.000001 ){
                    return 0;
                }
                else{
                    return boost::apply_visitor( *this, x.operand_ );
                }
            }

            if( x.operator_ == "||" )
            {
                if( fabs( lhs ) < 0.000001 ){
                    return boost::apply_visitor( *this, x.operand_ );
                }
                else{
                    return lhs;
                }
            }

            double const rhs = boost::apply_visitor( *this, x.operand_ );

            if( x.operator_ == "+" ){
                return lhs + rhs;
            }

            if( x.operator_ == "-" ){
                return lhs - rhs;
            }

            if( x.operator_ == "*" ){
                return lhs * rhs;
            }

            if( x.operator_ == "/" ){
                return lhs / rhs;
            }

            if( x.operator_ == "<" ){
                return lhs < rhs;
            }

            if( x.operator_ == "<=" ){
                return lhs <= rhs;
            }

            if( x.operator_ == ">" ){
                return lhs > rhs;
            }

            if( x.operator_ == ">=" ){
                return lhs >= rhs;
            }

            if( x.operator_ == "==" ){
                return lhs == rhs;
            }

            if( x.operator_ == "!=" ){
                return lhs != rhs;
            }

            return 0;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x30fc(%rip), %rsi      # 0x4aa84
callq 0x48bd0
testb $0x1, %al
jne 0x47993
jmp 0x479d9
movsd -0x20(%rbp), %xmm1
movaps 0x2711(%rip), %xmm0     # 0x4a0b0
pand %xmm0, %xmm1
movsd 0x26a5(%rip), %xmm0     # 0x4a050
ucomisd %xmm1, %xmm0
jbe 0x479be
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq $0x20, %rsi
callq 0x47930
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x30a3(%rip), %rsi      # 0x4aa87
callq 0x48bd0
testb $0x1, %al
jne 0x479ef
jmp 0x47a37
movsd -0x20(%rbp), %xmm1
movaps 0x26b5(%rip), %xmm0     # 0x4a0b0
pand %xmm0, %xmm1
movsd 0x2649(%rip), %xmm0     # 0x4a050
ucomisd %xmm1, %xmm0
jbe 0x47a28
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq $0x20, %rsi
callq 0x47930
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
addq $0x20, %rsi
callq 0x47930
movsd %xmm0, -0x28(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x321d(%rip), %rsi      # 0x4ac75
callq 0x48bd0
testb $0x1, %al
jne 0x47a63
jmp 0x47a77
movsd -0x20(%rbp), %xmm0
addsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x3a0a(%rip), %rsi      # 0x4b48c
callq 0x48bd0
testb $0x1, %al
jne 0x47a8d
jmp 0x47aa1
movsd -0x20(%rbp), %xmm0
subsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x39e2(%rip), %rsi      # 0x4b48e
callq 0x48bd0
testb $0x1, %al
jne 0x47ab7
jmp 0x47acb
movsd -0x20(%rbp), %xmm0
mulsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x39ba(%rip), %rsi      # 0x4b490
callq 0x48bd0
testb $0x1, %al
jne 0x47ae1
jmp 0x47af5
movsd -0x20(%rbp), %xmm0
divsd -0x28(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x2f8d(%rip), %rsi      # 0x4aa8d
callq 0x48bd0
testb $0x1, %al
jne 0x47b0b
jmp 0x47b30
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
cmpltsd %xmm1, %xmm0
movsd 0x2516(%rip), %xmm1     # 0x4a038
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x2f4f(%rip), %rsi      # 0x4aa8a
callq 0x48bd0
testb $0x1, %al
jne 0x47b46
jmp 0x47b6b
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
cmplesd %xmm1, %xmm0
movsd 0x24db(%rip), %xmm1     # 0x4a038
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x2f1c(%rip), %rsi      # 0x4aa92
callq 0x48bd0
testb $0x1, %al
jne 0x47b81
jmp 0x47ba6
movsd -0x20(%rbp), %xmm1
movsd -0x28(%rbp), %xmm0
cmpltsd %xmm1, %xmm0
movsd 0x24a0(%rip), %xmm1     # 0x4a038
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x2ede(%rip), %rsi      # 0x4aa8f
callq 0x48bd0
testb $0x1, %al
jne 0x47bbc
jmp 0x47bde
movsd -0x20(%rbp), %xmm1
movsd -0x28(%rbp), %xmm0
cmplesd %xmm1, %xmm0
movsd 0x2465(%rip), %xmm1     # 0x4a038
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x2eae(%rip), %rsi      # 0x4aa97
callq 0x48bd0
testb $0x1, %al
jne 0x47bf4
jmp 0x47c16
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
cmpeqsd %xmm1, %xmm0
movsd 0x242d(%rip), %xmm1     # 0x4a038
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
movq -0x18(%rbp), %rdi
leaq 0x2e73(%rip), %rsi      # 0x4aa94
callq 0x48bd0
testb $0x1, %al
jne 0x47c2c
jmp 0x47c4e
movsd -0x20(%rbp), %xmm0
movsd -0x28(%rbp), %xmm1
cmpneqsd %xmm1, %xmm0
movsd 0x23f5(%rip), %xmm1     # 0x4a038
pand %xmm1, %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x47c56
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)