public function visitType(Node $node) : UnionType
{
switch ($node->flags) {
case \ast\flags\TYPE_ARRAY:
return ArrayType::instance()->asUnionType();
case \ast\flags\TYPE_BOOL:
return BoolType::instance()->asUnionType();
case \ast\flags\TYPE_CALLABLE:
return CallableType::instance()->asUnionType();
case \ast\flags\TYPE_DOUBLE:
return FloatType::instance()->asUnionType();
case \ast\flags\TYPE_LONG:
return IntType::instance()->asUnionType();
case \ast\flags\TYPE_NULL:
return NullType::instance()->asUnionType();
case \ast\flags\TYPE_OBJECT:
return ObjectType::instance()->asUnionType();
case \ast\flags\TYPE_STRING:
return StringType::instance()->asUnionType();
default:
assert(false, "All flags must match. Found " . Debug::astFlagDescription($node->flags ?? 0));
break;
}
}