Add edition to parser struct

This commit is contained in:
Johann Hemmann 2024-01-30 16:05:28 +01:00 committed by Lukas Wirth
parent f3c7bd0c90
commit 392538c830
2 changed files with 20 additions and 5 deletions

View File

@ -45,6 +45,7 @@ pub use crate::{
input::Input, input::Input,
lexed_str::LexedStr, lexed_str::LexedStr,
output::{Output, Step}, output::{Output, Step},
parser::Edition,
shortcuts::StrStep, shortcuts::StrStep,
syntax_kind::SyntaxKind, syntax_kind::SyntaxKind,
}; };
@ -98,7 +99,7 @@ impl TopEntryPoint {
TopEntryPoint::MetaItem => grammar::entry::top::meta_item, TopEntryPoint::MetaItem => grammar::entry::top::meta_item,
TopEntryPoint::MacroEagerInput => grammar::entry::top::eager_macro_input, TopEntryPoint::MacroEagerInput => grammar::entry::top::eager_macro_input,
}; };
let mut p = parser::Parser::new(input); let mut p = parser::Parser::new(input, Edition::Edition2021);
entry_point(&mut p); entry_point(&mut p);
let events = p.finish(); let events = p.finish();
let res = event::process(events); let res = event::process(events);
@ -163,7 +164,7 @@ impl PrefixEntryPoint {
PrefixEntryPoint::Item => grammar::entry::prefix::item, PrefixEntryPoint::Item => grammar::entry::prefix::item,
PrefixEntryPoint::MetaItem => grammar::entry::prefix::meta_item, PrefixEntryPoint::MetaItem => grammar::entry::prefix::meta_item,
}; };
let mut p = parser::Parser::new(input); let mut p = parser::Parser::new(input, Edition::Edition2021);
entry_point(&mut p); entry_point(&mut p);
let events = p.finish(); let events = p.finish();
event::process(events) event::process(events)
@ -189,7 +190,7 @@ impl Reparser {
/// sequence. /// sequence.
pub fn parse(self, tokens: &Input) -> Output { pub fn parse(self, tokens: &Input) -> Output {
let Reparser(r) = self; let Reparser(r) = self;
let mut p = parser::Parser::new(tokens); let mut p = parser::Parser::new(tokens, Edition::Edition2021);
r(&mut p); r(&mut p);
let events = p.finish(); let events = p.finish();
event::process(events) event::process(events)

View File

@ -26,13 +26,27 @@ pub(crate) struct Parser<'t> {
pos: usize, pos: usize,
events: Vec<Event>, events: Vec<Event>,
steps: Cell<u32>, steps: Cell<u32>,
edition: Edition,
}
#[non_exhaustive]
pub enum Edition {
Edition2015,
Edition2018,
Edition2021,
} }
static PARSER_STEP_LIMIT: Limit = Limit::new(15_000_000); static PARSER_STEP_LIMIT: Limit = Limit::new(15_000_000);
impl<'t> Parser<'t> { impl<'t> Parser<'t> {
pub(super) fn new(inp: &'t Input) -> Parser<'t> { pub(super) fn new(inp: &'t Input, edition: Edition) -> Parser<'t> {
Parser { inp, pos: 0, events: Vec::new(), steps: Cell::new(0) } Parser {
inp,
pos: 0,
events: Vec::new(),
steps: Cell::new(0),
edition,
}
} }
pub(crate) fn finish(self) -> Vec<Event> { pub(crate) fn finish(self) -> Vec<Event> {