magc 0.8.0

The Mag Language Compiler
Documentation
use crate::parser::{Parser, ParserResult, PrefixParselet, PREC_UNARY};
use crate::types::{Expression, ExpressionKind, Prefix, Token};

/// Parse a token and the following expression into a prefix expression.
pub struct PrefixOperatorParselet;

impl PrefixParselet for PrefixOperatorParselet {
    fn parse(&self, parser: &mut Parser, token: Token) -> ParserResult {
        let operator = token.clone();
        // TODO: temporary unwrap until we have proper error handling here
        let expr = parser.parse_expression(PREC_UNARY)?;

        Ok(Expression {
            kind: ExpressionKind::Prefix(Prefix {
                operator,
                operand: Box::new(expr),
            }),
            start_pos: 0,
            end_pos: 0,
        })
    }
}