Completed
Push — master ( 19c440...922200 )
by Дмитрий
06:07 queued 02:02
created

AbstractOperator   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 40
ccs 17
cts 17
cp 1
rs 10
c 0
b 0
f 0
wmc 5
lcom 0
cbo 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
compare() 0 1 ?
B compile() 0 21 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
        $left = $context->getExpressionCompiler()->compile($expr->left);
31 48
        $right = $context->getExpressionCompiler()->compile($expr->right);
32
33 48
        switch ($left->getType()) {
34 48
            case CompiledExpression::INTEGER:
35 48
            case CompiledExpression::DOUBLE:
36 44
                switch ($right->getType()) {
37 44
                    case CompiledExpression::INTEGER:
38 44
                    case CompiledExpression::DOUBLE:
39 40
                        return new CompiledExpression(
40 40
                            CompiledExpression::BOOLEAN,
41 40
                            $this->compare($left->getValue(), $right->getValue())
42 40
                        );
43 4
                }
44 4
                break;
45 8
        }
46
47 8
        return new CompiledExpression(CompiledExpression::BOOLEAN);
48
    }
49
}
50