pawarser: make raw_tokens vec owned in input

This commit is contained in:
Schrottkatze 2024-10-21 15:11:08 +02:00
parent becc4b4041
commit 91f766c18e
No known key found for this signature in database
3 changed files with 12 additions and 13 deletions

View file

@ -4,7 +4,7 @@ use crate::{syntax_error::SyntaxError, syntax_kind::SyntaxKind};
use self::object::object; use self::object::object;
type Parser<'src, 'toks> = pawarser::Parser<'src, 'toks, SyntaxKind, SyntaxError>; type Parser<'src> = pawarser::Parser<'src, SyntaxKind, SyntaxError>;
type CompletedMarker = pawarser::CompletedMarker<SyntaxKind, SyntaxError>; type CompletedMarker = pawarser::CompletedMarker<SyntaxKind, SyntaxError>;
const BASIC_VALUE_TOKENS: EnumSet<SyntaxKind> = const BASIC_VALUE_TOKENS: EnumSet<SyntaxKind> =

View file

@ -21,8 +21,8 @@ where
const ERROR: Self; const ERROR: Self;
} }
pub struct Parser<'src, 'toks, SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> { pub struct Parser<'src, SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> {
input: Input<'src, 'toks, SyntaxKind>, input: Input<'src, SyntaxKind>,
pos: usize, pos: usize,
events: Vec<Event<SyntaxKind, SyntaxErr>>, events: Vec<Event<SyntaxKind, SyntaxErr>>,
step_limit: u32, step_limit: u32,
@ -30,7 +30,7 @@ pub struct Parser<'src, 'toks, SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError
} }
impl<'src, 'toks, SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError> impl<'src, 'toks, SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError>
Parser<'src, 'toks, SyntaxKind, SyntaxErr> Parser<'src, SyntaxKind, SyntaxErr>
{ {
/// eat all meaningless tokens at the end of the file. /// eat all meaningless tokens at the end of the file.
pub fn eat_succeeding_meaningless(&mut self) { pub fn eat_succeeding_meaningless(&mut self) {
@ -97,17 +97,16 @@ impl<'src, 'toks, SyntaxKind: SyntaxElement, SyntaxErr: SyntaxError>
pub struct ParserBuilder< pub struct ParserBuilder<
'src, 'src,
'toks,
SyntaxKind: SyntaxElement, SyntaxKind: SyntaxElement,
// SyntaxErr: SyntaxError, // SyntaxErr: SyntaxError,
> { > {
raw_toks: &'toks Vec<(SyntaxKind, &'src str)>, raw_toks: Vec<(SyntaxKind, &'src str)>,
meaningless_token_kinds: EnumSet<SyntaxKind>, meaningless_token_kinds: EnumSet<SyntaxKind>,
step_limit: u32, step_limit: u32,
} }
impl<'src, 'toks, SyntaxKind: SyntaxElement> ParserBuilder<'src, 'toks, SyntaxKind> { impl<'src, SyntaxKind: SyntaxElement> ParserBuilder<'src, SyntaxKind> {
pub fn new(raw_toks: &'toks Vec<(SyntaxKind, &'src str)>) -> Self { pub fn new(raw_toks: Vec<(SyntaxKind, &'src str)>) -> Self {
Self { Self {
raw_toks, raw_toks,
meaningless_token_kinds: EnumSet::new(), meaningless_token_kinds: EnumSet::new(),
@ -133,7 +132,7 @@ impl<'src, 'toks, SyntaxKind: SyntaxElement> ParserBuilder<'src, 'toks, SyntaxKi
self self
} }
pub fn build<SyntaxErr: SyntaxError>(self) -> Parser<'src, 'toks, SyntaxKind, SyntaxErr> { pub fn build<SyntaxErr: SyntaxError>(self) -> Parser<'src, SyntaxKind, SyntaxErr> {
let Self { let Self {
raw_toks, raw_toks,
meaningless_token_kinds, meaningless_token_kinds,

View file

@ -2,17 +2,17 @@ use enumset::{EnumSet, EnumSetType};
use super::SyntaxElement; use super::SyntaxElement;
pub struct Input<'src, 'toks, SyntaxKind: SyntaxElement> { pub struct Input<'src, SyntaxKind: SyntaxElement> {
raw: &'toks Vec<(SyntaxKind, &'src str)>, raw: Vec<(SyntaxKind, &'src str)>,
// enumset of meaningless tokens // enumset of meaningless tokens
semantically_meaningless: EnumSet<SyntaxKind>, semantically_meaningless: EnumSet<SyntaxKind>,
// indices of non-meaningless tokens // indices of non-meaningless tokens
meaningful_toks: Vec<usize>, meaningful_toks: Vec<usize>,
} }
impl<'src, 'toks, SyntaxKind: SyntaxElement> Input<'src, 'toks, SyntaxKind> { impl<'src, SyntaxKind: SyntaxElement> Input<'src, SyntaxKind> {
pub fn new( pub fn new(
raw_toks: &'toks Vec<(SyntaxKind, &'src str)>, raw_toks: Vec<(SyntaxKind, &'src str)>,
meaningless: Option<EnumSet<SyntaxKind>>, meaningless: Option<EnumSet<SyntaxKind>>,
) -> Self { ) -> Self {
let mut meaningful_toks = Vec::new(); let mut meaningful_toks = Vec::new();