uawdijnntqw1x1x1
IP : 216.73.216.119
Hostname : toronto-dev2
Kernel : Linux toronto-dev2 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
srv
/
users
/
craft4
/
apps
/
craft4-newsite-space
/
vendor
/
craftcms
/
cms
/
src
/
web
/
twig
/
nodes
/
GetAttrNode.php
/
/
<?php /** * @link https://craftcms.com/ * @copyright Copyright (c) Pixel & Tonic, Inc. * @license https://craftcms.github.io/license/ */ namespace craft\web\twig\nodes; use craft\helpers\Template as TemplateHelper; use Twig\Compiler; use Twig\Extension\SandboxExtension; use Twig\Node\Expression\GetAttrExpression; use Twig\Node\Node; use Twig\Template; /** * GetAttrNode is an alternative to [[\Twig\Node\Expression\GetAttrExpression]], which sends attribute calls to * [[TemplateHelper::attribute()]] rather than CoreExtension::getAttribute(). * * @author Pixel & Tonic, Inc. <support@pixelandtonic.com> * @since 3.0.0 */ class GetAttrNode extends GetAttrExpression { /** * @param array $nodes An array of named nodes * @param array $attributes An array of attributes (should not be nodes) * @param int $lineno The line number * @param string|null $tag The tag name associated with the Node * @noinspection PhpMissingParentConstructorInspection */ public function __construct(array $nodes = [], array $attributes = [], int $lineno = 0, ?string $tag = null) { // Skip parent::__construct() Node::__construct($nodes, $attributes, $lineno, $tag); } /** * @inheritdoc */ public function compile(Compiler $compiler): void { $env = $compiler->getEnvironment(); // optimize array calls if ( $this->getAttribute('optimizable') && (!$env->isStrictVariables() || $this->getAttribute('ignore_strict_check')) && !$this->getAttribute('is_defined_test') && Template::ARRAY_CALL === $this->getAttribute('type') ) { $var = '$' . $compiler->getVarName(); $compiler ->raw('((' . $var . ' = ') ->subcompile($this->getNode('node')) ->raw(') && is_array(') ->raw($var) ->raw(') || ') ->raw($var) ->raw(' instanceof ArrayAccess ? (') ->raw($var) ->raw('[') ->subcompile($this->getNode('attribute')) ->raw('] ?? null) : null)') ; return; } // This is the only line that should be different from GetAttrExpression::compile() $compiler->raw(TemplateHelper::class . '::attribute($this->env, $this->source, '); if ($this->getAttribute('ignore_strict_check')) { $this->getNode('node')->setAttribute('ignore_strict_check', true); } $compiler ->subcompile($this->getNode('node')) ->raw(', ') ->subcompile($this->getNode('attribute')) ; if ($this->hasNode('arguments')) { $compiler->raw(', ')->subcompile($this->getNode('arguments')); } else { $compiler->raw(', []'); } $compiler->raw(', ') ->repr($this->getAttribute('type')) ->raw(', ')->repr($this->getAttribute('is_defined_test')) ->raw(', ')->repr($this->getAttribute('ignore_strict_check')) ->raw(', ')->repr($env->hasExtension(SandboxExtension::class)) ->raw(', ')->repr($this->getNode('node')->getTemplateLine()) ->raw(')') ; } }
/srv/users/craft4/apps/craft4-newsite-space/vendor/craftcms/cms/src/web/twig/nodes/GetAttrNode.php