2002-01-24 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / mcs / ecore.cs
index 40d2da263a3095a74690ebbc849e02b5b119ca5f..51232241232242ab852511e7727722375d795a52 100755 (executable)
@@ -3100,9 +3100,10 @@ namespace Mono.CSharp {
                        } else {
                                if (InstanceExpression.Type.IsValueType){
                                        IMemoryLocation ml;
+                                       LocalTemporary tempo = null;
                                        
                                        if (!(InstanceExpression is IMemoryLocation)){
-                                               LocalTemporary tempo = new LocalTemporary (
+                                               tempo = new LocalTemporary (
                                                        ec, InstanceExpression.Type);
 
                                                InstanceExpression.Emit (ec);
@@ -3189,15 +3190,27 @@ namespace Mono.CSharp {
 
                                f.status |= Field.Status.ASSIGNED | Field.Status.USED;
                        }
-                       
+
+                       //
+                       // Handle initonly fields specially: make a copy and then
+                       // get the address of the copy.
+                       //
+                       if (FieldInfo.IsInitOnly){
+                               LocalBuilder local;
+                               
+                               Emit (ec);
+                               local = ig.DeclareLocal (type);
+                               ig.Emit (OpCodes.Stloc, local);
+                               ig.Emit (OpCodes.Ldloca, local);
+                               return;
+                       } 
+
                        if (FieldInfo.IsStatic)
                                ig.Emit (OpCodes.Ldsflda, FieldInfo);
                        else {
                                InstanceExpression.Emit (ec);
                                ig.Emit (OpCodes.Ldflda, FieldInfo);
                        }
-
-                       
                }
        }