Kahlan\Jit\Patcher\Monkey::_addClosingParenthesis PHP Method

_addClosingParenthesis() protected method

Add a closing parenthesis
protected _addClosingParenthesis ( $pos, integer $index, array $parent ) : boolean
$index integer The index of node in parent children.
$parent array The parent array.
return boolean Returns `true` if succeed, `false` otherwise.
    protected function _addClosingParenthesis($pos, $index, $parent)
    {
        $count = 0;
        $nodes = $parent->tree;
        $total = count($nodes);
        for ($i = $index; $i < $total; $i++) {
            $node = $nodes[$i];
            if (!$node->processable || $node->type !== 'code') {
                continue;
            }
            $code = $node->body;
            $len = strlen($code);
            while ($pos < $len) {
                if ($count === 0 && $code[$pos] === ';') {
                    $node->body = substr_replace($code, ');', $pos, 1);
                    return true;
                } elseif ($code[$pos] === '(' || $code[$pos] === '{') {
                    $count++;
                } elseif ($code[$pos] === ')' || $code[$pos] === '}') {
                    $count--;
                    if ($count === 0) {
                        $node->body = substr_replace($code, $code[$pos] . ')', $pos, 1);
                        return true;
                    }
                }
                $pos++;
            }
            $pos = 0;
        }
        return false;
    }