Author: marek
Date: 2007-09-14 07:35:17 -0400 (Fri, 14 Sep 2007)
New Revision: 85793
Modified:
trunk/mcs/mcs/ChangeLog
trunk/mcs/mcs/class.cs
Log:
2007-09-14 Marek Safar <[EMAIL PROTECTED]>
A fix for bug #82845
* class.cs (TypeContainer): Set correct resolve context for all field
initializers.
Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog 2007-09-14 11:34:38 UTC (rev 85792)
+++ trunk/mcs/mcs/ChangeLog 2007-09-14 11:35:17 UTC (rev 85793)
@@ -1,3 +1,10 @@
+2007-09-14 Marek Safar <[EMAIL PROTECTED]>
+
+ A fix for bug #82845
+
+ * class.cs (TypeContainer): Set correct resolve context for all field
+ initializers.
+
2007-09-13 Marek Safar <[EMAIL PROTECTED]>
* assign.cs: Fixed a crash when field is resolved twice with an error.
Modified: trunk/mcs/mcs/class.cs
===================================================================
--- trunk/mcs/mcs/class.cs 2007-09-14 11:34:38 UTC (rev 85792)
+++ trunk/mcs/mcs/class.cs 2007-09-14 11:35:17 UTC (rev 85793)
@@ -814,15 +814,23 @@
public void ResolveFieldInitializers (EmitContext ec)
{
+ // Field initializers are tricky for partial classes.
They have to
+ // share same costructor (block) but they have they own
resolve scope.
+ DeclSpace orig = ec.DeclContainer;
+
if (partial_parts != null) {
- DeclSpace orig = ec.DeclContainer ;
foreach (TypeContainer part in partial_parts) {
ec.DeclContainer = part;
- part.ResolveFieldInitializers (ec);
+ part.DoResolveFieldInitializers (ec);
}
- ec.DeclContainer = orig;
}
+ ec.DeclContainer = PartialContainer;
+ DoResolveFieldInitializers (ec);
+ ec.DeclContainer = orig;
+ }
+ void DoResolveFieldInitializers (EmitContext ec)
+ {
if (ec.IsStatic) {
if (initialized_static_fields == null)
return;
@@ -4928,6 +4936,8 @@
if (OptAttributes != null)
OptAttributes.Emit ();
+ base.Emit ();
+
EmitContext ec = CreateEmitContext (null, null);
//
@@ -4998,8 +5008,6 @@
if (source != null)
source.CloseMethod ();
- base.Emit ();
-
if (declarative_security != null) {
foreach (DictionaryEntry de in
declarative_security) {
ConstructorBuilder.AddDeclarativeSecurity ((SecurityAction)de.Key,
(PermissionSet)de.Value);
@@ -5086,7 +5094,7 @@
public EmitContext CreateEmitContext (DeclSpace ds, ILGenerator
ig)
{
ILGenerator ig_ = ConstructorBuilder.GetILGenerator ();
- EmitContext ec = new EmitContext (this,
Parent.PartialContainer, Location, ig_, TypeManager.void_type, ModFlags, true);
+ EmitContext ec = new EmitContext (this, Parent,
Location, ig_, TypeManager.void_type, ModFlags, true);
ec.CurrentBlock = block;
return ec;
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches