package de.dhbwstuttgart.target.tree.expression;

import de.dhbwstuttgart.target.tree.type.TargetType;

public sealed interface TargetUnaryOp extends TargetExpression {
    TargetExpression expr();

    record Negate(TargetType type, TargetExpression expr) implements TargetUnaryOp {}
    record Add(TargetType type, TargetExpression expr) implements TargetUnaryOp {}
    record Not(TargetType type, TargetExpression expr) implements TargetUnaryOp {}

    record PreIncrement(TargetType type, TargetExpression expr) implements TargetStatementExpression, TargetUnaryOp {}
    record PostIncrement(TargetType type, TargetExpression expr) implements TargetStatementExpression, TargetUnaryOp {}
    record PreDecrement(TargetType type, TargetExpression expr) implements TargetStatementExpression, TargetUnaryOp {}
    record PostDecrement(TargetType type, TargetExpression expr) implements TargetStatementExpression, TargetUnaryOp {}
}
