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