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

IssetOp   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 6

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 40
ccs 18
cts 18
cp 1
rs 10
wmc 6
lcom 0
cbo 6

1 Method

Rating   Name   Duplication   Size   Complexity  
B compile() 0 28 6
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
        $result = false;
26
27 3
        foreach ($expr->vars as $var) {
28 3
            if ($var instanceof Variable) {
29 3
                $varName = $var->name;
30
31 3
                if ($varName instanceof Name) {
32 3
                    $varName = $varName->parts[0];
33 3
                }
34
35 3
                $variable = $context->getSymbol($varName);
36
37 3
                if ($variable) {
38 2
                    $variable->incUse();
39
40 2
                    if ($variable->getValue() !== null) {
41 1
                        $result = true;
42 1
                        continue; // this variable is set, continue
43
                    }
44 1
                }
45 2
                return CompiledExpression::fromZvalValue(false); // one of the vars is not set
46
            }
47 1
        }
48
49 1
        return CompiledExpression::fromZvalValue($result); // if all are set return true, else false
50
    }
51
}
52