PHPCfg\Block::addParent PHP 메소드

addParent() 공개 메소드

public addParent ( Block $parent )
$parent Block
    public function addParent(Block $parent)
    {
        if (!in_array($parent, $this->parents, true)) {
            $this->parents[] = $parent;
        }
    }

Usage Example

예제 #1
0
 private function parseShortCircuiting(AstBinaryOp $expr, $isOr)
 {
     $result = new Temporary();
     $longBlock = new Block();
     $endBlock = new Block();
     $left = $this->readVariable($this->parseExprNode($expr->left));
     $if = $isOr ? $endBlock : $longBlock;
     $else = $isOr ? $longBlock : $endBlock;
     $this->block->children[] = new JumpIf($left, $if, $else);
     $longBlock->addParent($this->block);
     $endBlock->addParent($this->block);
     $this->block = $longBlock;
     $right = $this->readVariable($this->parseExprNode($expr->right));
     $boolCast = new Op\Expr\Cast\Bool_($right);
     $this->block->children[] = $boolCast;
     $this->block->children[] = new Jump($endBlock);
     $endBlock->addParent($this->block);
     $this->block = $endBlock;
     $phi = new Op\Phi($result, ['block' => $this->block]);
     $phi->addOperand(new Literal($isOr));
     $phi->addOperand($boolCast->result);
     $this->block->phi[] = $phi;
     $mode = $isOr ? Assertion::MODE_UNION : Assertion::MODE_INTERSECTION;
     foreach ($left->assertions as $assert) {
         $result->addAssertion($assert['var'], $assert['assertion'], $mode);
     }
     foreach ($right->assertions as $assert) {
         $result->addAssertion($assert['var'], $assert['assertion'], $mode);
     }
     return $result;
 }