public static TypeRefMask CreateMask(TypeRefContext ctx, TypeSymbol t)
{
Contract.ThrowIfNull(t);
switch (t.SpecialType)
{
case SpecialType.System_Void: return 0;
case SpecialType.System_Int64: return ctx.GetLongTypeMask();
case SpecialType.System_String: return ctx.GetStringTypeMask();
case SpecialType.System_Double: return ctx.GetDoubleTypeMask();
case SpecialType.System_Boolean: return ctx.GetBooleanTypeMask();
case SpecialType.None:
var containing = t.ContainingAssembly;
if (containing != null && containing.IsPchpCorLibrary)
{
if (t.Name == "PhpValue") return TypeRefMask.AnyType;
if (t.Name == "PhpAlias") return TypeRefMask.AnyType.WithRefFlag;
if (t.Name == "PhpNumber") return ctx.GetNumberTypeMask();
if (t.Name == "PhpString") return ctx.GetWritableStringTypeMask();
if (t.Name == "PhpArray") return ctx.GetArrayTypeMask();
if (t.Name == "IPhpCallable") return ctx.GetCallableTypeMask();
}
break;
}
return CreateMask(ctx, CreateTypeRef(ctx, t));
}