use super::Expression;
use crate::Span;
#[derive(Clone, Debug)]
pub enum ExprUnary {
Minus(ExprUnaryData),
Plus(ExprUnaryData),
BitwiseNot(ExprUnaryData),
Length(ExprUnaryData),
LogicalNot(ExprUnaryData),
}
impl ExprUnary {
pub fn span(&self) -> Span {
match self {
Self::Minus(value) => value.span(),
Self::Plus(value) => value.span(),
Self::BitwiseNot(value) => value.span(),
Self::Length(value) => value.span(),
Self::LogicalNot(value) => value.span(),
}
}
pub fn span_op(&self) -> Span {
match self {
Self::Minus(value) => value.span_op(),
Self::Plus(value) => value.span_op(),
Self::BitwiseNot(value) => value.span_op(),
Self::Length(value) => value.span_op(),
Self::LogicalNot(value) => value.span_op(),
}
}
}
#[derive(Clone, Debug)]
pub struct ExprUnaryData {
pub value: Box<Expression>,
pub span: Span,
pub span_op: Span,
}
impl ExprUnaryData {
pub fn new(value: Expression, span: Span, span_op: Span) -> Self {
Self {
value: Box::new(value),
span,
span_op,
}
}
pub fn span(&self) -> Span {
self.span
}
pub fn span_op(&self) -> Span {
self.span_op
}
}