diff --git a/ecmascript/parser/examples/lexer.rs b/ecmascript/parser/examples/lexer.rs index 41361caff0f6..c999b95b6717 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 350c3ab58d31..5bc0c89485a3 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 } }