12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- /**
- * @link http://www.yiiframework.com/
- * @copyright Copyright (c) 2008 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
- namespace yii\twig;
- class GetAttr extends \Twig_Node_Expression
- {
- /**
- * @inheritdoc
- */
- public function compile(\Twig_Compiler $compiler)
- {
- $compiler->raw(Template::class.'::attribute($this->env, $this->getSourceContext(), ');
- 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 || $this->hasNode('arguments');
- if ($needFirst) {
- if ($this->hasNode('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(')');
- }
- }
|