cast syntax change
This commit is contained in:
@@ -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^))
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user