public override Expression DoResolve(ParseContext parseContext) { _typeExpression = _typeExpression.ResolveAsTypeStep(parseContext, false); if (_typeExpression == null) { return(null); } Type = _typeExpression.Type; return(this); }
public override Expression DoResolve(Runtime.ParseContext parseContext) { var typeExpression = _objectType = _objectType.ResolveAsTypeStep(parseContext, false); if (typeExpression == null) { return(base.DoResolve(parseContext)); } _arguments.Resolve(parseContext); Type = typeExpression.Type; var initializer = Initializer; if (initializer == null) { return(new NewExpression( _objectType, _arguments, Span).Resolve(parseContext)); } if (initializer is CollectionInitializerExpression) { var genericInterfaces = TypeManager.DropGenericTypeArguments(Type).GetInterfaces() .Where(o => o.IsGenericType) .Select(o => o.GetGenericTypeDefinition()); if (!genericInterfaces.Contains(TypeManager.CoreTypes.GenericEnumerableInterface)) { parseContext.ReportError( 1925, string.Format( "Cannot initialize object of type '{0}' with a collection initializer.", TypeManager.GetCSharpName(Type)), Span); } } return(new NewInitExpression( _objectType, _arguments, initializer, Span).Resolve(parseContext)); }