protected function compile($expr, Context $context)
{
$compiler = $context->getExpressionCompiler();
if ($expr->items === []) {
return new CompiledExpression(CompiledExpression::ARR, []);
}
$resultArray = [];
foreach ($expr->items as $item) {
$compiledValueResult = $compiler->compile($item->value);
if ($item->key) {
$compiledKeyResult = $compiler->compile($item->key);
switch ($compiledKeyResult->getType()) {
case CompiledExpression::INTEGER:
case CompiledExpression::DOUBLE:
case CompiledExpression::BOOLEAN:
case CompiledExpression::NULL:
case CompiledExpression::STRING:
$resultArray[$compiledKeyResult->getValue()] = $compiledValueResult->getValue();
}
} else {
$resultArray[] = $compiledValueResult->getValue();
}
}
return new CompiledExpression(CompiledExpression::ARR, $resultArray);
}