don't turn = into += in cumulative mode
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>
Fri, 15 Nov 2013 18:28:50 +0000 (19:28 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 15 Jan 2014 18:28:50 +0000 (19:28 +0100)
it leads to pathological cases where the number of loop iterations may
go way beyond the reasonable.

this means that users need to avoid using the = operator in alternative
branches that lead to different sources/subdirectories being included
into the project. this is a bit of a corner case anyway, as people
usually add directly to SOURCES/SUBDIRS.

Change-Id: I7783e318fbc2790f6a853ba4e3f4a12db881feb5
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
(cherry picked from qtcreator/30bd7fcce1aef974f6af9eaa6532aa1f2b6192d2)

src/linguist/shared/qmakeevaluator.cpp

index 07afedc..08b3841 100644 (file)
@@ -894,30 +894,9 @@ void QMakeEvaluator::visitProVariable(
         default: // whatever - cannot happen
         case TokAssign:          // =
             zipEmpty(&varVal);
-            if (!m_cumulative) {
-                // FIXME: add check+warning about accidental value removal.
-                // This may be a bit too noisy, though.
-                m_valuemapStack.top()[varName] = varVal;
-            } else {
-                if (!varVal.isEmpty()) {
-                    // We are greedy for values. But avoid exponential growth.
-                    ProStringList &v = valuesRef(varName);
-                    if (v.isEmpty()) {
-                        v = varVal;
-                    } else {
-                        ProStringList old = v;
-                        v = varVal;
-                        QSet<ProString> has;
-                        has.reserve(v.size());
-                        foreach (const ProString &s, v)
-                            has.insert(s);
-                        v.reserve(v.size() + old.size());
-                        foreach (const ProString &s, old)
-                            if (!has.contains(s))
-                                v << s;
-                    }
-                }
-            }
+            // FIXME: add check+warning about accidental value removal.
+            // This may be a bit too noisy, though.
+            m_valuemapStack.top()[varName] = varVal;
             debugMsg(2, "assigning");
             break;
         case TokAppendUnique:    // *=
@@ -933,7 +912,7 @@ void QMakeEvaluator::visitProVariable(
             if (!m_cumulative) {
                 removeEach(&valuesRef(varName), varVal);
             } else {
-                // We are stingy with our values, too.
+                // We are stingy with our values.
             }
             debugMsg(2, "removing");
             break;