mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-19 18:41:26 +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
|
// todo: parse stuff
|
||||||
//
|
//
|
||||||
string[] control_keywords = new string[] { "goto", "loop", "wait", "fail", "stop" };
|
string[] control_keywords = new string[] { "goto", "loop", "wait", "fail", "stop" };
|
||||||
|
string[] data_types = new string[] { "double", "int", "uint" };
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
|
@ -151,20 +152,54 @@ namespace CodeImp.DoomBuilder.ZDoom
|
||||||
token = tokenizer.ExpectToken(ZScriptTokenType.Identifier);
|
token = tokenizer.ExpectToken(ZScriptTokenType.Identifier);
|
||||||
if (token != null && token.IsValid)
|
if (token != null && token.IsValid)
|
||||||
{
|
{
|
||||||
duration = -1;
|
// Known data type? Then it's hopefully the .min or .max value (like int.min or int.max)
|
||||||
tokenizer.SkipWhitespace();
|
if (data_types.Contains(token.Value))
|
||||||
token = tokenizer.ExpectToken(ZScriptTokenType.OpenParen);
|
{
|
||||||
if (token != null && token.IsValid)
|
token = tokenizer.ExpectToken(ZScriptTokenType.Dot);
|
||||||
{
|
if(token == null || !token.IsValid)
|
||||||
List<ZScriptToken> tokens = parser.ParseExpression(true);
|
{
|
||||||
tokenizer.SkipWhitespace();
|
parser.ReportError("Expected ., got " + ((Object)token ?? "<null>").ToString());
|
||||||
token = tokenizer.ExpectToken(ZScriptTokenType.CloseParen);
|
return;
|
||||||
if (token == null || !token.IsValid)
|
}
|
||||||
{
|
|
||||||
parser.ReportError("Expected ), got " + ((Object)token ?? "<null>").ToString());
|
token = tokenizer.ExpectToken(ZScriptTokenType.Identifier);
|
||||||
return;
|
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
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue