Esempio n. 1
0
 public function compile(IfwPsn_Vendor_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(')');
         }
     }
 }
Esempio n. 2
0
 public function compile(IfwPsn_Vendor_Twig_Compiler $compiler)
 {
     $name = $this->getAttribute('name');
     $test = $compiler->getEnvironment()->getTest($name);
     $this->setAttribute('name', $name);
     $this->setAttribute('type', 'test');
     $this->setAttribute('thing', $test);
     if ($test instanceof IfwPsn_Vendor_Twig_TestCallableInterface || $test instanceof IfwPsn_Vendor_Twig_SimpleTest) {
         $this->setAttribute('callable', $test->getCallable());
     }
     $this->compileCallable($compiler);
 }
Esempio n. 3
0
 public function compile(IfwPsn_Vendor_Twig_Compiler $compiler)
 {
     $name = $this->getNode('filter')->getAttribute('value');
     $filter = $compiler->getEnvironment()->getFilter($name);
     $this->setAttribute('name', $name);
     $this->setAttribute('type', 'filter');
     $this->setAttribute('thing', $filter);
     $this->setAttribute('needs_environment', $filter->needsEnvironment());
     $this->setAttribute('needs_context', $filter->needsContext());
     $this->setAttribute('arguments', $filter->getArguments());
     if ($filter instanceof IfwPsn_Vendor_Twig_FilterCallableInterface || $filter instanceof IfwPsn_Vendor_Twig_SimpleFilter) {
         $this->setAttribute('callable', $filter->getCallable());
     }
     $this->compileCallable($compiler);
 }
Esempio n. 4
0
 protected function compileClassHeader(IfwPsn_Vendor_Twig_Compiler $compiler)
 {
     $compiler->write("\n\n")->write("/* " . str_replace('*/', '* /', $this->getAttribute('filename')) . " */\n")->write('class ' . $compiler->getEnvironment()->getTemplateClass($this->getAttribute('filename'), $this->getAttribute('index')))->raw(sprintf(" extends %s\n", $compiler->getEnvironment()->getBaseTemplateClass()))->write("{\n")->indent();
 }