mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-16 17:11:28 +00:00
ZScript parser: added support for min and max value constants in the states block. Fixes #1019
This commit is contained in:
parent
071818dc2d
commit
456ae573ed
1 changed files with 49 additions and 14 deletions
|
@ -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<ZScriptToken> tokens = parser.ParseExpression(true);
|
||||
tokenizer.SkipWhitespace();
|
||||
token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen);
|
||||
if (token == null || !token.IsValid)
|
||||
{
|
||||
parser.ReportError("Expected ), got " + ((Object)token ?? "<null>").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 ?? "<null>").ToString());
|
||||
return;
|
||||
}
|
||||
|
||||
token = tokenizer.ExpectToken(ZScriptTokenType.Identifier);
|
||||
if (token == null || !token.IsValid)
|
||||
{
|
||||
parser.ReportError("Expected an identifier, got " + ((Object)token ?? "<null>").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 ?? "<null>").ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
else // No known data type
|
||||
{
|
||||
duration = -1;
|
||||
tokenizer.SkipWhitespace();
|
||||
token = tokenizer.ExpectToken(ZScriptTokenType.OpenParen);
|
||||
if (token != null && token.IsValid)
|
||||
{
|
||||
List<ZScriptToken> tokens = parser.ParseExpression(true);
|
||||
tokenizer.SkipWhitespace();
|
||||
token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen);
|
||||
if (token == null || !token.IsValid)
|
||||
{
|
||||
parser.ReportError("Expected ), got " + ((Object)token ?? "<null>").ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue