cast syntax change

This commit is contained in:
nub31
2025-05-17 22:48:08 +02:00
parent 6c04e39071
commit f362105a11
2 changed files with 20 additions and 19 deletions

View File

@@ -19,5 +19,5 @@ global func main(argc: i64, argv: i64) {
parent = &parent parent = &parent
} }
printf("%s\n", (&test)^.parent^.name^) printf("%s\n", <string>(test.parent^.name^))
} }

View File

@@ -307,9 +307,9 @@ public class Parser
private ExpressionNode ParsePrimaryExpression() private ExpressionNode ParsePrimaryExpression()
{ {
var token = ExpectToken();
ExpressionNode expr; ExpressionNode expr;
var token = ExpectToken();
switch (token) switch (token)
{ {
case LiteralToken literal: case LiteralToken literal:
@@ -349,28 +349,21 @@ public class Parser
{ {
case Symbol.OpenParen: case Symbol.OpenParen:
{ {
// This is ugly
var nextToken = Peek();
if (nextToken is { Value: IdentifierToken or SymbolToken { Symbol: Symbol.Caret } })
{
var startIndex = _index;
var type = ParseType();
if (TryExpectSymbol(Symbol.CloseParen))
{
var expressionToCast = ParseExpression();
expr = new CastNode(type, expressionToCast);
break;
}
_index = startIndex;
}
var expression = ParseExpression(); var expression = ParseExpression();
ExpectSymbol(Symbol.CloseParen); ExpectSymbol(Symbol.CloseParen);
expr = expression; expr = expression;
break; break;
} }
case Symbol.LessThan:
{
var type = ParseType();
ExpectSymbol(Symbol.GreaterThan);
ExpectSymbol(Symbol.OpenParen);
var expressionToCast = ParseExpression();
ExpectSymbol(Symbol.CloseParen);
expr = new CastNode(type, expressionToCast);
break;
}
case Symbol.New: case Symbol.New:
{ {
var type = ParseType(); var type = ParseType();
@@ -438,6 +431,14 @@ public class Parser
continue; continue;
} }
// if (TryExpectSymbol(Symbol.OpenBracket))
// {
// var index = ParseExpression();
// ExpectSymbol(Symbol.CloseBracket);
// expr = new ArrayIndexNode(expr, index);
// continue;
// }
break; break;
} }