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);
} parent::
__construct($node,
$name,
$arguments,
$lineno);
} private function changeIgnoreStrictCheck(GetAttrExpression
$node) {