Better type mapping

This commit is contained in:
nub31
2025-10-17 13:32:00 +02:00
parent 6b7cd0132d
commit 1330037de3
7 changed files with 198 additions and 153 deletions

View File

@@ -807,9 +807,18 @@ public sealed class Parser
if (TryExpectSymbol(Symbol.OpenBracket))
{
ExpectSymbol(Symbol.CloseBracket);
var baseType = ParseType();
return new ArrayTypeSyntax(GetTokens(startIndex), baseType);
if (TryExpectIntLiteral(out var intLiteral))
{
ExpectSymbol(Symbol.CloseBracket);
var baseType = ParseType();
return new ConstArrayTypeSyntax(GetTokens(startIndex), baseType, int.Parse(intLiteral.Value));
}
else
{
ExpectSymbol(Symbol.CloseBracket);
var baseType = ParseType();
return new ArrayTypeSyntax(GetTokens(startIndex), baseType);
}
}
throw new ParseException(Diagnostic
@@ -930,6 +939,19 @@ public sealed class Parser
return identifier;
}
private bool TryExpectIntLiteral([NotNullWhen(true)] out IntLiteralToken? stringLiteral)
{
if (CurrentToken is IntLiteralToken token)
{
stringLiteral = token;
Next();
return true;
}
stringLiteral = null;
return false;
}
private FloatLiteralToken ExpectFloatLiteral()
{
var token = ExpectToken();