Add edition to parser struct
This commit is contained in:
parent
f3c7bd0c90
commit
392538c830
@ -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)
|
||||||
|
@ -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> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user