public string ToString(TypeRefMask mask)
{
if (!mask.IsVoid)
{
if (mask.IsAnyType)
return TypeRefMask.MixedTypeName;
//
var types = new List<string>(1);
// handle arrays separately
var arrmask = mask & _isArrayMask;
if (arrmask != 0)
{
mask &= ~_isArrayMask;
ITypeRef elementtype = null;
var elementmask = GetElementType(arrmask);
if (elementmask.IsSingleType)
elementtype = GetTypes(elementmask).FirstOrDefault();
if (elementtype != null)
types.Add(elementtype.QualifiedName.ToString() + "[]");
else
types.Add(TypeRefFactory.ArrayTypeRef.QualifiedName.ToString());
}
//// int|double => number
//var isNumber = (_isIntMask != 0 && _isDoubleMask != 0 && (mask & IsNumberMask) == IsNumberMask);
//if (isNumber)
// mask &= ~IsNumberMask;
//
types.AddRange(GetTypes(mask).Select(t => t.QualifiedName.ToString()));
//if (isNumber)
// types.Add("number");
//
if (types.Count != 0)
{
types.Sort();
return string.Join(PHPDocBlock.TypeVarDescTag.TypeNamesSeparator.ToString(), types.Distinct());
}
}
return TypeRefMask.VoidTypeName;
}