valkyrie-parser 0.2.5

The hand write parser of valkyrie language
Documentation
use super::*;

impl ThisParser for CallNode<ApplyCallNode> {
    #[track_caller]
    fn parse(_: ParseState) -> ParseResult<Self> {
        unreachable!()
    }

    fn lispify(&self) -> Lisp {
        let mut lisp = Lisp::new(3);
        lisp += Lisp::keyword("call/argument");
        lisp += self.base.lispify();
        lisp += self.rest.lispify();
        lisp
    }
}

impl ThisParser for ApplyCallNode {
    fn parse(input: ParseState) -> ParseResult<Self> {
        let pat = BracketPattern::new("(", ")");
        let (state, terms) = pat.consume(input, ignore, ApplyCallItem::parse)?;
        state.finish(ApplyCallNode { arguments: terms.body, span: get_span(input, state) })
    }
}

impl ThisParser for ApplyCallItem {
    fn parse(input: ParseState) -> ParseResult<Self> {
        CallTermNode::parse(input).map_inner(|term| ApplyCallItem { term })
    }
}