protected override Expression DoResolve(ResolveContext ec) { bool ok = true; source = source.Resolve(ec); if (source == null) { ok = false; source = ErrorExpression.Instance; } target = target.ResolveLValue(ec, source); if (target == null || !ok) { return(null); } TypeSpec target_type = target.Type; TypeSpec source_type = source.Type; eclass = ExprClass.Value; type = target_type; if (!(target is IAssignMethod)) { target.Error_ValueAssignment(ec, source); return(null); } if (target_type != source_type) { Expression resolved = ResolveConversions(ec); if (resolved != this) { return(resolved); } } return(this); }
protected override Expression DoResolve (ResolveContext ec) { bool ok = true; source = source.Resolve (ec); if (source == null) { ok = false; source = EmptyExpression.Null; } target = target.ResolveLValue (ec, source); if (target == null || !ok) return null; TypeSpec target_type = target.Type; TypeSpec source_type = source.Type; eclass = ExprClass.Value; type = target_type; if (!(target is IAssignMethod)) { target.Error_ValueAssignment (ec, source); return null; } if (target_type != source_type) { Expression resolved = ResolveConversions (ec); if (resolved != this) return resolved; } return this; }
protected override Expression DoResolve(ResolveContext ec) { bool ok = true; // PlayScript: resolve LValue first if source is an initializer to be able to // infer initializer type correctly. if (ec.FileType == SourceFileType.PlayScript && (source is AsArrayInitializer || source is AsObjectInitializer)) { target = target.ResolveLValue(ec, source); if (target == null) { ok = false; source = EmptyExpression.Null; } if (source is AsArrayInitializer) { source = ((AsArrayInitializer)source).InferredResolveWithArrayType(ec, target.Type); } else if (source is AsObjectInitializer) { source = ((AsObjectInitializer)source).InferredResolveWithObjectType(ec, target.Type); } if (source == null) { ok = false; source = EmptyExpression.Null; } } else { source = source.Resolve(ec); if (source == null) { ok = false; source = EmptyExpression.Null; } target = target.ResolveLValue(ec, source); } if (target == null || !ok) { return(null); } TypeSpec target_type = target.Type; TypeSpec source_type = source.Type; eclass = ExprClass.Value; type = target_type; if (!(target is IAssignMethod)) { target.Error_ValueAssignment(ec, source); return(null); } if (target_type != source_type) { Expression resolved = ResolveConversions(ec); if (resolved != this) { return(resolved); } } return(this); }