You are here

public function Twig_TokenParser_Set::parse in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/twig/twig/lib/Twig/TokenParser/Set.php \Twig_TokenParser_Set::parse()

Parses a token and returns a node.

Parameters

Twig_Token $token A Twig_Token instance:

Return value

Twig_NodeInterface A Twig_NodeInterface instance

Throws

Twig_Error_Syntax

Overrides Twig_TokenParserInterface::parse

File

vendor/twig/twig/lib/Twig/TokenParser/Set.php, line 31

Class

Twig_TokenParser_Set
Defines a variable.

Code

public function parse(Twig_Token $token) {
  $lineno = $token
    ->getLine();
  $stream = $this->parser
    ->getStream();
  $names = $this->parser
    ->getExpressionParser()
    ->parseAssignmentExpression();
  $capture = false;
  if ($stream
    ->nextIf(Twig_Token::OPERATOR_TYPE, '=')) {
    $values = $this->parser
      ->getExpressionParser()
      ->parseMultitargetExpression();
    $stream
      ->expect(Twig_Token::BLOCK_END_TYPE);
    if (count($names) !== count($values)) {
      throw new Twig_Error_Syntax('When using set, you must have the same number of variables and assignments.', $stream
        ->getCurrent()
        ->getLine(), $stream
        ->getFilename());
    }
  }
  else {
    $capture = true;
    if (count($names) > 1) {
      throw new Twig_Error_Syntax('When using set with a block, you cannot have a multi-target.', $stream
        ->getCurrent()
        ->getLine(), $stream
        ->getFilename());
    }
    $stream
      ->expect(Twig_Token::BLOCK_END_TYPE);
    $values = $this->parser
      ->subparse(array(
      $this,
      'decideBlockEnd',
    ), true);
    $stream
      ->expect(Twig_Token::BLOCK_END_TYPE);
  }
  return new Twig_Node_Set($capture, $names, $values, $lineno, $this
    ->getTag());
}