pointers kinda works
This commit is contained in:
@@ -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}");
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user