Fix issue where position was retained across Lexer instances
This commit is contained in:
		@@ -16,9 +16,8 @@ class Block(dict):
 | 
				
			|||||||
        super().__init__()
 | 
					        super().__init__()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Interp:    
 | 
					class Interp:    
 | 
				
			||||||
    vars: dict[str, typing.Any] = {}
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def __init__(self, stream: typing.TextIO, name: str):
 | 
					    def __init__(self, stream: typing.TextIO, name: str):
 | 
				
			||||||
 | 
					        self.vars: dict[str, typing.Any] = {}
 | 
				
			||||||
        self.parser = parser.Parser(stream, name)
 | 
					        self.parser = parser.Parser(stream, name)
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    def __setitem__(self, key, val):
 | 
					    def __setitem__(self, key, val):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,11 +34,10 @@ class ExpectedError(Exception):
 | 
				
			|||||||
        self.expected = expected
 | 
					        self.expected = expected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Lexer:
 | 
					class Lexer:
 | 
				
			||||||
    pos = ast.Position()
 | 
					 | 
				
			||||||
    prev_pos = ast.Position()
 | 
					 | 
				
			||||||
    unread = ''
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def __init__(self, stream: typing.TextIO, name: str):
 | 
					    def __init__(self, stream: typing.TextIO, name: str):
 | 
				
			||||||
 | 
					        self.pos = pos = ast.Position()
 | 
				
			||||||
 | 
					        self.prev_pos = ast.Position()
 | 
				
			||||||
 | 
					        self.unread = ''
 | 
				
			||||||
        self.stream = stream
 | 
					        self.stream = stream
 | 
				
			||||||
        self.pos.name = name
 | 
					        self.pos.name = name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,10 +15,9 @@ class ExpectedError(Exception):
 | 
				
			|||||||
        self.expected = expected
 | 
					        self.expected = expected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Parser:
 | 
					class Parser:
 | 
				
			||||||
    _prev: tuple[lexer.Token, ast.Position, str] | None = None
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    def __init__(self, stream: TextIO, name: str):
 | 
					    def __init__(self, stream: TextIO, name: str):
 | 
				
			||||||
        self.lexer = lexer.Lexer(stream, name)
 | 
					        self.lexer = lexer.Lexer(stream, name)
 | 
				
			||||||
 | 
					        self._prev: tuple[lexer.Token, ast.Position, str] | None = None
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    def _scan(self) -> tuple[lexer.Token, ast.Position, str]:
 | 
					    def _scan(self) -> tuple[lexer.Token, ast.Position, str]:
 | 
				
			||||||
        if self._prev is not None:
 | 
					        if self._prev is not None:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user