From 7b2110de7ea69ffa3914d3289ac42cbb69d9a414 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Mon, 12 Sep 2011 11:48:33 +0200 Subject: 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 --- src/libs/qmljs/qmljsevaluate.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src/libs/qmljs/qmljsevaluate.cpp') 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(result)) - result = _context->lookupReference(ref); + if (const Reference *ref = value_cast(result)) { + if (_referenceContext) + result = _referenceContext->lookupReference(ref); + else + result = _context->lookupReference(ref); + } if (! result) result = _valueOwner->undefinedValue(); -- cgit v1.2.1