From b4bcbb30d4c132618bfbc53da088bc9c223daf5c Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Wed, 19 Oct 2022 19:56:05 +0300 Subject: Fix parser::mode() so for peeked token on replay it returns its lexing mode --- libbuild2/parser.hxx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'libbuild2') diff --git a/libbuild2/parser.hxx b/libbuild2/parser.hxx index 0d1e9e2..0d7e900 100644 --- a/libbuild2/parser.hxx +++ b/libbuild2/parser.hxx @@ -696,15 +696,24 @@ namespace build2 replay_data_[replay_i_].mode == m); } + // In the replay mode return the lexing mode of the token returned by the + // subsequent next() or peek() call. + // lexer_mode mode () const { if (replay_ != replay::play) + { return lexer_->mode (); + } else { - assert (replay_i_ != replay_data_.size ()); - return replay_data_[replay_i_].mode; + assert (!peeked_ || replay_i_ != 0); + + size_t i (!peeked_ ? replay_i_ : replay_i_ - 1); + assert (i != replay_data_.size ()); + + return replay_data_[i].mode; } } -- cgit v1.1