You are here

public function Twig_Node_Expression_Name::compile in Translation template extractor 6.3

Same name and namespace in other branches
  1. 7.3 vendor/Twig/Node/Expression/Name.php \Twig_Node_Expression_Name::compile()

Compiles the node to PHP.

Parameters

Twig_Compiler $compiler A Twig_Compiler instance:

Overrides Twig_Node::compile

1 method overrides Twig_Node_Expression_Name::compile()
Twig_Node_Expression_AssignName::compile in vendor/Twig/Node/Expression/AssignName.php
Compiles the node to PHP.

File

vendor/Twig/Node/Expression/Name.php, line 25

Class

Twig_Node_Expression_Name

Code

public function compile(Twig_Compiler $compiler) {
  $name = $this
    ->getAttribute('name');
  if ($this
    ->getAttribute('is_defined_test')) {
    if ($this
      ->isSpecial()) {
      $compiler
        ->repr(true);
    }
    else {
      $compiler
        ->raw('array_key_exists(')
        ->repr($name)
        ->raw(', $context)');
    }
  }
  elseif ($this
    ->isSpecial()) {
    $compiler
      ->raw($this->specialVars[$name]);
  }
  elseif ($this
    ->getAttribute('always_defined')) {
    $compiler
      ->raw('$context[')
      ->string($name)
      ->raw(']');
  }
  else {

    // remove the non-PHP 5.4 version when PHP 5.3 support is dropped
    // as the non-optimized version is just a workaround for slow ternary operator
    // when the context has a lot of variables
    if (version_compare(phpversion(), '5.4.0RC1', '>=')) {

      // PHP 5.4 ternary operator performance was optimized
      $compiler
        ->raw('(isset($context[')
        ->string($name)
        ->raw(']) ? $context[')
        ->string($name)
        ->raw('] : ');
      if ($this
        ->getAttribute('ignore_strict_check') || !$compiler
        ->getEnvironment()
        ->isStrictVariables()) {
        $compiler
          ->raw('null)');
      }
      else {
        $compiler
          ->raw('$this->getContext($context, ')
          ->string($name)
          ->raw('))');
      }
    }
    else {
      $compiler
        ->raw('$this->getContext($context, ')
        ->string($name);
      if ($this
        ->getAttribute('ignore_strict_check')) {
        $compiler
          ->raw(', true');
      }
      $compiler
        ->raw(')');
    }
  }
}