int
/// <summary> /// Gets type mask of the literal within given type context. /// </summary> internal TypeRefMask ResolveTypeMask(TypeRefContext typeCtx) { Debug.Assert(this.ConstantValue.HasValue); var value = this.ConstantValue.Value; if (value == null) { return typeCtx.GetNullTypeMask(); } else { if (value is long || value is int) { return typeCtx.GetLongTypeMask(); } else if (value is string) { return typeCtx.GetStringTypeMask(); } else if (value is bool) { return typeCtx.GetBooleanTypeMask(); } else if (value is double) { return typeCtx.GetDoubleTypeMask(); } else { throw new NotImplementedException(); } } }
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)); }