class DefinedTest extends TestExpression
{ public function __construct(Node
$node, string
$name, ?Node
$arguments, int
$lineno) { if ($node instanceof NameExpression
) { $node->
setAttribute('is_defined_test', true
);
} elseif ($node instanceof GetAttrExpression
) { $node->
setAttribute('is_defined_test', true
);
$this->
changeIgnoreStrictCheck($node);
} elseif ($node instanceof BlockReferenceExpression
) { $node->
setAttribute('is_defined_test', true
);
} elseif ($node instanceof FunctionExpression && 'constant' ===
$node->
getAttribute('name'
)) { $node->
setAttribute('is_defined_test', true
);
} elseif ($node instanceof ConstantExpression ||
$node instanceof ArrayExpression
) { $node =
new ConstantExpression(true,
$node->
getTemplateLine());
} elseif ($node instanceof MethodCallExpression
) { $node->
setAttribute('is_defined_test', true
);
} else { throw new SyntaxError('The "defined" test only works with simple variables.',
$lineno);
}