Checks if temporary parameters must be copied or not
public checkTempParameters ( zephir\CompilationContext $compilationContext ) | ||
$compilationContext | zephir\CompilationContext |
/** * * @param array $expression * @param Call $call * @param CompilationContext $context */ public function optimize(array $expression, Call $call, CompilationContext $context) { if (!isset($expression['parameters'])) { return false; } if (count($expression['parameters']) != 1) { throw new CompilerException("'phql_parse_phql' only accepts one parameter", $expression); } /** * Process the expected symbol to be returned */ $call->processExpectedReturn($context); $symbolVariable = $call->getSymbolVariable(); if ($symbolVariable->getType() != 'variable') { throw new CompilerException("Returned values by functions can only be assigned to variant variables", $expression); } if ($call->mustInitSymbolVariable()) { $symbolVariable->initVariant($context); } $symbolVariable->setDynamicTypes('array'); $resolvedParams = $call->getReadOnlyResolvedParams($expression['parameters'], $context, $expression); $context->headersManager->add('phalcon/mvc/model/query/scanner', HeadersManager::POSITION_LAST); $context->headersManager->add('phalcon/mvc/model/query/phql', HeadersManager::POSITION_LAST); $call->addCallStatusFlag($context); $context->codePrinter->output('ZEPHIR_LAST_CALL_STATUS = phql_parse_phql(' . $symbolVariable->getName() . ', ' . $resolvedParams[0] . ' TSRMLS_CC);'); $call->checkTempParameters($context); $call->addCallStatusOrJump($context); return new CompiledExpression('variable', $symbolVariable->getRealName(), $expression); }
/** * @param array $expression * @param Call $call * @param CompilationContext $context * @return CompiledExpression|mixed * @throws CompilerException */ public function optimize(array $expression, Call $call, CompilationContext $context) { if (!isset($expression['parameters'])) { throw new CompilerException("This function requires parameters", $expression); } if (count($expression['parameters']) != 1) { throw new CompilerException("This function only requires one parameter", $expression); } /** * Process the expected symbol to be returned */ $call->processExpectedReturn($context); $symbolVariable = $call->getSymbolVariable(true, $context); if (!$symbolVariable->isVariable()) { throw new CompilerException("Returned values by functions can only be assigned to variant variables", $expression); } /** * Add the last call status to the current symbol table */ $call->addCallStatusFlag($context); $context->headersManager->add('kernel/object'); $symbolVariable->setDynamicTypes('object'); $resolvedParams = $call->getReadOnlyResolvedParams($expression['parameters'], $context, $expression); if ($call->mustInitSymbolVariable()) { $symbolVariable->initVariant($context); } /** * Add the last call status to the current symbol table */ $call->addCallStatusFlag($context); $context->codePrinter->output('ZEPHIR_LAST_CALL_STATUS = zephir_create_instance(' . $symbolVariable->getName() . ', ' . $resolvedParams[0] . ' TSRMLS_CC);'); $call->checkTempParameters($context); $call->addCallStatusOrJump($context); return new CompiledExpression('variable', $symbolVariable->getRealName(), $expression); }