diff options
Diffstat (limited to 'src/lib/corelib')
-rwxr-xr-x | src/lib/corelib/language/evaluatorscriptclass.cpp | 13 | ||||
-rw-r--r-- | src/lib/corelib/language/value.cpp | 5 | ||||
-rw-r--r-- | src/lib/corelib/language/value.h | 4 |
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); |