aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rwxr-xr-xsrc/lib/corelib/language/evaluatorscriptclass.cpp13
-rw-r--r--src/lib/corelib/language/value.cpp5
-rw-r--r--src/lib/corelib/language/value.h4
3 files changed, 13 insertions, 9 deletions
diff --git a/src/lib/corelib/language/evaluatorscriptclass.cpp b/src/lib/corelib/language/evaluatorscriptclass.cpp
index ba7df02b5..d75408a36 100755
--- a/src/lib/corelib/language/evaluatorscriptclass.cpp
+++ b/src/lib/corelib/language/evaluatorscriptclass.cpp
@@ -215,14 +215,11 @@ private:
// condition is true, let's use the value of this alternative
if (alternative->value->sourceUsesOuter() && !outerItem) {
// Clone value but without alternatives.
- JSSourceValuePtr outerValue = JSSourceValue::create();
- outerValue->setFile(value->file());
- outerValue->setHasFunctionForm(value->hasFunctionForm());
- outerValue->setSourceCode(value->sourceCode());
- outerValue->setBaseValue(value->baseValue());
- if (value->sourceUsesBase())
- outerValue->setSourceUsesBaseFlag();
- outerValue->setLocation(value->line(), value->column());
+ JSSourceValuePtr outerValue =
+ std::static_pointer_cast<JSSourceValue>(value->clone());
+ outerValue->setNext(ValuePtr());
+ outerValue->clearCreatedByPropertiesBlock();
+ outerValue->clearAlternatives();
outerItem = Item::create(data->item->pool(), ItemType::Outer);
outerItem->setProperty(propertyName->toString(), outerValue);
}
diff --git a/src/lib/corelib/language/value.cpp b/src/lib/corelib/language/value.cpp
index 1b73ccf17..f6d06ef83 100644
--- a/src/lib/corelib/language/value.cpp
+++ b/src/lib/corelib/language/value.cpp
@@ -152,6 +152,11 @@ void JSSourceValue::setHasFunctionForm(bool b)
m_flags &= ~HasFunctionForm;
}
+void JSSourceValue::clearAlternatives()
+{
+ m_alternatives.clear();
+}
+
void JSSourceValue::setDefiningItem(Item *item)
{
Value::setDefiningItem(item);
diff --git a/src/lib/corelib/language/value.h b/src/lib/corelib/language/value.h
index 6b0c98dc9..f0b4c44a6 100644
--- a/src/lib/corelib/language/value.h
+++ b/src/lib/corelib/language/value.h
@@ -75,12 +75,13 @@ public:
void setNext(const ValuePtr &next);
bool createdByPropertiesBlock() const { return m_createdByPropertiesBlock; }
+ void clearCreatedByPropertiesBlock() { m_createdByPropertiesBlock = false; }
private:
Type m_type;
Item *m_definingItem;
ValuePtr m_next;
- const bool m_createdByPropertiesBlock;
+ bool m_createdByPropertiesBlock;
};
class ValueHandler
@@ -158,6 +159,7 @@ public:
const QList<Alternative> &alternatives() const { return m_alternatives; }
void setAlternatives(const QList<Alternative> &alternatives) { m_alternatives = alternatives; }
void addAlternative(const Alternative &alternative) { m_alternatives.append(alternative); }
+ void clearAlternatives();
void setDefiningItem(Item *item);