protected function factory($expr)
{
switch (get_class($expr)) {
/**
* Call(s)
*/
case Node\Expr\MethodCall::class:
return new Expression\MethodCall();
case Node\Expr\FuncCall::class:
return new Expression\FunctionCall();
case Node\Expr\StaticCall::class:
return new Expression\StaticCall();
/**
* Operators
*/
/**
* Operators
*/
case Node\Expr\New_::class:
return new Expression\Operators\NewOp();
case Node\Expr\Instanceof_::class:
return new Expression\Operators\InstanceOfOp();
/**
* AssignOp
*/
/**
* AssignOp
*/
case Node\Expr\AssignOp\Pow::class:
return new Expression\AssignOp\Pow();
case Node\Expr\AssignOp\Plus::class:
return new Expression\AssignOp\Plus();
case Node\Expr\AssignOp\Minus::class:
return new Expression\AssignOp\Minus();
case Node\Expr\AssignOp\Mul::class:
return new Expression\AssignOp\Mul();
case Node\Expr\AssignOp\Div::class:
return new Expression\AssignOp\Div();
case Node\Expr\AssignOp\Mod::class:
return new Expression\AssignOp\Mod();
case Node\Expr\AssignOp\BitwiseOr::class:
return new Expression\AssignOp\BitwiseOr();
case Node\Expr\AssignOp\BitwiseAnd::class:
return new Expression\AssignOp\BitwiseAnd();
case Node\Expr\AssignOp\BitwiseXor::class:
return new Expression\AssignOp\BitwiseXor();
case Node\Expr\AssignOp\Concat::class:
return new Expression\AssignOp\Concat();
case Node\Expr\AssignOp\ShiftLeft::class:
return new Expression\AssignOp\ShiftLeft();
case Node\Expr\AssignOp\ShiftRight::class:
return new Expression\AssignOp\ShiftRight();
/**
* BinaryOp
*/
/**
* BinaryOp
*/
case Node\Expr\BinaryOp\Identical::class:
return new Expression\BinaryOp\Identical();
case Node\Expr\BinaryOp\Concat::class:
return new Expression\Operators\Concat();
case Node\Expr\BinaryOp\NotIdentical::class:
return new Expression\BinaryOp\NotIdentical();
case Node\Expr\BinaryOp\Equal::class:
return new Expression\BinaryOp\Equal();
case Node\Expr\BinaryOp\NotEqual::class:
return new Expression\BinaryOp\NotEqual();
case Node\Expr\BinaryOp\Spaceship::class:
return new Expression\BinaryOp\SpaceShip();
case Node\Expr\BinaryOp\Coalesce::class:
return new Expression\BinaryOp\Coalesce();
/**
* @link http://php.net/manual/en/language.operators.increment.php
*/
/**
* @link http://php.net/manual/en/language.operators.increment.php
*/
case Node\Expr\PostInc::class:
return new Expression\Operators\PostInc();
case Node\Expr\PostDec::class:
return new Expression\Operators\PostDec();
case Node\Expr\PreInc::class:
return new Expression\Operators\PreInc();
case Node\Expr\PreDec::class:
return new Expression\Operators\PreDec();
/**
* Arithmetical
*/
/**
* Arithmetical
*/
case Node\Expr\BinaryOp\Div::class:
return new Expression\Operators\Arithmetical\Div();
case Node\Expr\BinaryOp\Plus::class:
return new Expression\Operators\Arithmetical\Plus();
case Node\Expr\BinaryOp\Minus::class:
return new Expression\Operators\Arithmetical\Minus();
case Node\Expr\BinaryOp\Mul::class:
return new Expression\Operators\Arithmetical\Mul();
case Node\Expr\BinaryOp\Mod::class:
return new Expression\Operators\Arithmetical\Mod();
case Node\Expr\BinaryOp\Pow::class:
return new Expression\Operators\Arithmetical\Pow();
/**
* Bitwise
* @link http://php.net/manual/ru/language.operators.bitwise.php
*/
/**
* Bitwise
* @link http://php.net/manual/ru/language.operators.bitwise.php
*/
case Node\Expr\BinaryOp\BitwiseOr::class:
return new Expression\Operators\Bitwise\BitwiseOr();
case Node\Expr\BinaryOp\BitwiseXor::class:
return new Expression\Operators\Bitwise\BitwiseXor();
case Node\Expr\BinaryOp\BitwiseAnd::class:
return new Expression\Operators\Bitwise\BitwiseAnd();
case Node\Expr\BinaryOp\ShiftRight::class:
return new Expression\Operators\Bitwise\ShiftRight();
case Node\Expr\BinaryOp\ShiftLeft::class:
return new Expression\Operators\Bitwise\ShiftLeft();
case Node\Expr\BitwiseNot::class:
return new Expression\Operators\Bitwise\BitwiseNot();
/**
* Logical
*/
/**
* Logical
*/
case Node\Expr\BinaryOp\BooleanOr::class:
return new Expression\Operators\Logical\BooleanOr();
case Node\Expr\BinaryOp\BooleanAnd::class:
return new Expression\Operators\Logical\BooleanAnd();
case Node\Expr\BooleanNot::class:
return new Expression\Operators\Logical\BooleanNot();
case Node\Expr\BinaryOp\LogicalAnd::class:
return new Expression\Operators\Logical\LogicalAnd();
case Node\Expr\BinaryOp\LogicalOr::class:
return new Expression\Operators\Logical\LogicalOr();
case Node\Expr\BinaryOp\LogicalXor::class:
return new Expression\Operators\Logical\LogicalXor();
/**
* Comparison
*/
/**
* Comparison
*/
case Node\Expr\BinaryOp\Greater::class:
return new Expression\Operators\Comparison\Greater();
case Node\Expr\BinaryOp\GreaterOrEqual::class:
return new Expression\Operators\Comparison\GreaterOrEqual();
case Node\Expr\BinaryOp\Smaller::class:
return new Expression\Operators\Comparison\Smaller();
case Node\Expr\BinaryOp\SmallerOrEqual::class:
return new Expression\Operators\Comparison\SmallerOrEqual();
/**
* Casts
*/
/**
* Casts
*/
case Node\Expr\Cast\Array_::class:
return new Expression\Casts\ArrayCast();
case Node\Expr\Cast\Bool_::class:
return new Expression\Casts\BoolCast();
case Node\Expr\Cast\Int_::class:
return new Expression\Casts\IntCast();
case Node\Expr\Cast\Double::class:
return new Expression\Casts\DoubleCast();
case Node\Expr\Cast\Object_::class:
return new Expression\Casts\ObjectCast();
case Node\Expr\Cast\String_::class:
return new Expression\Casts\StringCast();
case Node\Expr\Cast\Unset_::class:
return new Expression\Casts\UnsetCast();
/**
* Other
*/
/**
* Other
*/
case Node\Expr\Array_::class:
return new Expression\ArrayOp();
case Node\Expr\Assign::class:
return new Expression\Assign();
case Node\Expr\AssignRef::class:
return new Expression\AssignRef();
case Node\Expr\Closure::class:
return new Expression\Closure();
case Node\Expr\ConstFetch::class:
return new Expression\ConstFetch();
case Node\Expr\ClassConstFetch::class:
return new Expression\ClassConstFetch();
case Node\Expr\PropertyFetch::class:
return new Expression\PropertyFetch();
case Node\Expr\StaticPropertyFetch::class:
return new Expression\StaticPropertyFetch();
case Node\Expr\ArrayDimFetch::class:
return new Expression\ArrayDimFetch();
case Node\Expr\UnaryMinus::class:
return new Expression\Operators\UnaryMinus();
case Node\Expr\UnaryPlus::class:
return new Expression\Operators\UnaryPlus();
case Node\Expr\Exit_::class:
return new Expression\ExitOp();
case Node\Expr\Isset_::class:
return new Expression\IssetOp();
case Node\Expr\Print_::class:
return new Expression\PrintOp();
case Node\Expr\Empty_::class:
return new Expression\EmptyOp();
case Node\Expr\Eval_::class:
return new Expression\EvalOp();
case Node\Expr\ShellExec::class:
return new Expression\ShellExec();
case Node\Expr\ErrorSuppress::class:
return new Expression\ErrorSuppress();
case Node\Expr\Include_::class:
return new Expression\IncludeOp();
case Node\Expr\Clone_::class:
return new Expression\CloneOp();
case Node\Expr\Ternary::class:
return new Expression\Ternary();
case Node\Expr\Yield_::class:
return new Expression\YieldOp();
case Node\Expr\YieldFrom::class:
return new Expression\YieldFrom();
case Node\Expr\Variable::class:
return new Expression\Variable();
}
return false;
}