public static bool IsConvertible(IType type, IType dstType) { if (!type.CanAssignTo(dstType)) { if (type.CanPromoteTo(dstType)) { return(true); } /* * else if (type.CanImplicitlyCastTo(dstType)) * return true; */ else if ((dstType.IsEqualTo(Types.GetType("Object")) || dstType.IsEqualTo(Types.GetType("ValueType"))) && (type is ValueTypeSymbol)) { return(true); } else { return(false); } } return(true); }
public static bool IsDelegate(IType type) { return(type.IsInstanceOf(Types.GetType("MulticastDelegate"))); }
public static bool SetType(ref Expression expr, IType dstType, IContext context) { IType type = expr.EvalType; if (!type.CanAssignTo(dstType)) { if (type.CanPromoteTo(dstType)) { expr = new TypePromotionExpression(expr, new ResolvedType(dstType)); expr = expr.ResolveRValue(context); } /* * else if (type.CanImplicitlyCastTo(dstType)) * { * } */ else if ((dstType.IsEqualTo(Types.GetType("Object")) || dstType.IsEqualTo(Types.GetType("ValueType"))) && (type is ValueTypeSymbol)) { expr = new BoxExpression(expr); expr = expr.ResolveRValue(context); } else { return(false); } } return(true); }