PHPSA\Definition\ClassDefinition::compile PHP Method

compile() public method

public compile ( Context $context )
$context PHPSA\Context
    public function compile(Context $context)
    {
        if ($this->compiled) {
            return true;
        }
        $this->compiled = true;
        $context->setFilepath($this->filepath);
        $context->setScope($this);
        $context->getEventManager()->fire(Event\StatementBeforeCompile::EVENT_NAME, new Event\StatementBeforeCompile($this->statement, $context));
        // Compile event for properties
        foreach ($this->properties as $property) {
            if (!$property->default) {
                continue;
            }
            // fire expression event for property default
            $context->getEventManager()->fire(Event\ExpressionBeforeCompile::EVENT_NAME, new Event\ExpressionBeforeCompile($property->default, $context));
        }
        // Compile event for PropertyProperty
        foreach ($this->properties as $property) {
            $context->getEventManager()->fire(Event\StatementBeforeCompile::EVENT_NAME, new Event\StatementBeforeCompile($property, $context));
        }
        // Compile event for constants
        foreach ($this->constants as $const) {
            $context->getEventManager()->fire(Event\StatementBeforeCompile::EVENT_NAME, new Event\StatementBeforeCompile($const, $context));
        }
        // Compiler event for property statements
        foreach ($this->propertyStatements as $prop) {
            $context->getEventManager()->fire(Event\StatementBeforeCompile::EVENT_NAME, new Event\StatementBeforeCompile($prop, $context));
        }
        // Compile each method
        foreach ($this->methods as $method) {
            $context->clearSymbols();
            if (!$method->isStatic()) {
                $thisPtr = new Variable('this', $this, CompiledExpression::OBJECT);
                $thisPtr->incGets();
                $context->addVariable($thisPtr);
            }
            $method->compile($context);
            $symbols = $context->getSymbols();
            if (count($symbols) > 0) {
                foreach ($symbols as $name => $variable) {
                    if ($variable->isUnused()) {
                        $context->warning('unused-' . $variable->getSymbolType(), sprintf('Unused ' . $variable->getSymbolType() . ' $%s in method %s()', $variable->getName(), $method->getName()));
                    }
                }
            }
        }
        return $this;
    }