You are here

public function Twig_Node_Expression_GetAttr::compile in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/twig/twig/lib/Twig/Node/Expression/GetAttr.php \Twig_Node_Expression_GetAttr::compile()

Compiles the node to PHP.

Parameters

Twig_Compiler $compiler A Twig_Compiler instance:

Overrides Twig_Node::compile

File

vendor/twig/twig/lib/Twig/Node/Expression/GetAttr.php, line 19

Class

Twig_Node_Expression_GetAttr

Code

public function compile(Twig_Compiler $compiler) {
  if (function_exists('twig_template_get_attributes') && !$this
    ->getAttribute('disable_c_ext')) {
    $compiler
      ->raw('twig_template_get_attributes($this, ');
  }
  else {
    $compiler
      ->raw('$this->getAttribute(');
  }
  if ($this
    ->getAttribute('ignore_strict_check')) {
    $this
      ->getNode('node')
      ->setAttribute('ignore_strict_check', true);
  }
  $compiler
    ->subcompile($this
    ->getNode('node'));
  $compiler
    ->raw(', ')
    ->subcompile($this
    ->getNode('attribute'));

  // only generate optional arguments when needed (to make generated code more readable)
  $needFourth = $this
    ->getAttribute('ignore_strict_check');
  $needThird = $needFourth || $this
    ->getAttribute('is_defined_test');
  $needSecond = $needThird || Twig_Template::ANY_CALL !== $this
    ->getAttribute('type');
  $needFirst = $needSecond || null !== $this
    ->getNode('arguments');
  if ($needFirst) {
    if (null !== $this
      ->getNode('arguments')) {
      $compiler
        ->raw(', ')
        ->subcompile($this
        ->getNode('arguments'));
    }
    else {
      $compiler
        ->raw(', array()');
    }
  }
  if ($needSecond) {
    $compiler
      ->raw(', ')
      ->repr($this
      ->getAttribute('type'));
  }
  if ($needThird) {
    $compiler
      ->raw(', ')
      ->repr($this
      ->getAttribute('is_defined_test'));
  }
  if ($needFourth) {
    $compiler
      ->raw(', ')
      ->repr($this
      ->getAttribute('ignore_strict_check'));
  }
  $compiler
    ->raw(')');
}