Author: marek
Date: 2007-10-03 13:24:49 -0400 (Wed, 03 Oct 2007)
New Revision: 86821

Modified:
   trunk/mcs/mcs/ChangeLog
   trunk/mcs/mcs/ecore.cs
Log:
2007-10-03  Marek Safar  <[EMAIL PROTECTED]>
        
        A fix for bug #328774
        * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
        assignment.
        (PropertyExpr.EmitAssign): Fixed string concatenation compound
        assignment.
        


Modified: trunk/mcs/mcs/ChangeLog
===================================================================
--- trunk/mcs/mcs/ChangeLog     2007-10-03 15:47:33 UTC (rev 86820)
+++ trunk/mcs/mcs/ChangeLog     2007-10-03 17:24:49 UTC (rev 86821)
@@ -1,3 +1,11 @@
+2007-10-03  Marek Safar  <[EMAIL PROTECTED]>
+       
+       A fix for bug #328774
+       * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
+       assignment.
+       (PropertyExpr.EmitAssign): Fixed string concatenation compound
+       assignment.
+
 2007-10-03  Raja R Harinath  <[EMAIL PROTECTED]>
 
        Fix #328490

Modified: trunk/mcs/mcs/ecore.cs
===================================================================
--- trunk/mcs/mcs/ecore.cs      2007-10-03 15:47:33 UTC (rev 86820)
+++ trunk/mcs/mcs/ecore.cs      2007-10-03 17:24:49 UTC (rev 86821)
@@ -4384,16 +4384,19 @@
                        bool is_static = (fa & FieldAttributes.Static) != 0;
                        bool is_readonly = (fa & FieldAttributes.InitOnly) != 0;
                        ILGenerator ig = ec.ig;
-                       prepared = prepare_for_load;
 
                        if (is_readonly && !ec.IsConstructor){
                                Report_AssignToReadonly (source);
                                return;
                        }
 
-                       EmitInstance (ec, prepare_for_load);
+                       //
+                       // String concatenation creates a new string instance 
+                       //
+                       prepared = prepare_for_load && !(source is 
StringConcat);
+                       EmitInstance (ec, prepared);
 
-                       source.Emit (ec);
+                       source.Emit (ec);                       
                        if (leave_copy) {
                                ec.ig.Emit (OpCodes.Dup);
                                if (!FieldInfo.IsStatic) {
@@ -4854,10 +4857,15 @@
                {
                        Expression my_source = source;
 
-                       prepared = prepare_for_load;
-                       
-                       if (prepared) {
+                       if (prepare_for_load) {
+                               if (source is StringConcat)
+                                       EmitInstance (ec, false);
+                               else
+                                       prepared = true;                        
                
+
                                source.Emit (ec);
+                               
+                               prepared = true;
                                if (leave_copy) {
                                        ec.ig.Emit (OpCodes.Dup);
                                        if (!is_static) {
@@ -4871,7 +4879,7 @@
                                temp.Store (ec);
                                my_source = temp;
                        }
-                       
+
                        ArrayList args = new ArrayList (1);
                        args.Add (new Argument (my_source, 
Argument.AType.Expression));
                        

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to