/** * Compiles a function * * @param CompilationContext $compilationContext * @param FunctionDefinition $functionDefinition */ public function compileFunction(CompilationContext $compilationContext, FunctionDefinition $functionDefinition) { /** Make sure we do not produce calls like ZEPHIR_CALL_SELF */ $bakClassDefinition = $compilationContext->classDefinition; $compilationContext->classDefinition = null; $compilationContext->currentMethod = $functionDefinition; $codePrinter = $compilationContext->codePrinter; $codePrinter->output('PHP_FUNCTION(' . $functionDefinition->getInternalName() . ') {'); $functionDefinition->compile($compilationContext); $codePrinter->output('}'); $codePrinter->outputBlankLine(); /** Restore */ $compilationContext->classDefinition = $bakClassDefinition; $compilationContext->currentMethod = null; }
/** * Adds a function to the function definitions * * @param FunctionDefinition $func * @param array $statement */ public function addFunction(FunctionDefinition $func, $statement = null) { $funcName = strtolower($func->getInternalName()); if (isset($this->functionDefinitions[$funcName])) { throw new CompilerException("Function '" . $func->getCompleteName() . "' was defined more than one time", $statement); } $this->functionDefinitions[$funcName] = $func; }