@@ -14,7 +14,7 @@ use crate::tokens::TokenStream;
1414
1515pub struct Parser < ' db > {
1616 db : & ' db dyn TemplateDb ,
17- tokens : TokenStream < ' db > ,
17+ tokens : Vec < Token < ' db > > ,
1818 current : usize ,
1919 errors : Vec < ParserError > ,
2020}
@@ -24,7 +24,7 @@ impl<'db> Parser<'db> {
2424 pub fn new ( db : & ' db dyn TemplateDb , tokens : TokenStream < ' db > ) -> Self {
2525 Self {
2626 db,
27- tokens,
27+ tokens : tokens . stream ( db ) . clone ( ) ,
2828 current : 0 ,
2929 errors : Vec :: new ( ) ,
3030 }
@@ -34,7 +34,7 @@ impl<'db> Parser<'db> {
3434 let mut nodelist = Vec :: new ( ) ;
3535 let mut line_offsets = crate :: ast:: LineOffsets :: default ( ) ;
3636
37- let tokens = self . tokens . stream ( self . db ) ;
37+ let tokens = & self . tokens ;
3838 for token in tokens {
3939 if matches ! ( token, Token :: Newline { .. } ) {
4040 let offset = token. offset ( ) ;
@@ -206,15 +206,14 @@ impl<'db> Parser<'db> {
206206 }
207207
208208 fn item_at ( & self , index : usize ) -> Result < Token < ' db > , ParserError > {
209- let tokens = self . tokens . stream ( self . db ) ;
210- if let Some ( token) = tokens. get ( index) {
209+ if let Some ( token) = self . tokens . get ( index) {
211210 Ok ( token. clone ( ) )
212211 } else {
213- let error = if tokens. is_empty ( ) {
212+ let error = if self . tokens . is_empty ( ) {
214213 ParserError :: stream_error ( StreamError :: Empty )
215214 } else if index < self . current {
216215 ParserError :: stream_error ( StreamError :: AtBeginning )
217- } else if index >= tokens. len ( ) {
216+ } else if index >= self . tokens . len ( ) {
218217 ParserError :: stream_error ( StreamError :: AtEnd )
219218 } else {
220219 ParserError :: stream_error ( StreamError :: InvalidAccess )
@@ -224,8 +223,7 @@ impl<'db> Parser<'db> {
224223 }
225224
226225 fn is_at_end ( & self ) -> bool {
227- let tokens = self . tokens . stream ( self . db ) ;
228- self . current + 1 >= tokens. len ( )
226+ self . current + 1 >= self . tokens . len ( )
229227 }
230228
231229 fn consume ( & mut self ) -> Result < Token < ' db > , ParserError > {
0 commit comments