diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-12 11:48:33 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-12 14:47:35 +0200 |
commit | 7b2110de7ea69ffa3914d3289ac42cbb69d9a414 (patch) | |
tree | b718a4b06791a1e28ce1ef48b80cc2c9cbd16c30 /src/libs/qmljs/qmljsevaluate.cpp | |
parent | ef47a405704783284565010af9371250d31e0856 (diff) | |
download | qt-creator-7b2110de7ea69ffa3914d3289ac42cbb69d9a414.tar.gz |
QmlJS: Fix reference lookup cycles.
Since several reference lookups involve Evaluate which may cause
further reference lookups, we need to be able to pass the existing
ReferenceContext to avoid cycles.
Change-Id: I2f1eeaad4d6b6ff094413d51077b03c985f6fab4
Reviewed-on: http://codereview.qt-project.org/4653
Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com>
Diffstat (limited to 'src/libs/qmljs/qmljsevaluate.cpp')
-rw-r--r-- | src/libs/qmljs/qmljsevaluate.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/libs/qmljs/qmljsevaluate.cpp b/src/libs/qmljs/qmljsevaluate.cpp index 5c3ecfa1d4..80680d7b2e 100644 --- a/src/libs/qmljs/qmljsevaluate.cpp +++ b/src/libs/qmljs/qmljsevaluate.cpp @@ -39,9 +39,10 @@ using namespace QmlJS; -Evaluate::Evaluate(const ScopeChain *scopeChain) +Evaluate::Evaluate(const ScopeChain *scopeChain, ReferenceContext *referenceContext) : _valueOwner(scopeChain->context()->valueOwner()), _context(scopeChain->context()), + _referenceContext(referenceContext), _scopeChain(scopeChain), _scope(_valueOwner->globalObject()), _result(0) @@ -61,8 +62,12 @@ const Value *Evaluate::value(AST::Node *ast) { const Value *result = reference(ast); - if (const Reference *ref = value_cast<const Reference *>(result)) - result = _context->lookupReference(ref); + if (const Reference *ref = value_cast<const Reference *>(result)) { + if (_referenceContext) + result = _referenceContext->lookupReference(ref); + else + result = _context->lookupReference(ref); + } if (! result) result = _valueOwner->undefinedValue(); |