aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-05-22 10:01:04 +0200
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2015-05-22 09:36:27 +0000
commitd02e67dd9a11599d44a4a95953877d5ca4b707fe (patch)
tree7cb51a1879f8f461762331ecaf5edca3e1bcfa9d
parent760dc4ef7571e780489adcd51ddb80beb000bd21 (diff)
move definingItem to Value
This is were it belongs. Change-Id: I5b1511ddc54598972fb0a219a62402df49e77e20 Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
-rw-r--r--src/lib/corelib/language/modulemerger.cpp13
-rw-r--r--src/lib/corelib/language/modulemerger.h3
-rw-r--r--src/lib/corelib/language/value.cpp23
-rw-r--r--src/lib/corelib/language/value.h6
4 files changed, 23 insertions, 22 deletions
diff --git a/src/lib/corelib/language/modulemerger.cpp b/src/lib/corelib/language/modulemerger.cpp
index 43ecc286b..19c929c31 100644
--- a/src/lib/corelib/language/modulemerger.cpp
+++ b/src/lib/corelib/language/modulemerger.cpp
@@ -105,9 +105,9 @@ void ModuleMerger::pushScalarProperties(Item::PropertyMap *dst, Item *srcItem)
ValuePtr &v = (*dst)[it.key()];
if (v)
continue;
- JSSourceValuePtr clonedVal = srcVal->clone().dynamicCast<JSSourceValue>();
+ ValuePtr clonedVal = srcVal->clone();
m_decls[clonedVal] = srcDecl;
- setDefiningItem(clonedVal, origSrcItem);
+ clonedVal->setDefiningItem(origSrcItem);
v = clonedVal;
}
}
@@ -170,7 +170,7 @@ void ModuleMerger::pullListProperties(Item::PropertyMap *dst, Item *instance)
continue;
JSSourceValuePtr clonedVal = srcVal->clone().dynamicCast<JSSourceValue>();
m_decls[clonedVal] = srcDecl;
- setDefiningItem(clonedVal, origInstance);
+ clonedVal->setDefiningItem(origInstance);
ValuePtr &v = (*dst)[it.key()];
if (v) {
JSSourceValuePtr dstSrcVal = v.dynamicCast<JSSourceValue>();
@@ -184,12 +184,5 @@ void ModuleMerger::pullListProperties(Item::PropertyMap *dst, Item *instance)
} while (instance && instance->isModuleInstance());
}
-void ModuleMerger::setDefiningItem(const JSSourceValuePtr &v, Item *item)
-{
- v->setDefiningItem(item);
- foreach (const JSSourceValue::Alternative &a, v->alternatives())
- a.value->setDefiningItem(item);
-}
-
} // namespace Internal
} // namespace qbs
diff --git a/src/lib/corelib/language/modulemerger.h b/src/lib/corelib/language/modulemerger.h
index 813603f5f..03796b3ff 100644
--- a/src/lib/corelib/language/modulemerger.h
+++ b/src/lib/corelib/language/modulemerger.h
@@ -52,13 +52,12 @@ private:
void pushScalarProperties(Item::PropertyMap *dst, Item *srcItem);
void mergeOutProps(Item::PropertyMap *dst, const Item::PropertyMap &src);
void pullListProperties(Item::PropertyMap *dst, Item *instance);
- static void setDefiningItem(const JSSourceValuePtr &v, Item *item);
const Logger &m_logger;
Item * const m_rootItem;
Item *m_mergedModuleItem;
const QStringList m_moduleName;
- QHash<JSSourceValuePtr, PropertyDeclaration> m_decls;
+ QHash<ValuePtr, PropertyDeclaration> m_decls;
QSet<const Item *> m_seenInstancesTopDown;
QSet<const Item *> m_seenInstancesBottomUp;
};
diff --git a/src/lib/corelib/language/value.cpp b/src/lib/corelib/language/value.cpp
index 62dbfed17..217af70aa 100644
--- a/src/lib/corelib/language/value.cpp
+++ b/src/lib/corelib/language/value.cpp
@@ -37,7 +37,7 @@ namespace qbs {
namespace Internal {
Value::Value(Type t)
- : m_type(t)
+ : m_type(t), m_definingItem(0)
{
}
@@ -45,9 +45,19 @@ Value::~Value()
{
}
+Item *Value::definingItem() const
+{
+ return m_definingItem;
+}
+
+void Value::setDefiningItem(Item *item)
+{
+ m_definingItem = item;
+}
+
JSSourceValue::JSSourceValue()
- : Value(JSSourceValueType), m_line(-1), m_column(-1), m_definingItem(0)
+ : Value(JSSourceValueType), m_line(-1), m_column(-1)
{
}
@@ -95,14 +105,11 @@ void JSSourceValue::setHasFunctionForm(bool b)
m_flags &= ~HasFunctionForm;
}
-Item *JSSourceValue::definingItem() const
-{
- return m_definingItem;
-}
-
void JSSourceValue::setDefiningItem(Item *item)
{
- m_definingItem = item;
+ Value::setDefiningItem(item);
+ foreach (const JSSourceValue::Alternative &a, m_alternatives)
+ a.value->setDefiningItem(item);
}
JSSourceValuePtr JSSourceValue::next() const
diff --git a/src/lib/corelib/language/value.h b/src/lib/corelib/language/value.h
index fb130276a..f79ee87e6 100644
--- a/src/lib/corelib/language/value.h
+++ b/src/lib/corelib/language/value.h
@@ -60,8 +60,12 @@ public:
virtual ValuePtr clone() const = 0;
virtual CodeLocation location() const { return CodeLocation(); }
+ Item *definingItem() const;
+ virtual void setDefiningItem(Item *item);
+
private:
Type m_type;
+ Item *m_definingItem;
};
class ValueHandler
@@ -128,7 +132,6 @@ public:
void setAlternatives(const QList<Alternative> &alternatives) { m_alternatives = alternatives; }
void addAlternative(const Alternative &alternative) { m_alternatives.append(alternative); }
- Item *definingItem() const;
void setDefiningItem(Item *item);
JSSourceValuePtr next() const;
@@ -142,7 +145,6 @@ private:
Flags m_flags;
JSSourceValuePtr m_baseValue;
QList<Alternative> m_alternatives;
- Item *m_definingItem;
JSSourceValuePtr m_next;
};