PHPSA\Definition\ClassMethod::compile PHP Method

compile() public method

public compile ( Context $context ) : boolean | null
$context PHPSA\Context
return boolean | null
    public function compile(Context $context)
    {
        $context->getEventManager()->fire(Event\StatementBeforeCompile::EVENT_NAME, new Event\StatementBeforeCompile($this->statement, $context));
        $this->compiled = true;
        $context->scopePointer = $this->getPointer();
        /**
         * It's not needed to compile empty method via it's abstract
         */
        if ($this->isAbstract()) {
            /** @var ClassDefinition $scope */
            $scope = $context->scope;
            if (!$scope->isAbstract()) {
                $context->notice('not-abstract-class-with-abstract-method', 'Class must be abstract', $this->statement);
            }
            return true;
        }
        if ($this->statement->params) {
            foreach ($this->statement->params as $parameter) {
                $type = CompiledExpression::UNKNOWN;
                if ($parameter->type) {
                    if (is_string($parameter->type)) {
                        $type = Types::getType($parameter->type);
                    } elseif ($parameter->type instanceof Node\Name) {
                        $type = CompiledExpression::OBJECT;
                    }
                }
                $context->addVariable(new Parameter($parameter->name, null, $type, $parameter->byRef));
            }
        }
        foreach ($this->statement->stmts as $st) {
            \PHPSA\nodeVisitorFactory($st, $context);
        }
    }