//
// Author:
// Miguel de Icaza (miguel@ximian.com)
-// Martin Baulig (martin@gnome.org)
+// Martin Baulig (martin@ximian.com)
//
// (C) 2001, 2002, 2003 Ximian, Inc.
+// (C) 2004 Novell, Inc
//
using System;
using System.Reflection;
}
}
- if (source is New && target_type.IsValueType &&
- (target.eclass != ExprClass.IndexerAccess) && (target.eclass != ExprClass.PropertyAccess)){
- New n = (New) source;
-
- if (n.SetValueTypeVariable (target))
- return n;
- else
+ FieldExpr field_exp = target as FieldExpr;
+ if (field_exp != null && field_exp.DeclaringType.IsValueType && !ec.IsConstructor && !ec.IsFieldInitializer) {
+ field_exp = field_exp.InstanceExpression as FieldExpr;
+ if (field_exp != null && field_exp.FieldInfo.IsInitOnly) {
+ if (field_exp.IsStatic) {
+ Report.Error (1650, loc, "Members of static readonly field '{0}' cannot be assigned to " +
+ "(except in a static constructor or a variable initializer)", TypeManager.GetFullNameSignature (field_exp.FieldInfo));
+ } else {
+ Report.Error (1648, loc, "Members of readonly field '{0}' cannot be assigned to " +
+ "(except in a constructor or a variable initializer)", TypeManager.GetFullNameSignature (field_exp.FieldInfo));
+ }
return null;
+ }
}
if (!(target is IAssignMethod) && (target.eclass != ExprClass.EventAccess)) {
return null;
}
-
- if (target_type == source_type)
+
+ if (target_type == source_type){
+ if (source is New && target_type.IsValueType &&
+ (target.eclass != ExprClass.IndexerAccess) && (target.eclass != ExprClass.PropertyAccess)){
+ New n = (New) source;
+
+ if (n.SetValueTypeVariable (target))
+ return n;
+ else
+ return null;
+ }
+
return this;
+ }
//
// If this assignemnt/operator was part of a compound binary