From 4b7a56caa265c54a9b77381e2db1819ed87f21de Mon Sep 17 00:00:00 2001 From: Charles Brunet Date: Fri, 25 Aug 2023 08:58:23 -0400 Subject: parser: remember previous Token --- mesonbuild/mparser.py | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/mesonbuild/mparser.py b/mesonbuild/mparser.py index 2ff32dc..ce83cc2 100644 --- a/mesonbuild/mparser.py +++ b/mesonbuild/mparser.py @@ -623,10 +623,12 @@ class Parser: self.lexer = Lexer(code) self.stream = self.lexer.lex(filename) self.current: Token = Token('eof', '', 0, 0, 0, (0, 0), None) + self.previous = self.current self.getsym() self.in_ternary = False def getsym(self) -> None: + self.previous = self.current try: self.current = next(self.stream) except StopIteration: @@ -831,10 +833,9 @@ class Parser: while not isinstance(s, EmptyNode): if self.accept('colon'): a.set_kwarg_no_check(s, self.statement()) - potential = self.current if not self.accept('comma'): return a - a.commas.append(potential) + a.commas.append(self.previous) else: raise ParseException('Only key:value pairs are valid in dict construction.', self.getline(), s.lineno, s.colno) @@ -846,19 +847,17 @@ class Parser: a = ArgumentNode(self.current) while not isinstance(s, EmptyNode): - potential = self.current if self.accept('comma'): - a.commas.append(potential) + a.commas.append(self.previous) a.append(s) elif self.accept('colon'): if not isinstance(s, IdNode): raise ParseException('Dictionary key must be a plain identifier.', self.getline(), s.lineno, s.colno) a.set_kwarg(s, self.statement()) - potential = self.current if not self.accept('comma'): return a - a.commas.append(potential) + a.commas.append(self.previous) else: a.append(s) return a @@ -888,17 +887,15 @@ class Parser: return IndexNode(source_object, index_statement) def foreachblock(self) -> ForeachClauseNode: - t = self.current self.expect('id') - assert isinstance(t.value, str) - varname = t - varnames = [IdNode(t)] + assert isinstance(self.previous.value, str) + varname = self.previous + varnames = [IdNode(self.previous)] if self.accept('comma'): - t = self.current self.expect('id') - assert isinstance(t.value, str) - varnames.append(IdNode(t)) + assert isinstance(self.previous.value, str) + varnames.append(IdNode(self.previous)) self.expect('colon') items = self.statement() -- cgit v1.1