if (\
count($args) < 1
) { throw new SyntaxError('The "block" function takes one argument (the block name).',
$line,
$this->parser->
getStream()->
getSourceContext());
} return new BlockReferenceExpression($args->
getNode(0
), \
count($args) > 1 ?
$args->
getNode(1
) : null,
$line);
case 'attribute':
$args =
$this->
parseArguments();
if (\
count($args) < 2
) { throw new SyntaxError('The "attribute" function takes at least two arguments (the variable and the attributes).',
$line,
$this->parser->
getStream()->
getSourceContext());
} return new GetAttrExpression($args->
getNode(0
),
$args->
getNode(1
), \
count($args) > 2 ?
$args->
getNode(2
) : null, Template::ANY_CALL,
$line);
default:
if (null !==
$alias =
$this->parser->
getImportedSymbol('function',
$name)) { $arguments =
new ArrayExpression([],
$line);
foreach ($this->
parseArguments() as $n) { $arguments->
addElement($n);
} $node =
new MethodCallExpression($alias['node'
],
$alias['name'
],
$arguments,
$line);
$node->
setAttribute('safe', true
);
return $node;
}