From 02d4fb60f26340be904d59cb5441e5a86a77bcd7 Mon Sep 17 00:00:00 2001 From: kdy1 Date: Mon, 6 Jan 2020 01:02:51 +0000 Subject: [PATCH] Make capturing fast (#570) swc_ecma_parser: - made capturing fast (Closes #533) --- ecmascript/parser/examples/lexer.rs | 3 +-- ecmascript/parser/src/parser/input.rs | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/ecmascript/parser/examples/lexer.rs b/ecmascript/parser/examples/lexer.rs index 41361caff0f..c999b95b671 100644 --- a/ecmascript/parser/examples/lexer.rs +++ b/ecmascript/parser/examples/lexer.rs @@ -1,7 +1,6 @@ -use swc_common; - use std::sync::Arc; use swc_common::{ + self, errors::{ColorConfig, Handler}, FileName, SourceMap, }; diff --git a/ecmascript/parser/src/parser/input.rs b/ecmascript/parser/src/parser/input.rs index 350c3ab58d3..5bc0c89485a 100644 --- a/ecmascript/parser/src/parser/input.rs +++ b/ecmascript/parser/src/parser/input.rs @@ -5,7 +5,7 @@ use crate::{ Context, JscTarget, Syntax, }; use lexer::TokenContexts; -use std::mem; +use std::{cell::RefCell, mem, rc::Rc}; use swc_common::{BytePos, Span, DUMMY_SP}; pub trait Tokens: Clone + Iterator { @@ -84,19 +84,19 @@ impl Tokens for TokensInput { #[derive(Debug, Clone)] pub struct Capturing { inner: I, - captured: Vec, + captured: Rc>>, } impl Capturing { pub fn new(input: I) -> Self { Capturing { inner: input, - captured: vec![], + captured: Default::default(), } } /// Take captured tokens pub fn take(&mut self) -> Vec { - mem::replace(&mut self.captured, vec![]) + mem::replace(&mut *self.captured.borrow_mut(), Default::default()) } } @@ -106,7 +106,7 @@ impl Iterator for Capturing { fn next(&mut self) -> Option { let next = self.inner.next(); - self.captured.extend(next.clone()); + self.captured.borrow_mut().extend(next.clone()); next } }