Completed
Push — master ( 090344...474eef )
by Дмитрий
02:42
created

AbstractOperator::compile()   B

Complexity

Conditions 5
Paths 7

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 19
CRAP Score 5

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 24
ccs 19
cts 19
cp 1
rs 8.5126
cc 5
eloc 16
nc 7
nop 2
crap 5
1
<?php
2
3
namespace PHPSA\Compiler\Expression\Operators\Comparison;
4
5
use PHPSA\CompiledExpression;
6
use PHPSA\Context;
7
use PHPSA\Compiler\Expression;
8
use PHPSA\Compiler\Expression\AbstractExpressionCompiler;
9
10
abstract class AbstractOperator extends AbstractExpressionCompiler
11
{
12
    /**
13
     * Do compare
14
     *
15
     * @param $left
16
     * @param $right
17
     * @return boolean
18
     */
19
    abstract public function compare($left, $right);
20
21
    /**
22
     * {expr} $operator {expr}
23
     *
24
     * @param \PhpParser\Node\Expr\BinaryOp $expr
25
     * @param Context $context
26
     * @return CompiledExpression
27
     */
28 48
    protected function compile($expr, Context $context)
29
    {
30 48
        $expression = new Expression($context);
31 48
        $left = $expression->compile($expr->left);
32
33 48
        $expression = new Expression($context);
34 48
        $right = $expression->compile($expr->right);
35
36 48
        switch ($left->getType()) {
37 48
            case CompiledExpression::INTEGER:
38 48
            case CompiledExpression::DOUBLE:
39 44
                switch ($right->getType()) {
40 44
                    case CompiledExpression::INTEGER:
41 44
                    case CompiledExpression::DOUBLE:
42 40
                        return new CompiledExpression(
43 40
                            CompiledExpression::BOOLEAN,
44 40
                            $this->compare($left->getValue(), $right->getValue())
45 40
                        );
46 4
                }
47 4
                break;
48 8
        }
49
50 8
        return new CompiledExpression(CompiledExpression::BOOLEAN);
51
    }
52
}
53