diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-10-04 11:59:05 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-10-04 14:11:37 +0000 |
commit | 6d568728aceb0beda1545706fe70450333410c86 (patch) | |
tree | 8412b3f3a507e105368c72845166fb286a95c03d /src/lib/corelib/language/evaluatorscriptclass.cpp | |
parent | 0b46440f5310018b5e881b03a355953bdb2ea188 (diff) |
Fix usage of outer within Properties blocks
In EvaluatorScriptClass we're cloning the value that's referenced by
"outer" and leave out the list of alternatives. This custom cloning code
was missing the defining item of JSSourceValue, which led to an error if
the outer item was dependent on some other property.
Now, we create a full clone and clear the necessary members. This
ensures we do not have to adjust this code if another member is added to
JSSourceValue.
Task-number: QBS-1205
Change-Id: I59596894f365fa5207490922ee60959e221102b1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/language/evaluatorscriptclass.cpp')
-rwxr-xr-x | src/lib/corelib/language/evaluatorscriptclass.cpp | 13 |
1 files changed, 5 insertions, 8 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); } |