From 44ed62c1819fd0c3d539475a702ecdf7fcf1b9d5 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 19 Jan 2009 20:06:39 +0100 Subject: Fixes: Expand the #elif's condition. --- src/libs/cplusplus/pp-engine.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/libs/cplusplus') diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index 6ed55492e5..e7d3011a76 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -963,7 +963,21 @@ void Preprocessor::processElif(TokenIterator firstToken, TokenIterator lastToken } else if (iflevel == 0 && !skipping()) { // std::cerr << "*** WARNING #else without #if" << std::endl; } else if (!_true_test[iflevel] && !_skipping[iflevel - 1]) { - const Value result = evalExpression(tk.dot(), lastToken, _source); + + const char *first = startOfToken(*tk); + const char *last = startOfToken(*lastToken); + + MacroExpander expandCondition (env); + QByteArray condition; + condition.reserve(256); + expandCondition(first, last, &condition); + + QVector tokens = tokenize(condition); + + const Value result = evalExpression(tokens.constBegin(), + tokens.constEnd() - 1, + condition); + _true_test[iflevel] = ! result.is_zero (); _skipping[iflevel] = result.is_zero (); } else { -- cgit v1.2.1