Fix race condition. This was spotted by Petr Hosek. Thanks Petr!

We were closing stdin from an asynchronous event
handler. This is dangerous because we really don't know when this
handler will be called and in fact when using lit to run symbooglix in
parallel it caused the following scenario to happen

1. doQuery()
- Call PrintCheckSat()

2. Event handler interruption OutputHandler(), receives "sat|...", we close
stdin

3. Event handler called again (OutputHandler), receives "" (empty string),
we try to close stdin again

4. Control returns to somewhere in PrintCheckSat() or above in the call stack
and somewhere in the code it continues to try and use stdin even though we've
closed it.

Unhandled Exception:
System.NullReferenceException: Object reference not set to an instance of an object
  at System.IO.StreamWriter.FlushCore () [0x00018] in /build/mono/src/mono-3.2.8/mcs/class/corlib/System.IO/StreamWriter.cs:204
  at System.IO.StreamWriter.Write (System.Char[] buffer) [0x00022] in /build/mono/src/mono-3.2.8/mcs/class/corlib/System.IO/StreamWriter.cs:390
  at System.IO.TextWriter.WriteLine () [0x00000] in /build/mono/src/mono-3.2.8/mcs/class/corlib/System.IO/TextWriter.cs:257
  at System.IO.TextWriter.WriteLine (System.String value) [0x00007] in /build/mono/src/mono-3.2.8/mcs/class/corlib/System.IO/TextWriter.cs:317
  at symbooglix.SMTLIBQueryPrinter.printCheckSat () [0x00011] in /home/dsl11/dev/symbooglix/symbooglix/symbooglix/symbooglix/Expr/SMTLIBQueryPrinter.cs:183
  at symbooglix.Solver.SimpleSMTLIBSolver.doQuery (Microsoft.Boogie.Expr QueryToPrint) [0x00093] in /home/dsl11/dev/symbooglix/symbooglix/symbooglix/symbooglix/Core/Solver/SimpleSMTLIBSolver.cs:109
  at symbooglix.Solver.SimpleSMTLIBSolver.IsQuerySat (Microsoft.Boogie.Expr Query) [0x00003] in /home/dsl11/dev/symbooglix/symbooglix/symbooglix/symbooglix/Core/Solver/SimpleSMTLIBSolver.cs:74
  at symbooglix.Executor.enterProcedure (Microsoft.Boogie.Implementation Impl, System.Collections.Generic.List`1 procedureParams, symbooglix.Executor executor) [0x00273] in /home/dsl11/dev/symbooglix/symbooglix/
symbooglix/symbooglix/Core/Executor.cs:374
  at symbooglix.Executor.run (Microsoft.Boogie.Implementation entryPoint) [0x00035] in /home/dsl11/dev/symbooglix/symbooglix/symbooglix/symbooglix/Core/Executor.cs:195
  at symbooglix.driver.Main (System.String[] args) [0x002af] in /home/dsl11/dev/symbooglix/symbooglix/symbooglix/symbooglix/driver.cs:209

--- symbooglix/symbooglix/Core/Solver/SimpleSMTLIBSolver.cs
+++ symbooglix/symbooglix/Core/Solver/SimpleSMTLIBSolver.cs
@@ -146,7 +146,6 @@
                 }

                 Printer.printExit();
-                ( sendingProcess as Process ).StandardInput.Close();
             }

             private void ErrorHandler(object sendingProcess, DataReceivedEventArgs  stderrLine)


Timeout no longer disposable

Timeout no longer disposable

--- Core/Theraot/Threading/Timeout.cs
+++ Core/Theraot/Threading/Timeout.cs
@@ -5,7 +5,7 @@

 namespace Theraot.Core.Threading
 {
-    public class Timeout : IDisposable, IPromise
+    public class Timeout : IPromise
     {
         private static readonly HashSet<Timeout> _root;

@@ -46,7 +46,7 @@
             {
                 _callback = callback;
                 _wrapped = new Timer(Callback, null, dueTime, System.Threading.Timeout.Infinite);
-                token.Register(Dispose);
+                token.Register(Cancel);
             }
             _hashcode = unchecked((int)DateTime.Now.Ticks);
         }
@@ -65,7 +65,7 @@

         ~Timeout()
         {
-            Dispose();
+            Cancel();
         }

         Exception IPromise.Exception
@@ -134,7 +134,7 @@
             Change((long)dueTime.TotalMilliseconds);
         }

-        public void Dispose()
+        public void Cancel()
         {
             var wrapped = Interlocked.Exchange(ref _wrapped, null);
             if (wrapped != null)
@@ -165,7 +165,7 @@
             GC.KeepAlive(state);
             _callback.Invoke();
             _completed = true;
-            Dispose();
+            Cancel();
         }
     }
 }


Fix a problem on the specification of transition of S2

--- CreviceApp/Core.FSM.Transition.cs
+++ CreviceApp/Core.FSM.Transition.cs
@@ -187,7 +187,7 @@
         // This transition has one side effect.
         // 1. Functions given as the parameter of `@do` clause of StrokeGestureDefinition are executed.

-        // Transition 2_2 (default gesture established)
+        // Transition 2_3 (default gesture established)
         //
         // State2 -> State0
         //
@@ -195,14 +195,6 @@
         // This transition happens when `release` event of primary double action mouse button is given and
         // there have not been any actions executed.
         // 1. Functions given as the parameter of `@do` clause of IfButtonGestureDefinition are executed.
-
-        // Transition 2_3 (gesture end)
-        //
-        // State2 -> State0
-        //
-        // Transition from the state(S2) to the state(S0).
-        // This transition happends when `release` event of primary double action mouse button is given.
-        // This transition has no side effect.

         // Transition 2_4 (forced reset)
         //


fix format

fix format

--- android/Andrule/Andrule/Views/Tabs/SetupActivity.cs
+++ android/Andrule/Andrule/Views/Tabs/SetupActivity.cs
@@ -74,7 +74,7 @@

         private void SendData(IReadOnlyList<int> sensorData)
         {
-            netWorkHelper.Send(string.Format("^{0}|{1}|{2}|1|1|1$", sensorData[0], sensorData[1], sensorData[2]));
+            netWorkHelper.Send(string.Format("^{0}|{1}|{2}|1|1|1|1$", sensorData[0], sensorData[1], sensorData[2]));
         }

         public void OnSensorChanged(SensorEvent e)


some spotter error checking

some spotter error checking

--- CrewChiefV3/PCars/PCarsSpotter.cs
+++ CrewChiefV3/PCars/PCarsSpotter.cs
@@ -169,7 +169,9 @@
             if (enabled && currentState.mParticipantData.Count() > 1 && currentState.mViewedParticipantIndex >= 0)
             {
                 pCarsAPIParticipantStruct playerData = currentState.mParticipantData[currentState.mViewedParticipantIndex];
-                if (playerData.mWorldPosition[0] == 0 || playerData.mWorldPosition[2] == 0 || playerData.mWorldPosition[0] == -1 || playerData.mWorldPosition[2] == -1)
+                float playerX = playerData.mWorldPosition[0];
+                float playerY = playerData.mWorldPosition[2];
+                if (playerX == 0 || playerY == 0 || playerX == -1 || playerY == -1)
                 {
                     return;
                 }
@@ -189,15 +191,26 @@
                         if (i != currentState.mViewedParticipantIndex)
                         {
                             pCarsAPIParticipantStruct opponentData = currentState.mParticipantData[i];
-                            pCarsAPIParticipantStruct previousOpponentData = lastState.mParticipantData[PCarsGameStateMapper.getPreviousOpponentIndex(lastState.mParticipantData, i, opponentData.mName)];
+                            int prevOpponentIndex = PCarsGameStateMapper.getPreviousOpponentIndex(lastState.mParticipantData, i, opponentData.mName);
+                            float previousOpponentX = 0;
+                            float previousOpponentY = 0;
+                            if (prevOpponentIndex != -1)
+                            {
+                                pCarsAPIParticipantStruct previousOpponentData = lastState.mParticipantData[prevOpponentIndex];
+                                previousOpponentX = previousOpponentData.mWorldPosition[0];
+                                previousOpponentY = previousOpponentData.mWorldPosition[2];
+                            }
+                            float currentOpponentX = opponentData.mWorldPosition[0];
+                            float currentOpponentY = opponentData.mWorldPosition[2];
+
                             if (opponentData.mIsActive) {
-                                if (opponentData.mWorldPosition[0] != 0 && opponentData.mWorldPosition[2] != 0 &&
-                                        opponentData.mWorldPosition[0] != -1 && opponentData.mWorldPosition[2] != -1 &&
-                                    previousOpponentData.mWorldPosition[0] != 0 && previousOpponentData.mWorldPosition[2] != 0 &&
-                                        previousOpponentData.mWorldPosition[0] != -1 && previousOpponentData.mWorldPosition[2] != -1 &&
-                                    opponentIsRacing(opponentData, previousOpponentData, playerData, previousPlayerData))
+                                if (currentOpponentX != 0 && currentOpponentY != 0 &&
+                                        currentOpponentX != -1 && currentOpponentY != -1 &&
+                                    previousOpponentX != 0 && previousOpponentY != 0 &&
+                                        previousOpponentX != -1 && previousOpponentY != -1 &&
+                                    opponentIsRacing(currentOpponentX, currentOpponentY, previousOpponentX, previousOpponentY, playerData, previousPlayerData))
                                 {
-                                    Side side = getSide(currentState.mOrientation[1], playerData.mWorldPosition, opponentData.mWorldPosition);
+                                    Side side = getSide(currentState.mOrientation[1], playerX, playerY, currentOpponentX, currentOpponentY);
                                     if (side == Side.left)
                                     {
                                         carsOnLeft++;
@@ -295,17 +308,17 @@
             }
         }

-        private Boolean opponentIsRacing(pCarsAPIParticipantStruct opponentData, pCarsAPIParticipantStruct previousOpponentData,
+        private Boolean opponentIsRacing(float currentOpponentX, float currentOpponentY, float previousOpponentX, float previousOpponentY,
             pCarsAPIParticipantStruct playerData, pCarsAPIParticipantStruct previousPlayerData)
         {
-            float deltaX = Math.Abs(opponentData.mWorldPosition[0] - playerData.mWorldPosition[0]);
-            float deltaY = Math.Abs(opponentData.mWorldPosition[2] - playerData.mWorldPosition[2]);
+            float deltaX = Math.Abs(currentOpponentX - playerData.mWorldPosition[0]);
+            float deltaY = Math.Abs(currentOpponentY - playerData.mWorldPosition[2]);
             if (deltaX > trackWidth || deltaY > trackWidth)
             {
                 return false;
             }
-            float opponentVelocityX = Math.Abs(opponentData.mWorldPosition[0] - previousOpponentData.mWorldPosition[0]) / intervalSeconds;
-            float opponentVelocityY = Math.Abs(opponentData.mWorldPosition[2] - previousOpponentData.mWorldPosition[2]) / intervalSeconds;
+            float opponentVelocityX = Math.Abs(currentOpponentX - previousOpponentX) / intervalSeconds;
+            float opponentVelocityY = Math.Abs(currentOpponentY - previousOpponentY) / intervalSeconds;
             // hard code this - if the opponent car is going < 4m/s on both axis we're not interested
             if (opponentVelocityX < 4 && opponentVelocityY < 4)
             {
@@ -569,10 +582,10 @@
             }
         }

-        private Side getSide(float playerRotation, float[] playerWorldPosition, float[] opponentWorldPosition)
-        {
-            float rawXCoordinate = opponentWorldPosition[0] - playerWorldPosition[0];
-            float rawYCoordinate = opponentWorldPosition[2] - playerWorldPosition[2];
+        private Side getSide(float playerRotation, float playerX, float playerY, float oppponentX, float opponentY)
+        {
+            float rawXCoordinate = oppponentX - playerX;
+            float rawYCoordinate = opponentY - playerY;
             if (playerRotation < 0)
             {
                 playerRotation = (float)(2 * Math.PI) + playerRotation;


Remove semicolon

Remove semicolon

--- Web/ConsolRHandler.ashx.cs
+++ Web/ConsolRHandler.ashx.cs
@@ -35,7 +35,6 @@
 					context.Response.WriteFile("~/assets/consolr/index.html");
 					break;
 				case "/consolr/validate":
-					;
 					context.Response.ContentType = "application/json";
 					context.Response.Write(GetValidationResult(context));
 					break;


Sorted using statements.

Sorted using statements.

--- DDay.iCal/DataTypes/StatusCode.cs
+++ DDay.iCal/DataTypes/StatusCode.cs
@@ -1,10 +1,10 @@
 using System;
 using System.Collections;
+using System.IO;
+using System.Runtime.Serialization;
 using System.Text;
 using System.Text.RegularExpressions;
-using System.Runtime.Serialization;
 using DDay.iCal.Serialization;
-using System.IO;
 using DDay.iCal.Serialization.iCalendar;

 namespace DDay.iCal


Update DataBuffer.cs

Update DataBuffer.cs

modified process method

--- DHSignalIllustrator/DataBuffer.cs
+++ DHSignalIllustrator/DataBuffer.cs
@@ -130,61 +130,7 @@

         private void processSignalBuffer(int[,] signalBuffer, int row, int col)
         {
-            int total, temp;
-            int moveValidation = 0;
-            int validatioeRecord = 0;
-
-            for (int j = 0; j < col; j++)
-            {
-                total = 0;
-                for (int i = 0; i < row; i++)
-                {
-                    total += signalBuffer[i,j];//Sum up.
-                    if(i == 2)
-                    {
-                        resultBuffer[j] = signalBuffer[i, j];//Get initial value. The 3rd value of all 5 values.
-                    }
-                }
-
-                //Calculate background value.
-                temp = resultBuffer[j] - (total / row);
-
-                //Filter noise.
-                temp = (temp > filterMin && temp < filterMax) ? 1 : 0;
-                //temp = (temp < 1000) ? 0 : temp;
-                resultBuffer[j] = resultBuffer[j] * temp;
-
-                //Validation check.
-                if (temp != 0)
-                {
-                    moveValidation++;
-                    if (moveValidation > validatioeRecord)
-                    {
-                        validatioeRecord = moveValidation;
-                    }
-                }
-                else
-                {
-                    moveValidation = 0;
-                }
-            }
-
-            //Clear unwanted points.
-            if (validatioeRecord > 4)
-            {
-                for (int j = 0; j < col + 1; j++)
-                {
-                    resultBuffer[j] = 0;
-                }
-                //isSameRegionPeak = false;
-            } else if (validatioeRecord > 0) // && !isSameRegionPeak)
-            {
-                //isSameRegionPeak = true;
-                drawer.moveCount++;
-            }
-
-            //Draw points
-            //drawer.drawResultPoints(resultBuffer);
+            //Process the data here.

             //Cache points for 3D chart.
             drawer.cache3DData(resultBuffer);


Update CosmosVFS.cs

Update CosmosVFS.cs

--- source/Cosmos.System2/FileSystem/CosmosVFS.cs
+++ source/Cosmos.System2/FileSystem/CosmosVFS.cs
@@ -458,7 +458,7 @@
         /// <exception cref="ArgumentOutOfRangeException">Thrown when root directory address is smaller then root directory address.</exception>
         public override DirectoryEntry GetVolume(string aPath)
         {
-            if (string.IsNullOrEmpty(aPath))
+            if (String.IsNullOrEmpty(aPath))
             {
                 return null;
             }
@@ -526,7 +526,9 @@
             var xEntry = DoGetDirectoryEntry(aPath, xFileSystem);

             if (xEntry == null)
+            {
                 throw new Exception($"{aPath} is neither a file neither a directory");
+            }

             switch (xEntry.mEntryType)
             {


Done NetworkStack api docs

Done NetworkStack api docs

--- source/Cosmos.System2/Network/NetworkStack.cs
+++ source/Cosmos.System2/Network/NetworkStack.cs
@@ -13,14 +13,20 @@
     /// </summary>
     public static class NetworkStack
     {
-
+        /// <summary>
+        /// Debugger inctanse of the "System" ring, with the "NetworkStack" tag.
+        /// </summary>
         public static Debugger debugger = new Debugger("System", "NetworkStack");

+        /// <summary>
+        /// Get address dictionary.
+        /// </summary>
         internal static TempDictionary<NetworkDevice> AddressMap { get; private set; }

         /// <summary>
-        /// Initialize the Network Stack to prepare it for operation
+        /// Initialize the Network Stack to prepare it for operation.
         /// </summary>
+        /// <exception cref="ArgumentOutOfRangeException">Thrown on fatal error (contact support).</exception>
         public static void Init()
         {
             AddressMap = new TempDictionary<NetworkDevice>();
@@ -42,8 +48,17 @@
         /// <remarks>Multiple IP Configurations can be made, like *nix environments</remarks>
         /// </summary>
         /// <param name="nic"><see cref="NetworkDevice"/> that will have the assigned configuration</param>
-        /// <param name="config"><see cref="IPV4.Config"/> instance that defines the IP Address, Subnet
+        /// <param name="config"><see cref="Config"/> instance that defines the IP Address, Subnet
         /// Mask and Default Gateway for the device</param>
+        /// <exception cref="ArgumentException">
+        /// <list type="bullet">
+        /// <item>Thrown if configuration with the given config.IPAddress.Hash already exists.</item>
+        /// <item>Thrown on fatal error (contact support).</item>
+        /// </list>
+        /// </exception>
+        /// <exception cref="ArgumentOutOfRangeException">Thrown on fatal error (contact support).</exception>
+        /// <exception cref="Sys.IO.IOException">Thrown on IO error.</exception>
+        /// <exception cref="OverflowException">Thrown on fatal error (contact support).</exception>
         public static void ConfigIP(NetworkDevice nic, Config config)
         {
             AddressMap.Add(config.IPAddress.Hash, nic);
@@ -51,6 +66,14 @@
             nic.DataReceived = HandlePacket;
         }

+        /// <summary>
+        /// Handle packet.
+        /// </summary>
+        /// <param name="packetData">Packet data array.</param>
+        /// <exception cref="ArgumentOutOfRangeException">Thrown on fatal error (contact support).</exception>
+        /// <exception cref="Sys.IO.IOException">Thrown on IO error.</exception>
+        /// <exception cref="ArgumentException">Thrown on fatal error (contact support).</exception>
+        /// <exception cref="OverflowException">Thrown on fatal error (contact support).</exception>
         internal static void HandlePacket(byte[] packetData)
         {
             debugger.Send("Packet Received Length=" + packetData.Length.ToString());
@@ -75,6 +98,9 @@
         /// <summary>
         /// Called continously to keep the Network Stack going.
         /// </summary>
+        /// <exception cref="ArgumentException">Thrown on fatal error (contact support).</exception>
+        /// <exception cref="ArgumentOutOfRangeException">Thrown on memory error.</exception>
+        /// <exception cref="OverflowException">Thrown if data length of any packet in the queue is bigger than Int32.MaxValue.</exception>
         public static void Update()
         {
             OutgoingBuffer.Send();


fixed GetDatabase method such that it ignores any deleted spreadsheets

--- GDataDB/DatabaseClient.cs
+++ GDataDB/DatabaseClient.cs
@@ -1,41 +1,51 @@
-using System;
-using System.IO;
-using GDataDB.Impl;
-using Google.GData.Client;
-using Google.GData.Documents;
-using Google.GData.Spreadsheets;
-using SpreadsheetQuery=Google.GData.Documents.SpreadsheetQuery;
-
-namespace GDataDB {
-	public class DatabaseClient : IDatabaseClient {
-		public IService DocumentService { get; set;}
-		public IService SpreadsheetService { get; set; }
-
-		public DatabaseClient(string username, string password) {
-			var docService = new DocumentsService("database");
-			docService.setUserCredentials(username, password);
-			DocumentService = docService;
-
-			var ssService = new SpreadsheetsService("database");
-			ssService.setUserCredentials(username, password);
-			SpreadsheetService = ssService;
-		}
-
-		public IDatabase CreateDatabase(string name) {
-			using (var ms = new MemoryStream()) {
-				using (var sw = new StreamWriter(ms)) {
-					sw.WriteLine(",,,");
-					var spreadSheet = DocumentService.Insert(new Uri(DocumentsListQuery.documentsBaseUri), ms, "text/csv", name);
-					return new Database(SpreadsheetService, spreadSheet);
-				}
-			}
-		}
-
-		public IDatabase GetDatabase(string name) {
-			var feed = DocumentService.Query(new SpreadsheetQuery {TitleExact = true, Title = name});
-			if (feed.Entries.Count == 0)
-				return null;
-			return new Database(SpreadsheetService, feed.Entries[0]);
-		}
-	}
+using System;
+using System.IO;
+using GDataDB.Impl;
+using Google.GData.Client;
+using Google.GData.Documents;
+using Google.GData.Spreadsheets;
+using SpreadsheetQuery=Google.GData.Documents.SpreadsheetQuery;
+
+namespace GDataDB {
+	public class DatabaseClient : IDatabaseClient {
+        	private readonly IService documentService;
+        	private readonly IService spreadsheetService;
+
+        	public IService DocumentService
+        	{
+            		get { return documentService; }
+        	}
+
+        	public IService SpreadsheetService
+        	{
+            		get { return spreadsheetService; }
+        	}
+
+		public DatabaseClient(string username, string password) {
+			var docService = new DocumentsService("database");
+			docService.setUserCredentials(username, password);
+			DocumentService = docService;
+
+			var ssService = new SpreadsheetsService("database");
+			ssService.setUserCredentials(username, password);
+			SpreadsheetService = ssService;
+		}
+
+		public IDatabase CreateDatabase(string name) {
+			using (var ms = new MemoryStream()) {
+				using (var sw = new StreamWriter(ms)) {
+					sw.WriteLine(",,,");
+					var spreadSheet = DocumentService.Insert(new Uri(DocumentsListQuery.documentsBaseUri), ms, "text/csv", name);
+					return new Database(SpreadsheetService, spreadSheet);
+				}
+			}
+		}
+
+		public IDatabase GetDatabase(string name) {
+			var feed = DocumentService.Query(new SpreadsheetQuery {TitleExact = true, Title = name,  ShowDeleted = false });
+			if (feed.Entries.Count == 0)
+				return null;
+			return new Database(SpreadsheetService, feed.Entries[0]);
+		}
+	}
 }


3.1 targeting pack support in update-dependencies tool (#3791)

(cherry picked from commit f303428e35807e297826267f0a30f0376ab2f096)

--- eng/update-dependencies/DockerfileShaUpdater.cs
+++ eng/update-dependencies/DockerfileShaUpdater.cs
@@ -73,7 +73,9 @@
                     new string[]
                     {
                         $"$DOTNET_BASE_URL/Runtime/$VERSION_DIR/dotnet-targeting-pack-$VERSION_FILE-$ARCH.$ARCHIVE_EXT",
-                        $"$DOTNET_BASE_URL/Runtime/$DF_VERSION.0/dotnet-targeting-pack-$DF_VERSION.0-$ARCH.$ARCHIVE_EXT"
+                        $"$DOTNET_BASE_URL/Runtime/$DF_VERSION.0/dotnet-targeting-pack-$DF_VERSION.0-$ARCH.$ARCHIVE_EXT",
+                        // Fallback for legacy targeting pack versions (not needed for > 3.1)
+                        $"https://dotnetcli.blob.core.windows.net/dotnet/Runtime/$DF_VERSION.0/dotnet-targeting-pack-$DF_VERSION.0-$ARCH.$ARCHIVE_EXT"
                     }
                 },
                 { "runtime-apphost-pack", new string[] { $"$DOTNET_BASE_URL/Runtime/$VERSION_DIR/dotnet-apphost-pack-$VERSION_FILE-$ARCH.$ARCHIVE_EXT" } },
@@ -86,7 +88,9 @@
                     new string[]
                     {
                         $"$DOTNET_BASE_URL/aspnetcore/Runtime/$VERSION_DIR/aspnetcore-targeting-pack-$VERSION_FILE{GetAspnetTargetingPackArchFormat()}.$ARCHIVE_EXT",
-                        $"$DOTNET_BASE_URL/aspnetcore/Runtime/$DF_VERSION.0/aspnetcore-targeting-pack-$DF_VERSION.0{GetAspnetTargetingPackArchFormat()}.$ARCHIVE_EXT"
+                        $"$DOTNET_BASE_URL/aspnetcore/Runtime/$DF_VERSION.0/aspnetcore-targeting-pack-$DF_VERSION.0{GetAspnetTargetingPackArchFormat()}.$ARCHIVE_EXT",
+                        // Fallback for legacy targeting pack versions (not needed for > 3.1)
+                        $"https://dotnetcli.blob.core.windows.net/dotnet/aspnetcore/Runtime/$DF_VERSION.0/aspnetcore-targeting-pack-$DF_VERSION.0{GetAspnetTargetingPackArchFormat()}.$ARCHIVE_EXT"
                     }
                 },


Add paragraph to Do extension method

Add paragraph to Do extension method

Former-commit-id: ad111e4ae094ec854da4ff635a2147bd3e08ae5c

--- GeneratorAPI/Generator.cs
+++ GeneratorAPI/Generator.cs
@@ -135,6 +135,8 @@

         /// <summary>
         ///     <para>Exposes TSource in <see cref=" IGenerator<TSource>"/></para>
+        ///     <para>Using methods such as <see cref="Skip{T}"/> or <see cref="Release{TSource}"/> before this method </para>
+        ///     <para>Results in that they will be seen in the <see cref=" Action<TSource>"/></para>
         /// </summary>
         public static IGenerator<TSource> Do<TSource>(this IGenerator<TSource> generator, Action<TSource> action) {
             if (action == null) throw new ArgumentNullException(nameof(action));


Remove an unused file

Remove an unused file

--- Dev/Editor/EffekseerMP/Default.cs
+++ Dev/Editor/EffekseerMP/Default.cs
@@ -1,228 +0,0 @@
-
-public class Script
-{
-    public static string UniqueName
-    {
-        get
-        {
-            return "Default";
-        }
-    }
-
-    public static string Author
-    {
-        get
-        {
-            return "Default";
-        }
-    }
-
-    public static string Title
-    {
-        get
-        {
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) return "標準形式";
-            return "Default format";
-        }
-    }
-
-    public static string Description
-    {
-        get
-        {
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) return "標準形式で出力する。";
-            return "Export as default format";
-        }
-    }
-
-    public static string Filter
-    {
-        get
-        {
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) return "標準形式 (*.efk)|*.efk";
-            return "Default format (*.efk)|*.efk";
-        }
-    }
-
-    public static void Call(string path)
-    {
-        var window = new Magnification();
-        window.Show(path);
-    }
-
-    class Magnification : Effekseer.GUI.IRemovableControl
-    {
-        string title = string.Empty;
-        string message = string.Empty;
-        string id = "###magnification";
-
-        bool opened = true;
-
-        bool isFirstUpdate = true;
-
-        string path = string.Empty;
-        float[] mag = new float[1];
-
-        public bool ShouldBeRemoved { get; private set; } = false;
-
-        public void Show(string path)
-        {
-            this.title = "Maginification";
-            this.path = path;
-            mag[0] = Effekseer.Core.Option.ExternalMagnification.GetValue();
-            Effekseer.GUI.Manager.AddControl(this);
-        }
-
-        public void Update()
-        {
-            if (isFirstUpdate)
-            {
-                Effekseer.GUI.Manager.NativeManager.OpenPopup(id);
-                isFirstUpdate = false;
-            }
-
-            if (Effekseer.GUI.Manager.NativeManager.BeginPopupModal(title + id, ref opened, Effekseer.swig.WindowFlags.AlwaysAutoResize))
-            {
-                if (Effekseer.GUI.Manager.NativeManager.DragFloat("Magnification", mag, 0.1f, 0, float.MaxValue))
-                {
-
-                }
-
-
-                if (Effekseer.GUI.Manager.NativeManager.Button("Save"))
-                {
-                    var binary = Effekseer.Binary.Exporter.Export(mag[0]);
-                    System.IO.File.WriteAllBytes(path, binary);
-                    Effekseer.Core.Option.ExternalMagnification.SetValue(mag[0]);
-                    ShouldBeRemoved = true;
-                }
-
-                if (Effekseer.GUI.Manager.NativeManager.Button("Cancel"))
-                {
-                    ShouldBeRemoved = true;
-                }
-
-                Effekseer.GUI.Manager.NativeManager.EndPopup();
-            }
-            else
-            {
-                ShouldBeRemoved = true;
-            }
-        }
-    }
-
-
-    /*
-    partial class magnification : System.Windows.Forms.Form
-    {
-        private System.ComponentModel.IContainer components = null;
-
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        private void InitializeComponent()
-        {
-            this.lbl_mag = new System.Windows.Forms.Label();
-            this.txt_magnification = new System.Windows.Forms.TextBox();
-            this.btn_ok = new System.Windows.Forms.Button();
-            this.btn_cancel = new System.Windows.Forms.Button();
-            this.SuspendLayout();
-            //
-            // lbl_mag
-            //
-            this.lbl_mag.AutoSize = true;
-            this.lbl_mag.Location = new System.Drawing.Point(12, 9);
-            this.lbl_mag.Name = "lbl_mag";
-            this.lbl_mag.Size = new System.Drawing.Size(29, 12);
-            this.lbl_mag.TabIndex = 0;
-            this.lbl_mag.Text = "Magnification";
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) this.lbl_mag.Text = "倍率";
-            //
-            // txt_magnification
-            //
-            this.txt_magnification.Location = new System.Drawing.Point(90, 6);
-            this.txt_magnification.Name = "txt_magnification";
-            this.txt_magnification.Size = new System.Drawing.Size(100, 19);
-            this.txt_magnification.TabIndex = 1;
-            this.txt_magnification.Text = Effekseer.Core.Option.ExternalMagnification.Value.ToString();
-            //
-            // btn_ok
-            //
-            this.btn_ok.Location = new System.Drawing.Point(12, 29);
-            this.btn_ok.Name = "btn_ok";
-            this.btn_ok.Size = new System.Drawing.Size(70, 23);
-            this.btn_ok.TabIndex = 2;
-            this.btn_ok.Text = "Save";
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) this.btn_ok.Text = "保存";
-            this.btn_ok.UseVisualStyleBackColor = true;
-            this.btn_ok.Click += new System.EventHandler(this.btn_ok_Click);
-            //
-            // btn_cancel
-            //
-            this.btn_cancel.Location = new System.Drawing.Point(88, 29);
-            this.btn_cancel.Name = "btn_cancel";
-            this.btn_cancel.Size = new System.Drawing.Size(70, 23);
-            this.btn_cancel.TabIndex = 3;
-            this.btn_cancel.Text = "Cancel";
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) this.btn_cancel.Text = "キャンセル";
-            this.btn_cancel.UseVisualStyleBackColor = true;
-            this.btn_cancel.Click += new System.EventHandler(this.btn_cancel_Click);
-            //
-            // magnification
-            //
-            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            this.ClientSize = new System.Drawing.Size(184, 62);
-            this.ControlBox = false;
-            this.Controls.Add(this.btn_cancel);
-            this.Controls.Add(this.btn_ok);
-            this.Controls.Add(this.txt_magnification);
-            this.Controls.Add(this.lbl_mag);
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
-            this.Name = "magnification";
-            this.Text = "Magnification";
-            if(Effekseer.Core.Language == Effekseer.Language.Japanese) this.Text = "倍率";
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
-        }
-
-        private System.Windows.Forms.Label lbl_mag;
-        private System.Windows.Forms.TextBox txt_magnification;
-        private System.Windows.Forms.Button btn_ok;
-        private System.Windows.Forms.Button btn_cancel;
-
-        public magnification(string path)
-        {
-            InitializeComponent();
-            this.path = path;
-            this.Size = new System.Drawing.Size(270, 120);
-        }
-
-        string path;
-
-        private void btn_ok_Click(object sender, System.EventArgs e)
-        {
-            float mag = 1.0f;
-            if (float.TryParse(txt_magnification.Text, out mag))
-            {
-                var binary = Effekseer.Binary.Exporter.Export(mag);
-                System.IO.File.WriteAllBytes(path, binary);
-                Effekseer.Core.Option.ExternalMagnification.SetValue(mag);
-                Close();
-            }
-        }
-
-        private void btn_cancel_Click(object sender, System.EventArgs e)
-        {
-            Close();
-        }
-    }
-    */
-}


Preliminary support for range-based searching.

--- DiffLib/LongestCommonSubstring.cs
+++ DiffLib/LongestCommonSubstring.cs
@@ -88,10 +88,70 @@
         /// </returns>
         public LongestCommonSubstringResult Find()
         {
+            return Find(0, _Collection1.Length, 0, _Collection2.Length);
+        }
+
+        ///
+        /// Finds the longest common substring and returns its position in the two collections, and
+        /// its length, or <c>null</c> if no such common substring can be located.
+        ///
+        /// <param name="lower1">
+        /// The starting position in the first collection, 0-based. Included in the search.
+        /// </param>
+        /// <param name="upper1">
+        /// The ending position in the first collection, 0-based. Not included in the search.
+        /// </param>
+        /// <param name="lower2">
+        /// The starting position in the second collection, 0-based. Included in the search.
+        /// </param>
+        /// <param name="upper2">
+        /// The ending position in the second collection, 0-based. Not included in the search.
+        /// </param>
+        /// <returns>
+        /// A <see cref="LongestCommonSubstringResult"/> containing the positions of the two substrings, one position
+        /// for each collection, both 0-based, and the length of the substring. If no common substring can be found, <c>null</c>
+        /// will be returned.
+        /// </returns>
+        /// <exception cref="ArgumentOutOfRangeException">
+        /// <para><paramref name="lower1"/> is less than 0.</para>
+        /// <para>- or -</para>
+        /// <para><paramref name="lower1"/> is greater than <paramref name="upper1"/>.</para>
+        /// <para>- or -</para>
+        /// <para><paramref name="upper1"/> is greater than the length of the first collection.</para>
+        /// <para>- or -</para>
+        /// <para><paramref name="lower2"/> is less than 0.</para>
+        /// <para>- or -</para>
+        /// <para><paramref name="lower2"/> is greater than <paramref name="upper2"/>.</para>
+        /// <para>- or -</para>
+        /// <para><paramref name="upper2"/> is greater than the length of the second collection.</para>
+        /// </exception>
+        public LongestCommonSubstringResult Find(int lower1, int upper1, int lower2, int upper2)
+        {
+            if (lower1 < 0)
+                throw new ArgumentOutOfRangeException("lower1", lower1, "lower1 must be 0 or greater");
+            if (lower1 > upper1)
+                throw new ArgumentOutOfRangeException("lower1", lower1,
+                    string.Format("lower1 must be equal to or less than upper1 ({0})", upper1));
+            if (upper1 > _Collection1.Length)
+                throw new ArgumentOutOfRangeException("upper1", upper1,
+                    "upper1 must be equal to or less than the length of the first collection");
+            if (lower2 < 0)
+                throw new ArgumentOutOfRangeException("lower2", lower2, "lower2 must be 0 or greater");
+            if (lower2 > upper2)
+                throw new ArgumentOutOfRangeException("lower2", lower2,
+                    string.Format("lower2 must be equal to or less than upper2 ({0})", upper2));
+            if (upper2 > _Collection2.Length)
+                throw new ArgumentOutOfRangeException("upper2", upper2,
+                    "upper2 must be equal to or less than the length of the first collection");
+
+            // Pathological cases
+            if (lower1 == upper1 || lower2 == upper2)
+                return null;
+
             int maxMatchingLength = -1;
             int maxMatchingPosition1 = -1;
             int maxMatchingPosition2 = -1;
-            for (int index1 = 0; index1 < _Collection1.Length; index1++)
+            for (int index1 = lower1; index1 < upper1; index1++)
             {
                 Occurance occurance;
                 if (_LookupTable.TryGetValue(_Collection1[index1].HashCode, out occurance))
@@ -101,7 +161,10 @@
                         int index2 = occurance.Position;
                         occurance = occurance.Next;

-                        int length = CountMatchingElements(index1, index2);
+                        if (index2 < lower2 || index2 >= upper2)
+                            continue;
+
+                        int length = CountMatchingElements(index1, upper1, index2, upper2);
                         if (length > 0 && length > maxMatchingLength)
                         {
                             maxMatchingLength = length;
@@ -133,10 +196,10 @@
                 _LookupTable[hc] = new Occurance(index, null);
         }

-        private int CountMatchingElements(int index1, int index2)
+        private int CountMatchingElements(int index1, int upper1, int index2, int upper2)
         {
             int startIndex = index1;
-            while (index1 < _Collection1.Length && index2 < _Collection2.Length &&
+            while (index1 < upper1 && index2 < upper2 &&
                    _Collection1[index1].HashCode == _Collection2[index2].HashCode)
             {
                 if (!_Comparer.Equals(_Collection1[index1].Item, _Collection2[index2].Item))


reduce banner size on on authorization page

--- source/WebHost/Views/Authorize/Consent.cshtml
+++ source/WebHost/Views/Authorize/Consent.cshtml
@@ -4,6 +4,14 @@
     ViewBag.Title = "Authorize";
 }

+@section css{
+
+}


Fixed issue where mapper was not checking the underlying type of fields when building lookups for retention time.

--- Source/Libraries/ECAClientUtilities/MapperBase.cs
+++ Source/Libraries/ECAClientUtilities/MapperBase.cs
@@ -292,7 +292,10 @@
                 else if (retentionTime == TimeSpan.Zero)
                     retentionTime = parentRetention;

-                if (fieldMapping.Field.Type.IsUserDefined)
+                DataType fieldType = fieldMapping.Field.Type;
+                DataType underlyingType = (fieldType as ArrayType)?.UnderlyingType;
+
+                if ((underlyingType ?? fieldType).IsUserDefined)
                 {
                     foreach (TypeMapping nestedMapping in m_mappingCompiler.EnumerateTypeMappings(fieldMapping.Expression))
                         BuildRetentionTimes(retentionTimes, nestedMapping, retentionTime);


Added test to RuntimeEntityTests check entity only commits changes to dirty components.

--- Source/OpenAOE.Engine.Tests/RuntimeEntityTests.cs
+++ Source/OpenAOE.Engine.Tests/RuntimeEntityTests.cs
@@ -1,4 +1,5 @@
-using Moq;
+using System;
+using Moq;
 using NUnit.Framework;
 using OpenAOE.Engine.Data;
 using OpenAOE.Engine.Data.Events;
@@ -81,5 +82,35 @@
             entity.Commit();
             entity.Current<ISimpleComponent>().Value.ShouldBe(5);
         }
+
+        [Test]
+        public void EntityCommitsDirtyComponentOnlyWhenDirty()
+        {
+            var mockWEntity = new Mock<IWriteableSimpleComponent>();
+            var mockEntity = mockWEntity.As<ISimpleComponent>();
+
+            var cloneWEntity = new Mock<IWriteableSimpleComponent>(mockEntity.Behavior);
+            var cloneEntity = cloneWEntity.As<ISimpleComponent>();
+
+            mockEntity.SetupGet(c => c.Type).Returns(typeof (ISimpleComponent));
+            mockEntity.Setup(c => c.Clone()).Returns(() => cloneEntity.Object);
+
+            // Setup entity and mark ISimpleComponent as dirty
+            var entity = new RuntimeEntity(0, new IComponent[] { mockEntity.Object }, Mock.Of<IEventPoster>());
+
+            // Ensure a commit with the component non-dirty doesn't trigger a copy.
+            entity.Commit();
+            cloneEntity.Verify(c => c.CopyTo(mockEntity.Object),
+                Times.Never());
+
+            // Modify the component to set as dirty
+            entity.Modify<IWriteableSimpleComponent>();
+
+            // Trigger an entity commit, which should cause the entity to replicate
+            // changes from `Next` to `Current`.
+            entity.Commit();
+            cloneEntity.Verify(c => c.CopyTo(mockEntity.Object),
+                Times.Once());
+        }
     }
 }


don't copy some setters

don't copy some setters

--- Wox.Core/Resource/Theme.cs
+++ Wox.Core/Resource/Theme.cs
@@ -119,7 +119,6 @@
             };

             Style queryBoxStyle = dict["QueryBoxStyle"] as Style;
-
             if (queryBoxStyle != null)
             {
                 queryBoxStyle.Setters.Add(new Setter(TextBox.FontFamilyProperty, new FontFamily(Settings.QueryBoxFont)));
@@ -133,12 +132,13 @@
                     queryBoxStyle.Setters.Add(new Setter(TextBox.CaretBrushProperty, foregroundPropertyValue));
             }

-            var queryTextSuggestionBoxStyle = new Style(typeof (TextBox), queryBoxStyle);
+            var queryTextSuggestionBoxStyle = new Style(typeof(TextBox), queryBoxStyle);
             bool hasSuggestion = false;
             if (dict.Contains("QueryTextSuggestionBoxStyle")) {
                 queryTextSuggestionBoxStyle = dict["QueryTextSuggestionBoxStyle"] as Style;
                 hasSuggestion = true;
             }
+            dict["QueryTextSuggestionBoxStyle"] = queryTextSuggestionBoxStyle;
             if (queryTextSuggestionBoxStyle != null)
             {
                 queryTextSuggestionBoxStyle.Setters.Add(new Setter(TextBox.FontFamilyProperty, new FontFamily(Settings.QueryBoxFont)));
@@ -150,15 +150,24 @@
             var queryBoxStyleSetters = queryBoxStyle.Setters.OfType<Setter>().ToList();
             var queryTextSuggestionBoxStyleSetters = queryTextSuggestionBoxStyle.Setters.OfType<Setter>().ToList();
             foreach (Setter setter in queryBoxStyleSetters) {
+                if (setter.Property == TextBox.BackgroundProperty)
+                    continue;
+                if (setter.Property == TextBox.ForegroundProperty)
+                    continue;
                 if (queryTextSuggestionBoxStyleSetters.All(x => x.Property != setter.Property))
                     queryTextSuggestionBoxStyle.Setters.Add(setter);
             }

             if (!hasSuggestion) {
-                queryTextSuggestionBoxStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == TextBox.BackgroundProperty).Value =
-                    queryBoxStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == TextBox.BackgroundProperty)?.Value ??
+                var backgroundBrush = queryBoxStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == TextBox.BackgroundProperty)?.Value ??
                     (dict["BaseQuerySuggestionBoxStyle"] as Style).Setters.OfType<Setter>().FirstOrDefault(x => x.Property == TextBox.BackgroundProperty).Value;
                 queryBoxStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == TextBox.BackgroundProperty).Value = Brushes.Transparent;
+                if (queryTextSuggestionBoxStyle.Setters.OfType<Setter>().Any(x => x.Property == TextBox.BackgroundProperty)) {
+                    queryTextSuggestionBoxStyle.Setters.OfType<Setter>().First(x => x.Property == TextBox.BackgroundProperty).Value = backgroundBrush;
+                }
+                else {
+                    queryTextSuggestionBoxStyle.Setters.Add(new Setter(TextBox.BackgroundProperty, backgroundBrush));
+                }
             }

             Style resultItemStyle = dict["ItemTitleStyle"] as Style;


Inherit interface

Inherit interface

--- XmlDict/XmlDictNodeList.cs
+++ XmlDict/XmlDictNodeList.cs
@@ -3,7 +3,7 @@

 namespace XmlDict
 {
-    public class XmlDictNodeList
+    public class XmlDictNodeList : IXmlDict
     {
         private List<XmlDictNode> _dictionaries = new List<XmlDictNode>();


In case of syntax error, do not report an empty range.

--- YamlDotNet/Core/Scanner.cs
+++ YamlDotNet/Core/Scanner.cs
@@ -492,8 +492,11 @@
 			}

 			// If we don't determine the token type so far, it is an error.
-			var mark = cursor.Mark();
-			throw new SyntaxErrorException(mark, mark, "While scanning for the next token, find character that cannot start any token.");
+			var start = cursor.Mark();
+			Skip();
+			var end = cursor.Mark();
+
+			throw new SyntaxErrorException(start, end, "While scanning for the next token, find character that cannot start any token.");
 		}

 		private bool CheckWhiteSpace()


Created UI actions for repeat mode functionality; this is where the repeat

2008-02-27  Aaron Bockover  <abock@gnome.org>

    * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackRepeatActions.cs:
    Created UI actions for repeat mode functionality; this is where the
    repeat mode can be accessed and is stored/loaded from configuration;
    the UI actions are set up here

    * src/Core/Banshee.ThickClient/Banshee.Gui.Widgets/RepeatActionButton.cs:
    A special button that syncs its state with the PlaybackRepeatActions and
    presents the actions as a popup menu

    * src/Clients/Nereid/Nereid/PlayerInterface.cs: Make the footer actually
    a Gtk.Toolbar, pack the new RepeatActionButton, and do some allocation
    magic to ensure the status bar is always centered on the toolbar; moved
    the only two schema items that are still at the client level into here

    * src/Core/Banshee.ThickClient/Banshee.Gui/BansheeIconFactory.cs: Added
    the media-repeat icons into the stock

    * src/Core/Banshee.ThickClient/Banshee.Gui/PlaybackActions.cs: Load the
    PlaybackRepeatActions as a child set of actions

    * src/Clients/Nereid/Nereid/PlayerWindowSchema.cs: Removed

    * src/Core/Banshee.ThickClient/Resources/core-ui-actions-layout.xml:
    Added a ToolbarFooter object

    * src/Libraries/Hyena/Hyena/StringUtil.cs: Added UnderCaseToCamelCase
    method that does the opposite of what CamelCaseToUnderCaseDoes; use
    a StringBuilder for the latter

    * tests/Hyena/StringUtilTests.cs: Added some tests for the above two methods

svn path=/trunk/banshee/; revision=3343

--- Hyena/Hyena/StringUtil.cs
+++ Hyena/Hyena/StringUtil.cs
@@ -27,6 +27,7 @@
 //

 using System;
+using System.Text;
 using System.Globalization;
 using System.Text.RegularExpressions;

@@ -66,7 +67,7 @@
                 return null;
             }

-            string undercase = String.Empty;
+            StringBuilder undercase = new StringBuilder ();
             string [] tokens = Regex.Split (s, "([A-Z]{1}[a-z]+)");

             for (int i = 0; i < tokens.Length; i++) {
@@ -74,13 +75,42 @@
                     continue;
                 }

-                undercase += tokens[i].ToLower ();
+                undercase.Append (tokens[i].ToLower ());
                 if (i < tokens.Length - 2) {
-                    undercase += "_";
+                    undercase.Append ('_');
                 }
             }

-            return undercase;
+            return undercase.ToString ();
+        }
+
+        public static string UnderCaseToCamelCase (string s)
+        {
+            if (String.IsNullOrEmpty (s)) {
+                return null;
+            }
+
+            StringBuilder builder = new StringBuilder ();
+
+            for (int i = 0, n = s.Length, b = -1; i < n; i++) {
+                if (b < 0 && s[i] != '_') {
+                    builder.Append (Char.ToUpper (s[i]));
+                    b = i;
+                } else if (s[i] == '_' && i + 1 < n && s[i + 1] != '_') {
+                    if (builder.Length > 0 && Char.IsUpper (builder[builder.Length - 1])) {
+                        builder.Append (Char.ToLower (s[i + 1]));
+                    } else {
+                        builder.Append (Char.ToUpper (s[i + 1]));
+                    }
+                    i++;
+                    b = i;
+                } else if (s[i] != '_') {
+                    builder.Append (Char.ToLower (s[i]));
+                    b = i;
+                }
+            }
+
+            return builder.ToString ();
         }
     }
 }


made ignored tests explicit

made ignored tests explicit

--- StatePrinter.Tests/TestingAssistance/USerStory.cs
+++ StatePrinter.Tests/TestingAssistance/USerStory.cs
@@ -40,7 +40,7 @@
         }
     }

-    [Ignore("Run these in order to see how Nunit integrates with the testing assistance")]
+    [Explicit("Run these in order to see how Nunit integrates with the testing assistance")]
     [TestFixture]
     class Userstory
     {


Reorder comparison in tests

Reorder comparison in tests

--- SurveyMonkeyTests/WebClientInfrastructureTests.cs
+++ SurveyMonkeyTests/WebClientInfrastructureTests.cs
@@ -45,19 +45,19 @@
             //Should be no rate limit first time
             stopwatch.Start();
             api.GetSurveys();
-            Assert.GreaterOrEqual(toleranceMilliseconds, stopwatch.ElapsedMilliseconds);
+            Assert.LessOrEqual(stopwatch.ElapsedMilliseconds, toleranceMilliseconds);

             //Second request should be rate limited
             stopwatch.Restart();
             api.GetSurveys();
-            Assert.LessOrEqual(defaultRateLimitMilliseconds - toleranceMilliseconds, stopwatch.ElapsedMilliseconds);
-            Assert.GreaterOrEqual(defaultRateLimitMilliseconds + toleranceMilliseconds, stopwatch.ElapsedMilliseconds);
+            Assert.GreaterOrEqual(stopwatch.ElapsedMilliseconds, defaultRateLimitMilliseconds - toleranceMilliseconds);
+            Assert.LessOrEqual(stopwatch.ElapsedMilliseconds, defaultRateLimitMilliseconds + toleranceMilliseconds);

             //Check subsequent requests are rate limited too
             stopwatch.Restart();
             api.GetSurveys();
-            Assert.LessOrEqual(defaultRateLimitMilliseconds - toleranceMilliseconds, stopwatch.ElapsedMilliseconds);
-            Assert.GreaterOrEqual(defaultRateLimitMilliseconds + toleranceMilliseconds, stopwatch.ElapsedMilliseconds);
+            Assert.GreaterOrEqual(stopwatch.ElapsedMilliseconds, defaultRateLimitMilliseconds - toleranceMilliseconds);
+            Assert.LessOrEqual(stopwatch.ElapsedMilliseconds, defaultRateLimitMilliseconds + toleranceMilliseconds);
         }
     }
 }


Fixes c0a529a421cb47145a32078770205e42545e7021

--- System/compmod/system/diagnostics/TypedElement.cs
+++ System/compmod/system/diagnostics/TypedElement.cs
@@ -11,7 +11,7 @@

 namespace System.Diagnostics {
     internal class TypedElement : ConfigurationElement {
-#if BOOTSTRAP
+#if BOOTSTRAP_BASIC
         protected static readonly ConfigurationProperty _propTypeName = new ConfigurationProperty("type", typeof(string), String.Empty, ConfigurationPropertyOptions.IsRequired);
 #else
         protected static readonly ConfigurationProperty _propTypeName = new ConfigurationProperty("type", typeof(string), String.Empty, ConfigurationPropertyOptions.IsRequired | ConfigurationPropertyOptions.IsTypeStringTransformationRequired);


Local UserData Default #CHANGE: Duality applications now default to storing their user data in the local folder, rather then the OS user directory.

--- Duality/Utility/DualityAppData.cs
+++ Duality/Utility/DualityAppData.cs
@@ -12,19 +12,19 @@
 	/// </summary>
 	public class DualityAppData
 	{
-		private	string				appName					= "Duality Application";
-		private	string				authorName				= "Unknown";
-		private	string				websiteUrl				= "http://www.adamslair.net";
-		private	uint				version					= 0;
-		private	ContentRef<Scene>	startScene				= null;
-		private	float				speedOfSound			= 360.0f;
-		private	float				soundDopplerFactor		= 1.0f;
-		private	float				physicsVelThreshold		= 0.5f * PhysicsUnit.VelocityToDuality;
-		private	bool				physicsFixedTime		= false;
-		private	bool				localUserData			= false;
-		private	bool				multisampleBackBuffer	= true;
-		private string[]			skipBackends			= null;
-		private	object				customData				= null;
+		private string            appName               = "Duality Application";
+		private string            authorName            = "Unknown";
+		private string            websiteUrl            = "http://www.adamslair.net";
+		private uint              version               = 0;
+		private ContentRef<Scene> startScene            = null;
+		private float             speedOfSound          = 360.0f;
+		private float             soundDopplerFactor    = 1.0f;
+		private float             physicsVelThreshold   = 0.5f * PhysicsUnit.VelocityToDuality;
+		private bool              physicsFixedTime      = false;
+		private bool              localUserData         = true;
+		private bool              multisampleBackBuffer = true;
+		private string[]          skipBackends          = null;
+		private object            customData            = null;

 		/// <summary>
 		/// [GET / SET] The name of your application / game. It will also be used as a window title by the launcher app.


Remove unused FileReadBufferSize property.

The last reference was removed in revision 20f7b42945.

--- Duplicati/Library/Main/Options.cs
+++ Duplicati/Library/Main/Options.cs
@@ -1369,22 +1369,6 @@
         }

         /// <summary>
-        /// Gets the size the read-ahead buffer
-        /// </summary>
-        public long FileReadBufferSize
-        {
-            get
-            {
-                string tmp;
-                if (!m_options.TryGetValue("file-read-buffer-size", out tmp))
-                    tmp = DEFAULT_READ_BUFFER_SIZE;
-
-                long t = Library.Utility.Sizeparser.ParseSize(tmp, "mb");
-                return (int)t;
-            }
-        }
-
-        /// <summary>
         /// Gets a flag indicating if metadata for files and folders should be ignored
         /// </summary>
         public bool SkipMetadata


Skip Leaderboard test wich timeouts frequently.

--- applications/leaderboard/LeaderboardTest/Tests.cs
+++ applications/leaderboard/LeaderboardTest/Tests.cs
@@ -82,7 +82,7 @@
                 _fixture.ProjectId, _fixture.InstanceId, _fixture.DatabaseId);
         }

-        [Fact]
+        [Fact(Skip = "https://github.com/GoogleCloudPlatform/dotnet-docs-samples/issues/928")]
         void TestLeaderboard()
         {
             // Insert Player records.


Canonicalize filepaths containing native system sub-directory

--- EarTrumpet/UI/Controls/ImageEx.cs
+++ EarTrumpet/UI/Controls/ImageEx.cs
@@ -3,6 +3,7 @@
 using EarTrumpet.UI.Helpers;
 using System;
 using System.Diagnostics;
+using System.IO;
 using System.Text;
 using System.Windows;
 using System.Windows.Controls;
@@ -19,6 +20,8 @@
           "SourceEx", typeof(IAppIconSource), typeof(ImageEx), new PropertyMetadata(null, new PropertyChangedCallback(OnSourceExChanged)));

         private uint _dpi;
+        private static readonly string _windowsPath = Environment.GetFolderPath(Environment.SpecialFolder.Windows);
+        private static readonly string _systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);

         public ImageEx()
         {
@@ -102,6 +105,7 @@

         public static ImageSource LoadShellIcon(string path, bool isDesktopApp, int cx, int cy)
         {
+            path = CanonicalizePath(path);
             var item = isDesktopApp ? Shell32.SHCreateItemFromParsingName(path, IntPtr.Zero, typeof(IShellItem2).GUID) :
                 Shell32.SHCreateItemInKnownFolder(FolderIds.AppsFolder, Shell32.KF_FLAG_DONT_VERIFY, path, typeof(IShellItem2).GUID);

@@ -118,6 +122,15 @@
             }
         }

+        private static string CanonicalizePath(string path)
+        {
+            if (Path.GetDirectoryName(path).StartsWith(_systemPath, StringComparison.InvariantCultureIgnoreCase))
+            {
+                path = Path.Combine(_windowsPath, "sysnative", path.Substring(_systemPath.Length + 1));
+            }
+            return path;
+        }
+
         private uint GetWindowDpi() => User32.GetDpiForWindow(((HwndSource)PresentationSource.FromVisual(this)).Handle);
         private static void OnSourceExChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) => ((ImageEx)d).OnSourceExChanged();
     }


LastElement() tests.

LastElement() tests.

--- sources/HDocument.Tests/HQuery/ElementTest.cs
+++ sources/HDocument.Tests/HQuery/ElementTest.cs
@@ -406,6 +406,27 @@

         #endregion

+        #region LastElement()
+
+        [Fact]
+        public void TestLastElement()
+        {
+            var element1 = new HElement("div", "Content");
+            var element2 = new HElement("div", "Content2");
+
+            var elements = new HElement[] { element1, element2, null };
+            Assert.Same(element2, elements.LastElement().Single());
+
+            elements = new HElement[] { null };
+            Assert.Equal(0, elements.LastElement().Count());
+
+            elements = null;
+            Assert.Equal(0, elements.LastElement().Count());
+
+        }
+
+        #endregion
+
         #region Html()

         [Fact]


Added NewLine() to ILogger

Added NewLine() to ILogger

--- UniversalUnityHooks.Logging/Interfaces/ILogger.cs
+++ UniversalUnityHooks.Logging/Interfaces/ILogger.cs
@@ -19,5 +19,7 @@
         void LogError(string message);

         void LogCritical(string message);
+
+        void NewLine();
     }
 }


correction on change view

correction on change view

--- VTigerManagerDemoControls/KeyValueDataGridView.cs
+++ VTigerManagerDemoControls/KeyValueDataGridView.cs
@@ -131,10 +131,20 @@
                 foreach (DataRow inRow in inputTable.Rows)
                 {
                     //string colValue = inRow[iCol].ToString();
-                    if ((string)inRow[iCol] == "")
-                        row[i] = DBNull.Value;
-                    else
-                        row[i] = inRow[iCol];
+                    try
+                    {
+
+                        if (string.IsNullOrEmpty(inRow[iCol].ToString()))
+                            row[i] = DBNull.Value;
+                        else
+                            row[i] = inRow[iCol];
+                    }
+                    catch (Exception e)
+                    {
+
+
+                    }
+
                     i++;
                 }
                 outputTable.Rows.Add(row);


Delete Target.cs

Delete Target.cs

--- GUI/Target.cs
+++ GUI/Target.cs
@@ -1,8 +0,0 @@
-using System;
-
-public class Class1
-{
-	public Class1()
-	{
-	}
-}


Fix broken build.

Fix broken build.

--- src/Agent.Worker/Build/TfsVCSourceProvider.cs
+++ src/Agent.Worker/Build/TfsVCSourceProvider.cs
@@ -123,7 +123,7 @@
                     }
 #else
                     // Undo pending changes.
-                    ITfsVCStatus tfStatus = await tf.StatusAsync();
+                    ITfsVCStatus tfStatus = await tf.StatusAsync(localPath: sourcesDirectory);
                     if (tfStatus?.HasPendingChanges ?? false)
                     {
                         await tf.UndoAsync(localPath: sourcesDirectory);


Minor changes

Minor changes

--- WWCP_Core/Commands/SendCDRs/OnSendCDRsDelegate.cs
+++ WWCP_Core/Commands/SendCDRs/OnSendCDRsDelegate.cs
@@ -30,21 +30,6 @@
 {

     /// <summary>
-    /// Create a SendChargeDetailRecord request.
-    /// </summary>
-    /// <param name="Timestamp">The timestamp of the request.</param>
-    /// <param name="CancellationToken">A token to cancel this request.</param>
-    /// <param name="EventTrackingId">An unique event tracking identification for correlating this request with other events.</param>
-    /// <param name="ChargeDetailRecords">An enumeration of charge detail records.</param>
-    /// <param name="RequestTimeout">An optional timeout for this request.</param>
-    public delegate Task<SendCDRsResult> OnChargeDetailRecordDelegate(DateTime                         Timestamp,
-                                                                      CancellationToken                CancellationToken,
-                                                                      EventTracking_Id                 EventTrackingId,
-                                                                      IEnumerable<ChargeDetailRecord>  ChargeDetailRecords,
-                                                                      TimeSpan?                        RequestTimeout  = null);
-
-
-    /// <summary>
     /// An event fired whenever a charge detail record will be send.
     /// </summary>
     /// <param name="LogTimestamp">The timestamp of the logging.</param>
@@ -65,6 +50,21 @@
                                                   IEnumerable<ChargeDetailRecord>  DroppedChargeDetailRecords,
                                                   IEnumerable<ChargeDetailRecord>  ForwardedChargeDetailRecords,
                                                   TimeSpan?                        RequestTimeout);
+
+
+    /// <summary>
+    /// Create a SendChargeDetailRecord request.
+    /// </summary>
+    /// <param name="Timestamp">The timestamp of the request.</param>
+    /// <param name="CancellationToken">A token to cancel this request.</param>
+    /// <param name="EventTrackingId">An unique event tracking identification for correlating this request with other events.</param>
+    /// <param name="ChargeDetailRecords">An enumeration of charge detail records.</param>
+    /// <param name="RequestTimeout">An optional timeout for this request.</param>
+    public delegate Task<SendCDRsResult> OnChargeDetailRecordDelegate(DateTime                         Timestamp,
+                                                                      CancellationToken                CancellationToken,
+                                                                      EventTracking_Id                 EventTrackingId,
+                                                                      IEnumerable<ChargeDetailRecord>  ChargeDetailRecords,
+                                                                      TimeSpan?                        RequestTimeout  = null);

     /// <summary>


Fist test of working pgm

Fist test of working pgm

--- Irmelin/Form1.Designer.cs
+++ Irmelin/Form1.Designer.cs
@@ -40,10 +40,10 @@
             // gamePicture
             //
             this.gamePicture.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
-            this.gamePicture.Location = new System.Drawing.Point(50, 240);
-            this.gamePicture.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.gamePicture.Location = new System.Drawing.Point(25, 125);
+            this.gamePicture.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
             this.gamePicture.Name = "gamePicture";
-            this.gamePicture.Size = new System.Drawing.Size(2000, 923);
+            this.gamePicture.Size = new System.Drawing.Size(1000, 480);
             this.gamePicture.TabIndex = 1;
             this.gamePicture.TabStop = false;
             //
@@ -52,22 +52,21 @@
             this.lblPlatform.BackColor = System.Drawing.Color.Gainsboro;
             this.lblPlatform.Font = new System.Drawing.Font("Segoe UI Semibold", 40F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
             this.lblPlatform.ForeColor = System.Drawing.Color.DimGray;
-            this.lblPlatform.Location = new System.Drawing.Point(42, 17);
-            this.lblPlatform.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.lblPlatform.Location = new System.Drawing.Point(21, 9);
+            this.lblPlatform.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
             this.lblPlatform.Name = "lblPlatform";
-            this.lblPlatform.Size = new System.Drawing.Size(2000, 144);
+            this.lblPlatform.Size = new System.Drawing.Size(1000, 75);
             this.lblPlatform.TabIndex = 3;
             this.lblPlatform.Text = "Super Nintendo Entertainment System";
-            this.lblPlatform.Click += new System.EventHandler(this.lblPlatform_Click);
             //
             // panel1
             //
             this.panel1.BackColor = System.Drawing.Color.Gainsboro;
             this.panel1.Controls.Add(this.lblPlatform);
             this.panel1.Location = new System.Drawing.Point(0, 0);
-            this.panel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
             this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(2100, 192);
+            this.panel1.Size = new System.Drawing.Size(1050, 100);
             this.panel1.TabIndex = 4;
             //
             // labelModel
@@ -75,10 +74,10 @@
             this.labelModel.BackColor = System.Drawing.Color.DarkGray;
             this.labelModel.Font = new System.Drawing.Font("Segoe UI Semilight", 26F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
             this.labelModel.ForeColor = System.Drawing.Color.DimGray;
-            this.labelModel.Location = new System.Drawing.Point(50, 1202);
-            this.labelModel.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+            this.labelModel.Location = new System.Drawing.Point(25, 625);
+            this.labelModel.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
             this.labelModel.Name = "labelModel";
-            this.labelModel.Size = new System.Drawing.Size(2000, 96);
+            this.labelModel.Size = new System.Drawing.Size(1000, 50);
             this.labelModel.TabIndex = 5;
             this.labelModel.Text = "Arkanoid, 1981";
             this.labelModel.TextAlign = System.Drawing.ContentAlignment.TopCenter;
@@ -87,18 +86,18 @@
             // panel2
             //
             this.panel2.BackColor = System.Drawing.Color.Gainsboro;
-            this.panel2.Location = new System.Drawing.Point(0, 3038);
-            this.panel2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.panel2.Location = new System.Drawing.Point(0, 1580);
+            this.panel2.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
             this.panel2.Name = "panel2";
-            this.panel2.Size = new System.Drawing.Size(2100, 192);
+            this.panel2.Size = new System.Drawing.Size(1050, 100);
             this.panel2.TabIndex = 5;
             //
             // Form1
             //
-            this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F);
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
             this.BackColor = System.Drawing.Color.DarkGray;
-            this.ClientSize = new System.Drawing.Size(2100, 1918);
+            this.ClientSize = new System.Drawing.Size(1050, 1680);
             this.ControlBox = false;
             this.Controls.Add(this.panel2);
             this.Controls.Add(this.labelModel);
@@ -107,7 +106,7 @@
             this.DoubleBuffered = true;
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
             this.KeyPreview = true;
-            this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+            this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
             this.MaximizeBox = false;
             this.MinimizeBox = false;
             this.Name = "Form1";


remove redundant code

remove redundant code

--- tests/Xbehave.Test/Infrastructure/TypeExtensions.cs
+++ tests/Xbehave.Test/Infrastructure/TypeExtensions.cs
@@ -7,7 +7,6 @@
     using System.Linq;
     using System.Reflection;
     using System.Threading;
-    using System.Threading.Tasks;

     internal static class TypeExtensions
     {
@@ -40,16 +39,6 @@
             }
         }

-        public static async Task SaveTestEventAsync(this Type feature, string @event)
-        {
-            await Task.Delay(1);
-            using (var file = File.Create(Path.Combine(feature.GetDirectoryName(), string.Concat(@event, ".", feature.Name))))
-            using (var writer = new StreamWriter(file))
-            {
-                await writer.WriteAsync(DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture));
-            }
-        }
-
         private static string GetDirectoryName(this Type feature) =>
             Path.GetDirectoryName(feature.GetTypeInfo().Assembly.GetLocalCodeBase());
     }


Converted TagOpt.cs line endings to CRLF.

--- GitSharp.Core/Transport/TagOpt.cs
+++ GitSharp.Core/Transport/TagOpt.cs
@@ -1,104 +1,104 @@
-/*
- * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- *   copyright notice, this list of conditions and the following
- *   disclaimer in the documentation and/or other materials provided
- *   with the distribution.
- *
- * - Neither the name of the Git Development Community nor the
- *   names of its contributors may be used to endorse or promote
- *   products derived from this software without specific prior
- *   written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-
-namespace GitSharp.Core.Transport
-{
-
-    /** Specification of annotated tag behavior during fetch. */
-    public class TagOpt
-    {
-        /**
- * Automatically follow tags if we fetch the thing they point at.
- * <para />
- * This is the default behavior and tries to balance the benefit of having
- * an annotated tag against the cost of possibly objects that are only on
- * branches we care nothing about. Annotated tags are fetched only if we can
- * prove that we already have (or will have when the fetch completes) the
- * object the annotated tag peels (dereferences) to.
- */
-        public static readonly TagOpt AUTO_FOLLOW = new TagOpt(string.Empty);
-
-        /**
- * Never fetch tags, even if we have the thing it points at.
- * <para />
- * This option must be requested by the user and always avoids fetching
- * annotated tags. It is most useful if the location you are fetching from
- * publishes annotated tags, but you are not interested in the tags and only
- * want their branches.
- */
-        public static readonly TagOpt NO_TAGS = new TagOpt("--no-tags");
-
-        /**
- * Always fetch tags, even if we do not have the thing it points at.
- * <para />
- * Unlike {@link #AUTO_FOLLOW} the tag is always obtained. This may cause
- * hundreds of megabytes of objects to be fetched if the receiving
- * repository does not yet have the necessary dependencies.
- */
-        public static readonly TagOpt FETCH_TAGS = new TagOpt("--tags");
-
-        /**
-         * workaround to match java style
-         */
-        private static readonly TagOpt[] values = new[] { NO_TAGS, FETCH_TAGS };
-
-        public string Option { get; private set; }
-
-        private TagOpt(string o)
-        {
-            Option = o;
-        }
-
-        public static TagOpt fromOption(string o)
-        {
-            if (string.IsNullOrEmpty(o))
-            {
-                return AUTO_FOLLOW;
-            }
-
-            foreach (TagOpt tagopt in values)
-            {
-                if (tagopt.Option.Equals(o))
-                    return tagopt;
-            }
-            throw new ArgumentException("Invalid tag option: " + o);
-        }
-    }
-
+/*
+ * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org>
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the following
+ *   disclaimer in the documentation and/or other materials provided
+ *   with the distribution.
+ *
+ * - Neither the name of the Git Development Community nor the
+ *   names of its contributors may be used to endorse or promote
+ *   products derived from this software without specific prior
+ *   written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+
+namespace GitSharp.Core.Transport
+{
+
+    /** Specification of annotated tag behavior during fetch. */
+    public class TagOpt
+    {
+        /**
+ * Automatically follow tags if we fetch the thing they point at.
+ * <para />
+ * This is the default behavior and tries to balance the benefit of having
+ * an annotated tag against the cost of possibly objects that are only on
+ * branches we care nothing about. Annotated tags are fetched only if we can
+ * prove that we already have (or will have when the fetch completes) the
+ * object the annotated tag peels (dereferences) to.
+ */
+        public static readonly TagOpt AUTO_FOLLOW = new TagOpt(string.Empty);
+
+        /**
+ * Never fetch tags, even if we have the thing it points at.
+ * <para />
+ * This option must be requested by the user and always avoids fetching
+ * annotated tags. It is most useful if the location you are fetching from
+ * publishes annotated tags, but you are not interested in the tags and only
+ * want their branches.
+ */
+        public static readonly TagOpt NO_TAGS = new TagOpt("--no-tags");
+
+        /**
+ * Always fetch tags, even if we do not have the thing it points at.
+ * <para />
+ * Unlike {@link #AUTO_FOLLOW} the tag is always obtained. This may cause
+ * hundreds of megabytes of objects to be fetched if the receiving
+ * repository does not yet have the necessary dependencies.
+ */
+        public static readonly TagOpt FETCH_TAGS = new TagOpt("--tags");
+
+        /**
+         * workaround to match java style
+         */
+        private static readonly TagOpt[] values = new[] { NO_TAGS, FETCH_TAGS };
+
+        public string Option { get; private set; }
+
+        private TagOpt(string o)
+        {
+            Option = o;
+        }
+
+        public static TagOpt fromOption(string o)
+        {
+            if (string.IsNullOrEmpty(o))
+            {
+                return AUTO_FOLLOW;
+            }
+
+            foreach (TagOpt tagopt in values)
+            {
+                if (tagopt.Option.Equals(o))
+                    return tagopt;
+            }
+            throw new ArgumentException("Invalid tag option: " + o);
+        }
+    }
+
 }


Can now change verb type

Can now change verb type

--- WebEditor/WebEditor/Views/Edit/VerbsEditor.cshtml
+++ WebEditor/WebEditor/Views/Edit/VerbsEditor.cshtml
@@ -28,7 +28,7 @@

             @Html.CheckBox("verbs-select-" + attr.AttributeName, new { @class = "verbs-select" })
             @attr.AttributeName
-            @Html.DropDownList("verbs-type-" + attr.AttributeName, typesList)
+            @Html.DropDownList("verbs-type-" + attr.AttributeName, typesList, new { @class = "multi-dropdown", data_key = attr.AttributeName })

             @if (scriptValue != null)
             {


Ensure sources header is wide enough for the label (BL-250)

--- src/BloomExe/CollectionTab/LibraryListView.cs
+++ src/BloomExe/CollectionTab/LibraryListView.cs
@@ -240,7 +240,10 @@
 																				"Sources For New Shells");
 			string bookSourceHeading = L10NSharp.LocalizationManager.GetString("CollectionTab.bookSourceHeading",
 																			   "Sources For New Books");
-				bookSourcesHeader.Label.Text = _model.IsShellProject ? shellSourceHeading : bookSourceHeading;
+			bookSourcesHeader.Label.Text = _model.IsShellProject ? shellSourceHeading : bookSourceHeading;
+			// Don't truncate the heading: see https://jira.sil.org/browse/BL-250.
+			if (bookSourcesHeader.Width < bookSourcesHeader.Label.Width)
+				bookSourcesHeader.Width = bookSourcesHeader.Label.Width;
 			invisibleHackPartner = new Label() {Text = "", Width = 0};
 			_sourceBooksFlow.Controls.Add(invisibleHackPartner);
 			_sourceBooksFlow.Controls.Add(bookSourcesHeader);


Set version to 0.9.0.

Set version to 0.9.0.

--- GitTfs/Properties/AssemblyInfo.cs
+++ GitTfs/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.0.0.0")]
-[assembly: AssemblyFileVersion("0.0.0.0")]
+[assembly: AssemblyVersion("0.9.0.0")]
+[assembly: AssemblyFileVersion("0.9.0.0")]


whitespace.

whitespace.

--- src/Chinchilla/WorkerPoolWorkersController.cs
+++ src/Chinchilla/WorkerPoolWorkersController.cs
@@ -43,6 +43,7 @@

                 throw new ChinchillaException(message);
             }
+
             return worker;
         }
     }


Enable some tests for DbLinq.SqlServer_test.

Should have done this with the previous commit, which fixed the tests for SQL
Server's Northwind DB...

git-svn-id: 1800f71f313d917366f95485fa960eed04b40598@1123 33146b6e-df29-0410-a1ca-39be37fb9416

--- src/DbLinq/Test/Providers/ReadTest_Complex.cs
+++ src/DbLinq/Test/Providers/ReadTest_Complex.cs
@@ -107,9 +107,6 @@
             Assert.AreEqual(productCount, 1, "Expected one pen, got count=" + productCount);
         }

-#if !DEBUG && (SQLITE || (MSSQL && !MONO_STRICT))
-        [Explicit]
-#endif
         [Test]
         public void D2_SelectPensByLocalPropertyAndConstant()
         {
@@ -193,9 +190,6 @@

 #endif

-#if !DEBUG && (MSSQL && !MONO_STRICT)
-        [Explicit]
-#endif
         [Test]
         public void F7_ExplicitJoin()
         {
@@ -474,9 +468,6 @@
             var list = q.ToList();
         }

-#if !DEBUG && (MSSQL && !MONO_STRICT)
-        [Explicit]
-#endif
         [Test(Description = "provide a list of customers and employees who live in London.")]
         public void O3_OperatorUnion()
         {


fixed compliation flag to prevent debug logging in release mode

--- src/DbTransmogrifier/Logging/LogConfigurer.cs
+++ src/DbTransmogrifier/Logging/LogConfigurer.cs
@@ -6,7 +6,7 @@
     {
         public static void Configure()
         {
-#if RELEASE
+#if !DEBUG
             LoggerFactory.RegisterBeforeLogInterceptor(
                 (type, logLevel, message) => (logLevel != LogLevel.Debug));
 #endif


DisplayMember and ValueMember made strictly obsolete.

--- src/DotVVM.Framework/Controls/SelectorBase.cs
+++ src/DotVVM.Framework/Controls/SelectorBase.cs
@@ -34,26 +34,26 @@
         /// <summary>
         /// Gets or sets the name of property in the DataSource collection that will be displayed in the control.
         /// </summary>
-        [Obsolete("Use ItemTextBinding property instead")]
+        [Obsolete("Use ItemTextBinding property instead", true)]
         public string DisplayMember
         {
             get { return (string)GetValue(DisplayMemberProperty); }
             set { SetValue(DisplayMemberProperty, value); }
         }
-        [Obsolete("Use ItemTextBinding property instead")]
+        [Obsolete("Use ItemTextBinding property instead", true)]
         public static readonly DotvvmProperty DisplayMemberProperty =
             DotvvmProperty.Register<string, SelectorBase>(t => t.DisplayMember, "");

         /// <summary>
         /// Gets or sets the name of property in the DataSource collection that will be passed to the SelectedValue property when the item is selected.
         /// </summary>
-        [Obsolete("Use ItemValueBinding property instead")]
+        [Obsolete("Use ItemValueBinding property instead", true)]
         public string ValueMember
         {
             get { return (string)GetValue(ValueMemberProperty); }
             set { SetValue(ValueMemberProperty, value); }
         }
-        [Obsolete("Use ItemValueBinding property instead")]
+        [Obsolete("Use ItemValueBinding property instead", true)]
         public static readonly DotvvmProperty ValueMemberProperty =
             DotvvmProperty.Register<string, SelectorBase>(t => t.ValueMember, "");

@@ -122,15 +122,20 @@
                     yield return new ControlUsageError("Return type of ItemValueBinding has to be a primitive type!", valueBinding.DothtmlNode);
                 }
             }
+        }

+        [ControlUsageValidator]
+        [Obsolete("This must be obsolete to compile...")]
+        public static IEnumerable<ControlUsageError> ValidateObsoleteProperties(ResolvedControl control)
+        {
             // validate usage of obsolete properties
             if (control.Properties.GetValueOrDefault(DisplayMemberProperty) is ResolvedPropertySetter displayMember)
             {
-                yield return new ControlUsageError("Property DisplayMemberProperty is obsolite. Please use ItemTextBinding instead.", displayMember.DothtmlNode);
+                yield return new ControlUsageError("Property DisplayMemberProperty is obsolete. Please use ItemTextBinding instead.", displayMember.DothtmlNode);
             }
             if (control.Properties.GetValueOrDefault(ValueMemberProperty) is ResolvedPropertySetter valueMember)
             {
-                yield return new ControlUsageError("Property DisplayMemberProperty is obsolite. Please use ItemTextBinding instead.", valueMember.DothtmlNode);
+                yield return new ControlUsageError("Property DisplayMemberProperty is obsolete. Please use ItemValueBinding instead.", valueMember.DothtmlNode);
             }
         }
     }


Add Koan attribute to koan methods in AboutControllers.

--- Koans/AboutControllers.cs
+++ Koans/AboutControllers.cs
@@ -71,6 +71,7 @@

     public static partial class AboutControllers
     {
+        [Koan]
         public static void CreateAnEchoController()
         {
             using (var config = new HttpConfiguration())
@@ -105,6 +106,7 @@

     public static partial class AboutControllers
     {
+        [Koan]
         public static void AreYouSureYouMadeAnEchoController()
         {
             using (var config = new HttpConfiguration())


Fix ListBoxRow text not updating color. Also changed code to get color from skin

--- GwenCS/Gwen/Control/ListBoxRow.cs
+++ GwenCS/Gwen/Control/ListBoxRow.cs
@@ -30,12 +30,12 @@
             get { return m_Selected; }
             set
             {
+                Skin.Renderer.InvalidateCachedText(Text);
                 m_Selected = value;
-                // TODO: Get these values from the skin.
                 if (value)
-                    SetTextColor(Color.White);
+                    SetTextColor(Skin.Colors.Label.Bright);
                 else
-                    SetTextColor(Color.Black);
+                    SetTextColor(Skin.Colors.Label.Default);
             }
         }


Deprecated ColumnResourcesImpl

Deprecated ColumnResourcesImpl

--- main/Smartsheet/Api/Internal/ColumnResourcesImpl.cs
+++ main/Smartsheet/Api/Internal/ColumnResourcesImpl.cs
@@ -16,25 +16,18 @@
 //    limitations under the License.
 //    %[license]

+using Smartsheet.Api.Models;
+using System;
+using System.ComponentModel;
 namespace Smartsheet.Api.Internal
 {
-
-
-
-	using HttpEntity = Api.Internal.Http.HttpEntity;
-	using HttpMethod = Api.Internal.Http.HttpMethod;
-	using HttpRequest = Api.Internal.Http.HttpRequest;
-	using HttpResponse = Api.Internal.Http.HttpResponse;
-	using Utils = Api.Internal.Utility.Utility;
-	using Column = Api.Models.Column;
-	using System.Net;
-	using System;
-
 	/// <summary>
 	/// This is the implementation of the ColumnResources.
 	///
 	/// Thread Safety: This class is thread safe because it is immutable and its base class is thread safe.
 	/// </summary>
+	[Obsolete("Deprecated", true)]
+	[EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 	public class ColumnResourcesImpl : AbstractResources, ColumnResources
 	{

@@ -45,77 +38,24 @@
 		///   IllegalArgumentException : if any argument is null
 		/// </summary>
 		/// <param name="smartsheet"> the Smartsheet </param>
+		[Obsolete("Deprecated", true)]
+		[EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 		public ColumnResourcesImpl(SmartsheetImpl smartsheet) : base(smartsheet)
 		{
 		}

-		/// <summary>
-		/// Update a column.
-		///
-		/// It mirrors To the following Smartsheet REST API method: PUT /column/{Id}
-		///
-		/// Exceptions:
-		///   IllegalArgumentException : if any argument is null
-		///   InvalidRequestException : if there is any problem with the REST API request
-		///   AuthorizationException : if there is any problem with the REST API authorization(access token)
-		///   ResourceNotFoundException : if the resource can not be found
-		///   ServiceUnavailableException : if the REST API service is not available (possibly due To rate limiting)
-		///   SmartsheetRestException : if there is any other REST API related error occurred during the operation
-		///   SmartsheetException : if there is any other error occurred during the operation
-		/// </summary>
-		/// <param name="column"> the column To update limited To the following attributes: Index (column's new Index in the sheet),
-		/// Title, SheetId, Type, Options (optional), Symbol (optional), SystemColumnType (optional),
-		/// AutoNumberFormat (optional) </param>
-		/// <returns> the updated sheet (note that if there is no such resource, this method will throw
-		/// ResourceNotFoundException rather than returning null). </returns>
-		/// <exception cref="SmartsheetException"> the Smartsheet exception </exception>
+		[Obsolete("Deprecated", true)]
+		[EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 		public virtual Column UpdateColumn(Column column)
 		{
-			Utils.ThrowIfNull(column);
-
-			return this.UpdateResource("column/" + column.Id, typeof(Column), column);
+			throw new NotSupportedException();
 		}

-		/// <summary>
-		/// Delete a column.
-		///
-		/// It mirrors To the following Smartsheet REST API method: DELETE /column/{Id}
-		///
-		/// Exceptions:
-		///   InvalidRequestException : if there is any problem with the REST API request
-		///   AuthorizationException : if there is any problem with the REST API authorization(access token)
-		///   ResourceNotFoundException : if the resource can not be found
-		///   ServiceUnavailableException : if the REST API service is not available (possibly due To rate limiting)
-		///   SmartsheetRestException : if there is any other REST API related error occurred during the operation
-		///   SmartsheetException : if there is any other error occurred during the operation
-		/// </summary>
-		/// <param name="id"> the ID of the column </param>
-		/// <param name="sheetId"> the ID of the sheet </param>
-		/// <exception cref="SmartsheetException"> the Smartsheet exception </exception>
+		[Obsolete("Deprecated", true)]
+		[EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)]
 		public virtual void DeleteColumn(long id, long sheetId)
 		{
-			HttpRequest request = null;
-				request = CreateHttpRequest(new Uri(Smartsheet.BaseURI, "column/"+id), HttpMethod.DELETE);
-
-			Column column = new Column();
-			column.SheetId = sheetId;
-
-				request.Entity = serializeToEntity<Column>(column);
-
-			HttpResponse response = Smartsheet.HttpClient.Request(request);
-
-			switch (response.StatusCode)
-			{
-				case HttpStatusCode.OK:
-					this.Smartsheet.JsonSerializer.deserializeResult<object>(response.Entity.GetContent());
-					break;
-				default:
-					HandleError(response);
-				break;
-			}
-
-			this.Smartsheet.HttpClient.ReleaseConnection();
-
+			throw new NotSupportedException();
 		}
 	}


Fix input issue with Vive controllers.

Fix input issue with Vive controllers.

--- HoneySelectVR/HoneyInterpreter.cs
+++ HoneySelectVR/HoneyInterpreter.cs
@@ -17,7 +17,6 @@
         private FieldInfo _MaleField = typeof(HScene).GetField("chaMale", BindingFlags.NonPublic | BindingFlags.Instance);
         private HoneyActor _Female;
         private HoneyActor _Male;
-

         protected override void OnLevel(int level)
         {
@@ -51,6 +50,25 @@
             base.OnUpdate();
         }

+        bool _ExitSceneDetected = false;
+        /// <summary>
+        /// Workaround because ExitScene sets the timeScale to zero, which causes a number of issues with the input.
+        /// </summary>
+        protected override void OnLateUpdate()
+        {
+            base.OnLateUpdate();
+
+            bool exitScene = Singleton<Scene>.Instance.AddSceneName == SceneNames.Exit;
+            if (exitScene != _ExitSceneDetected)
+            {
+                if (exitScene)
+                {
+                    Time.timeScale = 1.0f;
+                }
+                _ExitSceneDetected = exitScene;
+            }
+        }
+
         public override IEnumerable<IActor> Actors
         {
             get


Fix retry condition

Fix retry condition

--- Libraries/Http/Monitor.cs
+++ Libraries/Http/Monitor.cs
@@ -18,6 +18,7 @@
 using System;
 using System.Collections.Generic;
 using System.Threading.Tasks;
+using System.Net;
 using System.Net.Http;
 using Cube.Conversions;
 using Cube.Log;
@@ -295,7 +296,11 @@
         /* ----------------------------------------------------------------- */
         protected virtual void Publish(TValue value)
         {
-            foreach (var action in Subscriptions) action(value);
+            foreach (var action in Subscriptions)
+            {
+                try { action(value); }
+                catch (Exception err) { this.LogWarn(err.ToString()); }
+            }
         }

         #region IDisposable
@@ -400,7 +405,6 @@
                 catch (Exception err)
                 {
                     Fail(err.ToString());
-                    if (!(err is TaskCanceledException) && !(err is HttpRequestException)) break;
                     await Task.Delay(RetryInterval);
                 }
             }


correct reference

correct reference

--- mikeandwan.us/Views/Tools/NetworkingFileSize.cshtml
+++ mikeandwan.us/Views/Tools/NetworkingFileSize.cshtml
@@ -8,9 +8,9 @@
 }

 @section scripts_footer {
-    <script type="text/javascript" src="/js/bandwidth/inline.js"></script>
-    <script type="text/javascript" src="/js/bandwidth/polyfills.bundle.js"></script>
-    <script type="text/javascript" src="/js/bandwidth/main.bundle.js"></script>
+    <script type="text/javascript" src="/js/filesize/inline.js"></script>
+    <script type="text/javascript" src="/js/filesize/polyfills.bundle.js"></script>
+    <script type="text/javascript" src="/js/filesize/main.bundle.js"></script>
 }

 @section header {


update Enumerable

update Enumerable

--- my_aspnetmvc_learning/Controllers/TaskController.cs
+++ my_aspnetmvc_learning/Controllers/TaskController.cs
@@ -1,4 +1,5 @@
-using NLog;
+using System.Globalization;
+using NLog;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
@@ -95,13 +96,13 @@
             long total = 0;
             // Use type parameter to make subtotal a long, not an int
             Parallel.For<long>(0, nums.Length, () => 0, (j, loop, subtotal) =>
-            {
-                subtotal += nums[j];
-                return subtotal;
-            },
-                (x) => Interlocked.Add(ref total, x)
-                );
-            return Content(total.ToString());
+                {
+                    subtotal += nums[j];
+                    return subtotal;
+                },
+                x => Interlocked.Add(ref total, x)
+            );
+            return Content(total.ToString(CultureInfo.InvariantCulture));
         }
     }
 }


open now opens dirs only, traversal optimized

--- MainWindow.cs
+++ MainWindow.cs
@@ -121,17 +121,17 @@
 	protected void openDoc (object sender, EventArgs e)
 	{
 		FileChooserDialog d = new FileChooserDialog (
-								  "OPEN STUFF", this, FileChooserAction.Open,
-			                      "OPEN!", ResponseType.Accept,
-			                      "NOPE", ResponseType.Cancel
-		                      );
+			"OPEN STUFF", this, FileChooserAction.SelectFolder,
+			"OPEN!", ResponseType.Accept,
+			"NOPE", ResponseType.Cancel
+		);
 		if ((ResponseType)d.Run () == ResponseType.Accept)
-			newTab (System.IO.Path.GetFileName (d.Filename),
-				System.IO.File.ReadAllText (d.Filename));
+			//newTab (System.IO.Path.GetFileName (d.Filename),
+			//	System.IO.File.ReadAllText (d.Filename));
 		//((TextView)notebook.Children [notebook.Page]).Buffer.Text =
 		try {
 			new System.Threading.Thread (threadAdapter)
-				.Start ( System.IO.Path.GetDirectoryName(
+				.Start ( /*System.IO.Path.GetDirectoryName*/ (
 					System.IO.Path.GetFullPath (d.Filename)));
 		} catch(Exception x) {
 			Console.WriteLine (x.Message);
@@ -229,7 +229,8 @@
 			else
 				p = t.AppendValues(parent, new string [] { System.IO.Path.GetFileName(root), System.IO.Path.GetFullPath(root), } );
 			foreach (string d in System.IO.Directory.GetDirectories(root)) {
-				this.populateTree (t,d,p);
+				if (parent.Equals(TreeIter.Zero))
+					this.populateTree (t,d,p);
 				continue;
 			}
 			foreach (string f in System.IO.Directory.GetFiles(root,"*")) {
@@ -247,9 +248,12 @@
 		TreeIter i;
 		((TreeStore)tree.Model).GetIter (out i, args.Path);
 		if (System.IO.Directory.Exists ((string)((TreeStore)tree.Model).GetValue (i, 1)))
-			return;
-		newTab ((string)((TreeStore)tree.Model).GetValue (i, 0),
-			System.IO.File.ReadAllText ((string)((TreeStore)tree.Model).GetValue (i, 1)));
+			foreach (string d in System.IO.Directory.GetDirectories((string)((TreeStore)tree.Model).GetValue (i, 1)))
+				populateTree ((TreeStore)tree.Model, System.IO.Path.GetFullPath (d), i);
+		else
+			newTab ((string)((TreeStore)tree.Model).GetValue (i, 0),
+				System.IO.File.ReadAllText ((string)(
+					(TreeStore)tree.Model).GetValue (i, 1)));
 		return;
 	}
 }


Load the .mmc if possible, speeding up the loading / "patching" process

--- MonoMod/JIT/MonoModJIT.cs
+++ MonoMod/JIT/MonoModJIT.cs
@@ -46,6 +46,13 @@
             }

             CheckChecksum();
+
+            if (IsPatched) {
+                OriginalModule = null;
+                Module = null;
+                IsParsed = true;
+                PatchedAssembly = Assembly.LoadFrom(Out.FullName);
+            }
         }

         public void CheckChecksum() {
@@ -153,7 +160,7 @@

         public override void AutoPatch(bool read = true, bool write = true) {
             //Reading outside of AutoPatch disables modding. Ironically modding twice can kill MonoModJIT
-            if (!IsPatched) {
+            if (!IsPatched && !IsParsed) {
                 base.AutoPatch(false, write);
                 IsPatched = true;
             }


Work on recovery.

Work on recovery.

--- N2.Visualizer/Recovery.cs
+++ N2.Visualizer/Recovery.cs
@@ -47,6 +47,7 @@
     public void Strategy(int startTextPos, Parser parser)
     {
       Reset();
+      var maxFailPos = parser.MaxFailPos;
       var timer = System.Diagnostics.Stopwatch.StartNew();
       _recoveryStack     = parser.RecoveryStack.NToList() as RecoveryStack;
       var curTextPos    = startTextPos;
@@ -72,7 +73,10 @@
         parser.MaxFailPos = _bestResult.EndPos; // HACK!!!
       }
       else
+      {
         parser.ParsingMode = ParsingMode.Recovery;
+        parser.MaxFailPos = maxFailPos;
+      }

       Reset();
     }


Fix Recovery.

Fix Recovery.

--- N2.Visualizer/Recovery.cs
+++ N2.Visualizer/Recovery.cs
@@ -123,12 +123,13 @@

       for (var stack = _bestResult.Stack.Tail as RecoveryStack; stack != null; stack = stack.Tail as RecoveryStack)
       {
-        if (stack.Head.IsRootAst)
-        {
-          var state = parser.ast[stack.Head.AstPtr + 2];
-          Debug.Assert(state >= 0);
-          parser.ast[stack.Head.AstPtr + 2] = ~state;
-        }
+        if (stack.Head.RuleParser is ExtensibleRuleParser)
+          continue;
+        var state = stack.Head.FailState;
+        Debug.Assert(state >= 0);
+        while (!stack.Head.IsRootAst)
+          stack = stack.Tail as RecoveryStack;
+        parser.ast[stack.Head.AstPtr + 2] = ~state;
       }
     }


Fixed useless using

Fixed useless using

--- NBi.genbiL/Parser/Case.cs
+++ NBi.genbiL/Parser/Case.cs
@@ -1,5 +1,4 @@
 using System;
-using System.Linq;
 using System.Linq;
 using NBi.GenbiL.Action;
 using NBi.GenbiL.Action.Case;