ellie_parser 0.8.3

Parser for ellie language
Documentation
use ellie_core::defs;
use ellie_tokenizer::syntax::items::ret::Ret;

use crate::processors::types::{TypeParserProcessor, TypeParserProcessorOptions};

impl super::ItemParserProcessor for Ret {
    fn process(&self, options: &mut super::ItemParserProcessorOptions) -> bool {
        match self.value.current.process(
            TypeParserProcessorOptions::new(options.parser, options.page_hash)
                .variable_pos(self.pos)
                .build(),
        ) {
            Ok(value) => {
                let unprocessed_page = options.parser.pages.nth_mut(options.page_idx).unwrap();
                unprocessed_page.unreachable = true;
                unprocessed_page.unreachable_range.range_start =
                    defs::CursorPosition(self.pos.range_end.0 + 1, 0);
                let page = options
                    .parser
                    .processed_pages
                    .nth_mut(options.processed_page_idx)
                    .unwrap();
                page.items
                    .push(ellie_core::definite::items::Collecting::Ret(
                        ellie_core::definite::items::ret::Ret {
                            value,
                            keyword_pos: self.keyword_pos,
                            value_position: self.value_position,
                            pos: self.pos,
                        },
                    ));
                true
            }
            Err(type_error) => {
                options.parser.informations.extend(&type_error);
                false
            }
        }
    }
}