carlo 0.5.1

A simple interpreted programming language.
Documentation
//! Defines a reassignment parselet.

use super::{
    Expression,
    Parser,
    InfixParselet,
    Token,
    Tokenstream,
};

pub struct ReassignmentParselet {}

impl InfixParselet for ReassignmentParselet {
    fn parse(&self, tokenstream: &mut Tokenstream, parser: &Parser, left: Expression, token: Token, nesting: usize) -> Expression {
        use Expression::*;

        let right = parser.parse_expr(tokenstream, token.precedence() - 1, nesting + 1);

        let left = match left {
            Identifier (i) => i,
            _ => {
                println!("{}", left);
                unreachable!()
            },
        };

        Reassignment {
            left: left.to_owned(),
            right: Box::new(right),
        }
    }
}