$stream->
expect(/* Token::BLOCK_END_TYPE */ 3
);
$this->parser->
pushLocalScope();
$body =
$this->parser->
subparse([$this, 'decideBlockEnd'
], true
);
if ($token =
$stream->
nextIf(/* Token::NAME_TYPE */ 5
)) { $value =
$token->
getValue();
if ($value !=
$name) { throw new SyntaxError(sprintf('Expected endmacro for macro "%s" (but "%s" given).',
$name,
$value),
$stream->
getCurrent()->
getLine(),
$stream->
getSourceContext());
} } $this->parser->
popLocalScope();
$stream->
expect(/* Token::BLOCK_END_TYPE */ 3
);
$this->parser->
setMacro($name,
new MacroNode($name,
new BodyNode([$body]),
$arguments,
$lineno,
$this->
getTag()));
return new Node();
} public function decideBlockEnd(Token
$token): bool
{ return $token->
test('endmacro'
);
}