frg 0.1.1

Compiled programming language with frogs!
Documentation
use super::*;

pub fn parse(token_iter: &mut Peekable<Iter<Token>>) -> Statement {
    let var_type = parse_types::parse(token_iter);
    let name = match token_iter.next() {
        Some(Token::Literal(lexer::Literal::Identifier(n))) => n,
        _ => panic!("identifier after type"),
    };
    expect_symbol(token_iter, lexer::Symbol::Equals);
    if token_iter.peek() == Some(&&Token::Symbol(lexer::Symbol::LeftParen))
        && let Some((params, new_token_iter)) = parse_function::parse_params(token_iter.clone())
    {
        {
            *token_iter = new_token_iter;
            Statement::FunctionDeclaration {
                return_type: var_type,
                name: name.clone(),
                params,
                body: parse_function::parse_body(token_iter),
            }
        }
    } else {
        let value = parse_expression(token_iter);
        Statement::VariableDeclaration {
            var_type,
            name: name.clone(),
            value,
        }
    }
}