namespace Psy\CodeCleaner;
use PhpParser\Node\Scalar\LNumber;
-use PhpParser\Node\Stmt\Declare_ as DeclareStmt;
+use PhpParser\Node\Stmt\Declare_;
use PhpParser\Node\Stmt\DeclareDeclare;
use Psy\Exception\FatalErrorException;
*/
class StrictTypesPass extends CodeCleanerPass
{
+ const EXCEPTION_MESSAGE = 'strict_types declaration must have 0 or 1 as its value';
+
private $strictTypes = false;
/**
$prependStrictTypes = $this->strictTypes;
foreach ($nodes as $key => $node) {
- if ($node instanceof DeclareStmt) {
+ if ($node instanceof Declare_) {
foreach ($node->declares as $declare) {
if ($declare->key === 'strict_types') {
$value = $declare->value;
if (!$value instanceof LNumber || ($value->value !== 0 && $value->value !== 1)) {
- throw new FatalErrorException('strict_types declaration must have 0 or 1 as its value');
+ throw new FatalErrorException(self::EXCEPTION_MESSAGE, 0, E_ERROR, null, $node->getLine());
}
$this->strictTypes = $value->value === 1;
if ($prependStrictTypes) {
$first = reset($nodes);
- if (!$first instanceof DeclareStmt) {
- $declare = new DeclareStmt(array(new DeclareDeclare('strict_types', new LNumber(1))));
+ if (!$first instanceof Declare_) {
+ $declare = new Declare_(array(new DeclareDeclare('strict_types', new LNumber(1))));
array_unshift($nodes, $declare);
}
}