Completed
Pull Request — master (#149)
by Enrico
04:04
created

IssetOp::compile()   B

Complexity

Conditions 6
Paths 8

Size

Total Lines 23
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 6.0702

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 12
nc 8
nop 2
dl 0
loc 23
ccs 14
cts 16
cp 0.875
crap 6.0702
rs 8.5906
c 1
b 0
f 0
1
<?php
2
3
namespace PHPSA\Compiler\Expression;
4
5
use PHPSA\CompiledExpression;
6
use PHPSA\Context;
7
use PHPSA\Compiler\Expression;
8
use PHPSA\Compiler\Expression\AbstractExpressionCompiler;
9
use PhpParser\Node\Expr\Variable;
10
use PhpParser\Node\Name;
11
12
class IssetOp extends AbstractExpressionCompiler
13
{
14
    protected $name = 'PhpParser\Node\Expr\Isset_';
15
16
    /**
17
     * isset({expr]})
18
     *
19
     * @param \PhpParser\Node\Expr\Isset_ $expr
20
     * @param Context $context
21
     * @return CompiledExpression
22
     */
23 3
    protected function compile($expr, Context $context)
24
    {
25 3
        foreach ($expr->vars as $var) {
26 3
            if ($var instanceof Variable) {
27 3
                $varName = $var->name;
28
29 3
                if ($varName instanceof Name) {
30 3
                    $varName = $varName->parts[0];
31 3
                }
32
33 3
                $variable = $context->getSymbol($varName);
34
35 3
                if ($variable) {
36 2
                    $variable->incUse();
37
38 2
                    if ($variable->getValue() !== null) {
39 1
                        return CompiledExpression::fromZvalValue(true);
40
                    }
41 1
                }
42 2
                return CompiledExpression::fromZvalValue(false);
43
            }
44
        }
45
    }
46
}
47