diff --git a/Source/Core/ZDoom/ZScriptStateStructure.cs b/Source/Core/ZDoom/ZScriptStateStructure.cs index 5a7a141d..98fdea5e 100755 --- a/Source/Core/ZDoom/ZScriptStateStructure.cs +++ b/Source/Core/ZDoom/ZScriptStateStructure.cs @@ -59,6 +59,7 @@ namespace CodeImp.DoomBuilder.ZDoom // todo: parse stuff // string[] control_keywords = new string[] { "goto", "loop", "wait", "fail", "stop" }; + string[] data_types = new string[] { "double", "int", "uint" }; while (true) { @@ -151,20 +152,54 @@ namespace CodeImp.DoomBuilder.ZDoom token = tokenizer.ExpectToken(ZScriptTokenType.Identifier); if (token != null && token.IsValid) { - duration = -1; - tokenizer.SkipWhitespace(); - token = tokenizer.ExpectToken(ZScriptTokenType.OpenParen); - if (token != null && token.IsValid) - { - List tokens = parser.ParseExpression(true); - tokenizer.SkipWhitespace(); - token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen); - if (token == null || !token.IsValid) - { - parser.ReportError("Expected ), got " + ((Object)token ?? "").ToString()); - return; - } - } + // Known data type? Then it's hopefully the .min or .max value (like int.min or int.max) + if (data_types.Contains(token.Value)) + { + token = tokenizer.ExpectToken(ZScriptTokenType.Dot); + if(token == null || !token.IsValid) + { + parser.ReportError("Expected ., got " + ((Object)token ?? "").ToString()); + return; + } + + token = tokenizer.ExpectToken(ZScriptTokenType.Identifier); + if (token == null || !token.IsValid) + { + parser.ReportError("Expected an identifier, got " + ((Object)token ?? "").ToString()); + return; + } + + if (token.Value == "min") + { + duration = int.MinValue; + } + else if (token.Value == "max") + { + duration = int.MaxValue; + } + else + { + parser.ReportError("Expected min or max, got " + ((Object)token ?? "").ToString()); + return; + } + } + else // No known data type + { + duration = -1; + tokenizer.SkipWhitespace(); + token = tokenizer.ExpectToken(ZScriptTokenType.OpenParen); + if (token != null && token.IsValid) + { + List tokens = parser.ParseExpression(true); + tokenizer.SkipWhitespace(); + token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen); + if (token == null || !token.IsValid) + { + parser.ReportError("Expected ), got " + ((Object)token ?? "").ToString()); + return; + } + } + } } else {