pointers kinda works

This commit is contained in:
nub31
2025-05-17 18:22:23 +02:00
parent 75308e54dc
commit 31dc31b8f5
7 changed files with 240 additions and 16 deletions

View File

@@ -359,6 +359,26 @@ public class Parser
return new StructInitializerNode(type, initializers);
}
case Symbol.Caret:
{
var expression = ParsePrimaryExpression();
return new UnaryExpressionNode(UnaryExpressionOperator.Dereference, expression);
}
case Symbol.Ampersand:
{
var expression = ParsePrimaryExpression();
return new UnaryExpressionNode(UnaryExpressionOperator.AddressOf, expression);
}
case Symbol.Minus:
{
var expression = ParsePrimaryExpression();
return new UnaryExpressionNode(UnaryExpressionOperator.Negate, expression);
}
case Symbol.Bang:
{
var expression = ParsePrimaryExpression();
return new UnaryExpressionNode(UnaryExpressionOperator.Invert, expression);
}
default:
{
throw new Exception($"Unknown symbol: {symbolToken.Symbol}");

View File

@@ -0,0 +1,15 @@
namespace Nub.Lang.Frontend.Parsing;
public class UnaryExpressionNode(UnaryExpressionOperator @operator, ExpressionNode operand) : ExpressionNode
{
public UnaryExpressionOperator Operator { get; } = @operator;
public ExpressionNode Operand { get; } = operand;
}
public enum UnaryExpressionOperator
{
AddressOf,
Dereference,
Negate,
Invert
}