Hopefully complete fix to bug #5935

Make several Parser methods return copies of tokens, because the
vector containing the token may get reallocated when it grows.

Revert now useless changeset 29557.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29627 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2009-05-11 11:02:25 +00:00
parent 416a6cd1c0
commit 3e3179b4d4
3 changed files with 13 additions and 9 deletions

View File

@ -166,28 +166,32 @@ void Parser::push_back(Token const & t)
} }
Token const & Parser::prev_token() const // We return a copy here because the tokens_ vector may get reallocated
Token const Parser::prev_token() const
{ {
static const Token dummy; static const Token dummy;
return pos_ > 1 ? tokens_[pos_ - 2] : dummy; return pos_ > 1 ? tokens_[pos_ - 2] : dummy;
} }
Token const & Parser::curr_token() const // We return a copy here because the tokens_ vector may get reallocated
Token const Parser::curr_token() const
{ {
static const Token dummy; static const Token dummy;
return pos_ > 0 ? tokens_[pos_ - 1] : dummy; return pos_ > 0 ? tokens_[pos_ - 1] : dummy;
} }
Token const & Parser::next_token() // We return a copy here because the tokens_ vector may get reallocated
Token const Parser::next_token()
{ {
static const Token dummy; static const Token dummy;
return good() ? tokens_[pos_] : dummy; return good() ? tokens_[pos_] : dummy;
} }
Token const & Parser::get_token() // We return a copy here because the tokens_ vector may get reallocated
Token const Parser::get_token()
{ {
static const Token dummy; static const Token dummy;
//cerr << "looking at token " << tokens_[pos_] << " pos: " << pos_ << '\n'; //cerr << "looking at token " << tokens_[pos_] << " pos: " << pos_ << '\n';

View File

@ -180,13 +180,13 @@ public:
/// ///
void push_back(Token const & t); void push_back(Token const & t);
/// The previous token. /// The previous token.
Token const & prev_token() const; Token const prev_token() const;
/// The current token. /// The current token.
Token const & curr_token() const; Token const curr_token() const;
/// The next token. /// The next token.
Token const & next_token(); Token const next_token();
/// Make the next token current and return that. /// Make the next token current and return that.
Token const & get_token(); Token const get_token();
/// \return whether the current token starts a new paragraph /// \return whether the current token starts a new paragraph
bool isParagraph(); bool isParagraph();
/// skips spaces (and comments if \p skip_comments is true) /// skips spaces (and comments if \p skip_comments is true)

View File

@ -1139,7 +1139,7 @@ void parse_text(Parser & p, ostream & os, unsigned flags, bool outer,
bool const use_natbib = used_packages.find("natbib") != used_packages.end(); bool const use_natbib = used_packages.find("natbib") != used_packages.end();
bool const use_jurabib = used_packages.find("jurabib") != used_packages.end(); bool const use_jurabib = used_packages.find("jurabib") != used_packages.end();
while (p.good()) { while (p.good()) {
Token const t = p.get_token(); Token const & t = p.get_token();
#ifdef FILEDEBUG #ifdef FILEDEBUG
cerr << "t: " << t << " flags: " << flags << "\n"; cerr << "t: " << t << " flags: " << flags << "\n";