diff --git a/Source/Core/ZDoom/ZScriptParser.cs b/Source/Core/ZDoom/ZScriptParser.cs index 0f8d2689..e2d119cd 100755 --- a/Source/Core/ZDoom/ZScriptParser.cs +++ b/Source/Core/ZDoom/ZScriptParser.cs @@ -513,14 +513,14 @@ namespace CodeImp.DoomBuilder.ZDoom return true; } - internal List ParseBlock(bool allowsingle) + internal List ParseBlock(bool allowsingle, ZScriptToken skipRead = null) { List ol = new List(); // int nestingLevel = 0; // long cpos = datastream.Position; - ZScriptToken token = tokenizer.ReadToken(); + ZScriptToken token = skipRead ?? tokenizer.ReadToken(); if (token == null) { ReportError("Expected a code block, got "); @@ -630,7 +630,26 @@ namespace CodeImp.DoomBuilder.ZDoom return false; } tokenizer.SkipWhitespace(); - if (ParseBlock(false) == null) return false; // anything between { and } + token = tokenizer.ReadToken(); + if (token == null) + { + ReportError("Expected a code block or integer type for enum, got "); + return false; + } + else if (token.Type == ZScriptTokenType.Colon) + { + tokenizer.SkipWhitespace(); + token = tokenizer.ExpectToken(ZScriptTokenType.Identifier); + if (token == null || !token.IsValid) + { + ReportError("Expected an integer type, got " + ((Object)token ?? "").ToString()); + return false; + } + + tokenizer.SkipWhitespace(); + token = tokenizer.ReadToken(); + } + if (ParseBlock(false, token) == null) return false; // anything between { and } //LogWarning(string.Format("Parsed enum {0}", token.Value)); return true; }