fixed bugs related to index check and gc
This commit is contained in:
@@ -191,8 +191,6 @@ public class SaveParserEU4
|
||||
case TokenType.StringOrNumber:
|
||||
_stringBuilderPool.Return(tok.value!);
|
||||
return true;
|
||||
case TokenType.Equals:
|
||||
return true;
|
||||
case TokenType.BracketClose:
|
||||
return false;
|
||||
default:
|
||||
@@ -232,13 +230,26 @@ public class SaveParserEU4
|
||||
private List<object> ParseList()
|
||||
{
|
||||
List<object> list = new();
|
||||
while (true)
|
||||
for (int i = 0; ; i++)
|
||||
{
|
||||
if (!_tokens.MoveNext())
|
||||
throw new Exception("Unexpected end of file");
|
||||
|
||||
ISearchExpression? searchExprNext = null;
|
||||
if (_searchExprCurrent != null
|
||||
&& !_searchExprCurrent.DoesMatch(new SearchArgs(i, string.Empty), out searchExprNext))
|
||||
{
|
||||
if(!SkipValue())
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
var searchExprPrev = _searchExprCurrent;
|
||||
_searchExprCurrent = searchExprNext;
|
||||
object? value = ParseValue();
|
||||
_searchExprCurrent = searchExprPrev;
|
||||
if (value is null)
|
||||
break;
|
||||
|
||||
list.Add(value);
|
||||
}
|
||||
|
||||
@@ -294,7 +305,8 @@ public class SaveParserEU4
|
||||
if (_searchExprCurrent != null
|
||||
&& !_searchExprCurrent.DoesMatch(new SearchArgs(localIndex, keySB), out searchExprNext))
|
||||
{
|
||||
SkipValue();
|
||||
if(!SkipValue())
|
||||
throw new UnexpectedTokenException(_tokens.Current.Value);
|
||||
_stringBuilderPool.Return(keySB);
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user