Optimize temporary variables which gmcs does not handle
authorMarek Safar <marek.safar@gmail.com>
Mon, 31 May 2010 22:13:09 +0000 (22:13 -0000)
committerMarek Safar <marek.safar@gmail.com>
Mon, 31 May 2010 22:13:09 +0000 (22:13 -0000)
svn path=/trunk/mcs/; revision=158235

mcs/class/corlib/System/Lazy.cs

index e0a6d500b00e10b68b99eea711be0b8f5d83a0af..f9b5c0a69ec6789f533410c4710bea3ace51c6a8 100644 (file)
@@ -100,15 +100,19 @@ namespace System
                        }
                }
 
-               T InitValue () {
+               T InitValue ()
+               {
+                       Func<T> init_factory;
+                       T v;
+                       
                        switch (mode) {
-                       case LazyThreadSafetyMode.None: {
-                               var init_factory = factory;
+                       case LazyThreadSafetyMode.None:
+                               init_factory = factory;
                                if (init_factory == null) 
                                        throw exception = new InvalidOperationException ("The initialization function tries to access Value on this instance");
                                try {
                                        factory = null;
-                                       v = init_factory ();
+                                       v = init_factory ();
                                        value = v;
                                        Thread.MemoryBarrier ();
                                        inited = true;
@@ -117,10 +121,9 @@ namespace System
                                        throw;
                                }
                                break;
-                       } 
-                       case LazyThreadSafetyMode.PublicationOnly: {
-                               var init_factory = factory;
-                               T v;
+
+                       case LazyThreadSafetyMode.PublicationOnly:
+                               init_factory = factory;
 
                                //exceptions are ignored
                                if (init_factory != null)
@@ -137,8 +140,8 @@ namespace System
                                        factory = null;
                                }
                                break;
-                       }
-                       case LazyThreadSafetyMode.ExecutionAndPublication: {
+
+                       case LazyThreadSafetyMode.ExecutionAndPublication:
                                lock (monitor) {
                                        if (inited)
                                                return value;
@@ -146,10 +149,10 @@ namespace System
                                        if (factory == null)
                                                throw exception = new InvalidOperationException ("The initialization function tries to access Value on this instance");
 
-                                       var init_factory = factory;
+                                       init_factory = factory;
                                        try {
                                                factory = null;
-                                               v = init_factory ();
+                                               v = init_factory ();
                                                value = v;
                                                Thread.MemoryBarrier ();
                                                inited = true;
@@ -159,7 +162,7 @@ namespace System
                                        }
                                }
                                break;
-                       }
+
                        default:
                                throw new InvalidOperationException ("Invalid LazyThreadSafetyMode " + mode);
                        }