You are here

public function Twig_Node_Expression_Name::compile in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 vendor/twig/twig/lib/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/twig/lib/Twig/Node/Expression/AssignName.php
Compiles the node to PHP.

File

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

Class

Twig_Node_Expression_Name

Code

public function compile(Twig_Compiler $compiler) {
  $name = $this
    ->getAttribute('name');
  $compiler
    ->addDebugInfo($this);
  if ($this
    ->getAttribute('is_defined_test')) {
    if ($this
      ->isSpecial()) {
      if ('_self' === $name) {
        @trigger_error(sprintf('Global variable "_self" is deprecated in %s at line %d', '?', $this
          ->getLine()), E_USER_DEPRECATED);
      }
      $compiler
        ->repr(true);
    }
    else {
      $compiler
        ->raw('array_key_exists(')
        ->repr($name)
        ->raw(', $context)');
    }
  }
  elseif ($this
    ->isSpecial()) {
    if ('_self' === $name) {
      @trigger_error(sprintf('Global variable "_self" is deprecated in %s at line %d', '?', $this
        ->getLine()), E_USER_DEPRECATED);
    }
    $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 (PHP_VERSION_ID >= 50400) {

      // 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(')');
    }
  }
}