mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 18:23:49 +00:00
switch to dynamic dispatch for TokenSource
Benchmarks show no difference. This is probably because we are bottlenecked on memory allocations, and we should fix that, but we are not optimizing for performance just yet. changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch token-source # Changes to be committed: # modified: crates/ra_syntax/src/parsing/parser_api.rs # modified: crates/ra_syntax/src/parsing/parser_impl.rs #
This commit is contained in:
parent
0c81b9deee
commit
d2bce118ae
@ -4,7 +4,7 @@ use crate::{
|
||||
SyntaxKind::{self, ERROR},
|
||||
parsing::{
|
||||
token_set::TokenSet,
|
||||
parser_impl::ParserImpl
|
||||
parser_impl::ParserImpl,
|
||||
},
|
||||
};
|
||||
|
||||
@ -17,9 +17,7 @@ use crate::{
|
||||
/// tree, but rather a flat stream of events of the form
|
||||
/// "start expression, consume number literal,
|
||||
/// finish expression". See `Event` docs for more.
|
||||
pub(crate) struct Parser<'t>(
|
||||
pub(super) ParserImpl<crate::parsing::parser_impl::input::ParserInput<'t>>,
|
||||
);
|
||||
pub(crate) struct Parser<'t>(pub(super) ParserImpl<'t>);
|
||||
|
||||
impl<'t> Parser<'t> {
|
||||
/// Returns the kind of the current token.
|
||||
|
@ -54,7 +54,7 @@ pub(super) fn parse_with<S: TreeSink>(
|
||||
) -> S::Tree {
|
||||
let mut events = {
|
||||
let input = input::ParserInput::new(text, tokens);
|
||||
let parser_impl = ParserImpl::new(input);
|
||||
let parser_impl = ParserImpl::new(&input);
|
||||
let mut parser_api = Parser(parser_impl);
|
||||
parser(&mut parser_api);
|
||||
parser_api.0.into_events()
|
||||
@ -65,15 +65,15 @@ pub(super) fn parse_with<S: TreeSink>(
|
||||
/// Implementation details of `Parser`, extracted
|
||||
/// to a separate struct in order not to pollute
|
||||
/// the public API of the `Parser`.
|
||||
pub(super) struct ParserImpl<S> {
|
||||
token_source: S,
|
||||
pub(super) struct ParserImpl<'a> {
|
||||
token_source: &'a dyn TokenSource,
|
||||
pos: InputPosition,
|
||||
events: Vec<Event>,
|
||||
steps: Cell<u32>,
|
||||
}
|
||||
|
||||
impl<S: TokenSource> ParserImpl<S> {
|
||||
fn new(token_source: S) -> ParserImpl<S> {
|
||||
impl<'a> ParserImpl<'a> {
|
||||
fn new(token_source: &'a dyn TokenSource) -> ParserImpl<'a> {
|
||||
ParserImpl {
|
||||
token_source,
|
||||
pos: InputPosition::new(),
|
||||
|
Loading…
Reference in New Issue
Block a user