From 439d9adc69d214a1f8bb8d7e8f650ea62c927aef Mon Sep 17 00:00:00 2001
From: MaxED <j.maxed@gmail.com>
Date: Mon, 28 Sep 2015 19:49:15 +0000
Subject: [PATCH] "Fixed", DECORATE parser: looks like treating missing parent
 class as an error was way too overwhelming to some users, so parsing is no
 longer aborted and a warning is added instead of an error.

---
 Source/Core/ZDoom/ActorStructure.cs | 10 +++-------
 Source/Core/ZDoom/ZDTextParser.cs   | 16 ++++++++++++----
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/Source/Core/ZDoom/ActorStructure.cs b/Source/Core/ZDoom/ActorStructure.cs
index 86e4a97c6..05d8cca17 100644
--- a/Source/Core/ZDoom/ActorStructure.cs
+++ b/Source/Core/ZDoom/ActorStructure.cs
@@ -120,16 +120,12 @@ namespace CodeImp.DoomBuilder.ZDoom
 								parser.ReportError("Expected class name to inherit from");
 								return;
 							}
- 
+
 							// Find the actor to inherit from
 							baseclass = parser.GetArchivedActorByName(inheritclass);
 
-							//mxd. Does it exist?
-							if(baseclass == null)
-							{
-								parser.ReportError("Parent class '" + inheritclass + "' does not exist");
-								return;
-							}
+							//mxd. Does it exist? (We can carry on regardless, so add a warning) 
+							if(baseclass == null) parser.ReportWarning("Parent class '" + inheritclass + "' does not exist");
 							break;
 
 						case "replaces":
diff --git a/Source/Core/ZDoom/ZDTextParser.cs b/Source/Core/ZDoom/ZDTextParser.cs
index a571905ec..2f4c1d2bd 100644
--- a/Source/Core/ZDoom/ZDTextParser.cs
+++ b/Source/Core/ZDoom/ZDTextParser.cs
@@ -468,26 +468,34 @@ namespace CodeImp.DoomBuilder.ZDoom
 			errorsource = sourcename;
 		}
 
+		//mxd. This reports a warning
+		protected internal void ReportWarning(string message)
+		{
+			// Add a warning
+			General.ErrorLogger.Add(ErrorType.Warning, "DECORATE warning in '" + sourcename + "', line " + GetCurrentLineNumber() + ". " + message + ".");
+		}
+
 		//mxd 
 		protected internal int GetCurrentLineNumber() 
 		{
-			long position = Math.Min(prevstreamposition, datastream.Position);
+			long pos = datastream.Position;
+			long finishpos = Math.Min(prevstreamposition, pos);
 			long readpos = 0;
 			int linenumber = 0;
 
 			// Find the line on which we found this error
 			datastream.Seek(0, SeekOrigin.Begin);
 			StreamReader textreader = new StreamReader(datastream, Encoding.ASCII);
-			while (readpos < position) 
+			while(readpos < finishpos) 
 			{
 				string line = textreader.ReadLine();
-				if (line == null) break;
+				if(line == null) break;
 				readpos += line.Length + 2;
 				linenumber++;
 			}
 
 			// Return to original position
-			datastream.Seek(position, SeekOrigin.Begin);
+			datastream.Seek(pos, SeekOrigin.Begin);
 
 			return linenumber;
 		}
-- 
GitLab