diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index a8b7a2a1f3afb11a67cd7e28146a46bd2bba51a5..f6acc38b3e64160a1af93be24f13e13d5f8ed28c 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -84,7 +84,7 @@ Interpreter::ObjectValue *Bind::findQmlObject(AST::Node *node) const } bool Bind::usesQmlPrototype(ObjectValue *prototype, - Context *context) const + const Context *context) const { foreach (ObjectValue *object, _qmlObjects.values()) { const ObjectValue *resolvedPrototype = object->prototype(context); diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h index a836eac18a5d95865c93214a946b01c506c10493..9d5f7e76f185a7d7d0dc50f0a53d59c758cc5444 100644 --- a/src/libs/qmljs/qmljsbind.h +++ b/src/libs/qmljs/qmljsbind.h @@ -66,7 +66,7 @@ public: Interpreter::ObjectValue *findQmlObject(AST::Node *node) const; bool usesQmlPrototype(Interpreter::ObjectValue *prototype, - Interpreter::Context *context) const; + const Interpreter::Context *context) const; Interpreter::ObjectValue *findFunctionScope(AST::FunctionDeclaration *node) const; bool isGroupedPropertyBinding(AST::Node *node) const; diff --git a/src/libs/qmljs/qmljsevaluate.cpp b/src/libs/qmljs/qmljsevaluate.cpp index 2b6821e755b482d61952ffb9c8e56c9d2051fa9a..21c98a4d4c05144896edf7275db9f462c2e20a76 100644 --- a/src/libs/qmljs/qmljsevaluate.cpp +++ b/src/libs/qmljs/qmljsevaluate.cpp @@ -36,7 +36,7 @@ using namespace QmlJS; using namespace QmlJS::Interpreter; -Evaluate::Evaluate(Context *context) +Evaluate::Evaluate(const Context *context) : _engine(context->engine()), _context(context), _scope(_engine->globalObject()), diff --git a/src/libs/qmljs/qmljsevaluate.h b/src/libs/qmljs/qmljsevaluate.h index fb46260ae4c31ab65a8ed721afcbde159e35d5b4..60d689eb72a9496c7db6e5a841c63db6a3cca9bc 100644 --- a/src/libs/qmljs/qmljsevaluate.h +++ b/src/libs/qmljs/qmljsevaluate.h @@ -46,7 +46,7 @@ namespace Interpreter { class QMLJS_EXPORT Evaluate: protected AST::Visitor { public: - Evaluate(Interpreter::Context *context); + Evaluate(const Interpreter::Context *context); virtual ~Evaluate(); const Interpreter::Value *operator()(AST::Node *ast); @@ -156,7 +156,7 @@ protected: private: QmlJS::Document::Ptr _doc; Interpreter::Engine *_engine; - Interpreter::Context *_context; + const Interpreter::Context *_context; const Interpreter::ObjectValue *_scope; const Interpreter::Value *_result; }; diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index f46fde063afb103f719b705ab2207eae7638008d..61770b747936a6e27afa2cab8c8c966c929a8029 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -1455,7 +1455,7 @@ void Context::setTypeEnvironment(const QmlJS::Document *doc, const ObjectValue * _typeEnvironments[doc->fileName()] = typeEnvironment; } -const Value *Context::lookup(const QString &name) +const Value *Context::lookup(const QString &name) const { QList<const ObjectValue *> scopes = _scopeChain.all(); for (int index = scopes.size() - 1; index != -1; --index) { @@ -1469,7 +1469,7 @@ const Value *Context::lookup(const QString &name) return _engine->undefinedValue(); } -const ObjectValue *Context::lookupType(const QmlJS::Document *doc, UiQualifiedId *qmlTypeName) +const ObjectValue *Context::lookupType(const QmlJS::Document *doc, UiQualifiedId *qmlTypeName) const { const ObjectValue *objectValue = typeEnvironment(doc); if (!objectValue) @@ -1489,7 +1489,7 @@ const ObjectValue *Context::lookupType(const QmlJS::Document *doc, UiQualifiedId return objectValue; } -const ObjectValue *Context::lookupType(const QmlJS::Document *doc, const QStringList &qmlTypeName) +const ObjectValue *Context::lookupType(const QmlJS::Document *doc, const QStringList &qmlTypeName) const { const ObjectValue *objectValue = typeEnvironment(doc); @@ -1507,7 +1507,7 @@ const ObjectValue *Context::lookupType(const QmlJS::Document *doc, const QString return objectValue; } -const Value *Context::lookupReference(const Reference *reference) +const Value *Context::lookupReference(const Reference *reference) const { if (_referenceStack.contains(reference)) return 0; @@ -1579,7 +1579,7 @@ void Reference::accept(ValueVisitor *visitor) const visitor->visit(this); } -const Value *Reference::value(Context *) const +const Value *Reference::value(const Context *) const { return _engine->undefinedValue(); } @@ -1663,7 +1663,7 @@ void ObjectValue::setClassName(const QString &className) _className = className; } -const ObjectValue *ObjectValue::prototype(Context *context) const +const ObjectValue *ObjectValue::prototype(const Context *context) const { const ObjectValue *prototypeObject = value_cast<const ObjectValue *>(_prototype); if (! prototypeObject) { @@ -1700,7 +1700,7 @@ void ObjectValue::accept(ValueVisitor *visitor) const visitor->visit(this); } -const Value *ObjectValue::property(const QString &name, Context *context) const +const Value *ObjectValue::property(const QString &name, const Context *context) const { return lookupMember(name, context); } @@ -1736,7 +1736,7 @@ void ObjectValue::processMembers(MemberProcessor *processor) const } } -const Value *ObjectValue::lookupMember(const QString &name, Context *context, bool examinePrototypes) const +const Value *ObjectValue::lookupMember(const QString &name, const Context *context, bool examinePrototypes) const { if (const Value *m = _members.value(name)) return m; @@ -1931,7 +1931,7 @@ const Value *Function::argument(int index) const return _arguments.at(index); } -const Value *Function::property(const QString &name, Context *context) const +const Value *Function::property(const QString &name, const Context *context) const { if (name == "length") return engine()->numberValue(); @@ -2955,7 +2955,7 @@ ASTVariableReference::~ASTVariableReference() { } -const Value *ASTVariableReference::value(Context *context) const +const Value *ASTVariableReference::value(const Context *context) const { Evaluate check(context); return check(_ast->expression); @@ -3034,7 +3034,7 @@ UiQualifiedId *QmlPrototypeReference::qmlTypeName() const return _qmlTypeName; } -const Value *QmlPrototypeReference::value(Context *context) const +const Value *QmlPrototypeReference::value(const Context *context) const { return context->lookupType(_doc, _qmlTypeName); } @@ -3061,7 +3061,7 @@ bool ASTPropertyReference::getSourceLocation(QString *fileName, int *line, int * return true; } -const Value *ASTPropertyReference::value(Context *context) const +const Value *ASTPropertyReference::value(const Context *context) const { if (_ast->expression && (!_ast->memberType || _ast->memberType->asString() == QLatin1String("variant"))) { @@ -3096,7 +3096,7 @@ bool ASTSignalReference::getSourceLocation(QString *fileName, int *line, int *co return true; } -const Value *ASTSignalReference::value(Context *) const +const Value *ASTSignalReference::value(const Context *) const { return engine()->undefinedValue(); } diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index 0ce977bdc3611cede786fd802b42803237abf827..201b89cb009badeca1b70b9553ddd149d2758707 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -281,10 +281,10 @@ public: const ObjectValue *typeEnvironment(const Document *doc) const; void setTypeEnvironment(const Document *doc, const ObjectValue *typeEnvironment); - const Value *lookup(const QString &name); - const ObjectValue *lookupType(const Document *doc, AST::UiQualifiedId *qmlTypeName); - const ObjectValue *lookupType(const Document *doc, const QStringList &qmlTypeName); - const Value *lookupReference(const Reference *reference); + const Value *lookup(const QString &name) const; + const ObjectValue *lookupType(const Document *doc, AST::UiQualifiedId *qmlTypeName) const; + const ObjectValue *lookupType(const Document *doc, const QStringList &qmlTypeName) const; + const Value *lookupReference(const Reference *reference) const; const Value *property(const ObjectValue *object, const QString &name) const; void setProperty(const ObjectValue *object, const QString &name, const Value *value); @@ -304,7 +304,9 @@ private: ScopeChain _scopeChain; int _qmlScopeObjectIndex; bool _qmlScopeObjectSet; - QList<const Reference *> _referenceStack; + + // for avoiding reference cycles during lookup + mutable QList<const Reference *> _referenceStack; }; class QMLJS_EXPORT Reference: public Value @@ -320,7 +322,7 @@ public: virtual void accept(ValueVisitor *) const; private: - virtual const Value *value(Context *context) const; + virtual const Value *value(const Context *context) const; Engine *_engine; friend class Context; @@ -353,16 +355,16 @@ public: QString className() const; void setClassName(const QString &className); - const ObjectValue *prototype(Context *context) const; + const ObjectValue *prototype(const Context *context) const; void setPrototype(const Value *prototype); virtual void processMembers(MemberProcessor *processor) const; - virtual const Value *property(const QString &name, Context *context) const; + virtual const Value *property(const QString &name, const Context *context) const; virtual void setProperty(const QString &name, const Value *value); virtual void removeProperty(const QString &name); - virtual const Value *lookupMember(const QString &name, Context *context, bool examinePrototypes = true) const; + virtual const Value *lookupMember(const QString &name, const Context *context, bool examinePrototypes = true) const; // Value interface virtual const ObjectValue *asObjectValue() const; @@ -487,7 +489,7 @@ public: void setReturnValue(const Value *returnValue); // ObjectValue interface - virtual const Value *property(const QString &name, Context *context) const; + virtual const Value *property(const QString &name, const Context *context) const; // FunctionValue interface virtual const Value *returnValue() const; @@ -748,7 +750,7 @@ public: AST::UiQualifiedId *qmlTypeName() const; private: - virtual const Value *value(Context *context) const; + virtual const Value *value(const Context *context) const; AST::UiQualifiedId *_qmlTypeName; const Document *_doc; @@ -763,7 +765,7 @@ public: virtual ~ASTVariableReference(); private: - virtual const Value *value(Context *context) const; + virtual const Value *value(const Context *context) const; }; class QMLJS_EXPORT ASTFunctionValue: public FunctionValue @@ -803,7 +805,7 @@ public: virtual bool getSourceLocation(QString *fileName, int *line, int *column) const; private: - virtual const Value *value(Context *context) const; + virtual const Value *value(const Context *context) const; }; class QMLJS_EXPORT ASTSignalReference: public Reference @@ -822,7 +824,7 @@ public: virtual bool getSourceLocation(QString *fileName, int *line, int *column) const; private: - virtual const Value *value(Context *context) const; + virtual const Value *value(const Context *context) const; }; class QMLJS_EXPORT ASTObjectValue: public ObjectValue diff --git a/src/libs/qmljs/qmljslookupcontext.cpp b/src/libs/qmljs/qmljslookupcontext.cpp index 1b8e333754f6c39f14b042041993bcff36edd331..30fafb7f17ff2e8480901f760ef09d417455be0f 100644 --- a/src/libs/qmljs/qmljslookupcontext.cpp +++ b/src/libs/qmljs/qmljslookupcontext.cpp @@ -82,7 +82,7 @@ Interpreter::Engine *LookupContext::engine() const return &d->interp; } -Interpreter::Context *LookupContext::context() const +const Interpreter::Context *LookupContext::context() const { return &d->context; } diff --git a/src/libs/qmljs/qmljslookupcontext.h b/src/libs/qmljs/qmljslookupcontext.h index 0ab35b99b3ddd051978d39da6f3f397980f1a88d..ca93b43aa9ac35dfc8dbb74697c7881f7df3712f 100644 --- a/src/libs/qmljs/qmljslookupcontext.h +++ b/src/libs/qmljs/qmljslookupcontext.h @@ -60,7 +60,7 @@ public: const Interpreter::Value *evaluate(AST::Node *node) const; Interpreter::Engine *engine() const; - Interpreter::Context *context() const; + const Interpreter::Context *context() const; private: QScopedPointer<LookupContextData> d; diff --git a/src/libs/qmljs/qmljsscopebuilder.cpp b/src/libs/qmljs/qmljsscopebuilder.cpp index 77577c5959e5de301894d3262557f581df10b1d2..ceffa41b4b442e82e62ffbc6e7b4afdc7c038097 100644 --- a/src/libs/qmljs/qmljsscopebuilder.cpp +++ b/src/libs/qmljs/qmljsscopebuilder.cpp @@ -194,7 +194,7 @@ const Value *ScopeBuilder::scopeObjectLookup(AST::UiQualifiedId *id) } -const ObjectValue *ScopeBuilder::isPropertyChangesObject(Context *context, +const ObjectValue *ScopeBuilder::isPropertyChangesObject(const Context *context, const ObjectValue *object) { const ObjectValue *prototype = object; diff --git a/src/libs/qmljs/qmljsscopebuilder.h b/src/libs/qmljs/qmljsscopebuilder.h index 954a746fcf71bf52798f2879ff90fbb6b3d10e8c..5c33a27393b06d4e68dbcdf0b5a4afc36bd0dd50 100644 --- a/src/libs/qmljs/qmljsscopebuilder.h +++ b/src/libs/qmljs/qmljsscopebuilder.h @@ -56,7 +56,7 @@ public: void push(const QList<AST::Node *> &nodes); void pop(); - static const Interpreter::ObjectValue *isPropertyChangesObject(Interpreter::Context *context, const Interpreter::ObjectValue *object); + static const Interpreter::ObjectValue *isPropertyChangesObject(const Interpreter::Context *context, const Interpreter::ObjectValue *object); private: void setQmlScopeObject(AST::Node *node); diff --git a/src/plugins/qmljseditor/qmljscodecompletion.cpp b/src/plugins/qmljseditor/qmljscodecompletion.cpp index 9b84cd2dd81b8c96dc1fb504791fb5e7cee9b727..d2222860a9ee3a451df9745f1f0e20ef53923fe4 100644 --- a/src/plugins/qmljseditor/qmljscodecompletion.cpp +++ b/src/plugins/qmljseditor/qmljscodecompletion.cpp @@ -168,11 +168,11 @@ class EnumerateProperties: private Interpreter::MemberProcessor QHash<QString, const Interpreter::Value *> _properties; bool _globalCompletion; bool _enumerateGeneratedSlots; - Interpreter::Context *_context; + const Interpreter::Context *_context; const Interpreter::ObjectValue *_currentObject; public: - EnumerateProperties(Interpreter::Context *context) + EnumerateProperties(const Interpreter::Context *context) : _globalCompletion(false), _enumerateGeneratedSlots(false), _context(context), @@ -692,7 +692,7 @@ int CodeCompletion::startCompletion(TextEditor::ITextEditable *editor) const QList<AST::Node *> path = semanticInfo.astPath(editor->position()); LookupContext::Ptr lookupContext = LookupContext::create(document, snapshot, path); - Interpreter::Context *context = lookupContext->context(); + const Interpreter::Context *context = lookupContext->context(); // Search for the operator that triggered the completion. QChar completionOperator; diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp index 7004371279a7993195e63dc427bb89a96f57d85e..3d929d93d9ac6d58e143af8a9b7afe436be3352a 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.cpp +++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp @@ -251,7 +251,7 @@ void HoverHandler::operateTooltip(TextEditor::ITextEditor *editor, const QPoint } QString HoverHandler::prettyPrint(const QmlJS::Interpreter::Value *value, - QmlJS::Interpreter::Context *context) + const QmlJS::Interpreter::Context *context) { if (! value) return QString(); diff --git a/src/plugins/qmljseditor/qmljshoverhandler.h b/src/plugins/qmljseditor/qmljshoverhandler.h index 13d0cb2db57f2a509ae53838e33a928a673e381a..e8b3290268c9bf2813a6cecbded75a7b3f48c6ae 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.h +++ b/src/plugins/qmljseditor/qmljshoverhandler.h @@ -75,7 +75,7 @@ private: QmlJS::AST::Node *node); QString prettyPrint(const QmlJS::Interpreter::Value *value, - QmlJS::Interpreter::Context *context); + const QmlJS::Interpreter::Context *context); QmlJS::ModelManagerInterface *m_modelManager; QColor m_colorTip; diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp index 5a409af2489048c1f00c628d72b599e8a3230c76..95049322e33b09e717935763d167a9b8cdf37d5c 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.cpp +++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp @@ -108,7 +108,7 @@ QmlOutlineItem &QmlOutlineItem::copyValues(const QmlOutlineItem &other) return *this; } -QString QmlOutlineItem::prettyPrint(const QmlJS::Interpreter::Value *value, QmlJS::Interpreter::Context *context) const +QString QmlOutlineItem::prettyPrint(const QmlJS::Interpreter::Value *value, const QmlJS::Interpreter::Context *context) const { if (! value) return QString(); diff --git a/src/plugins/qmljseditor/qmloutlinemodel.h b/src/plugins/qmljseditor/qmloutlinemodel.h index 8459877334190255132340311d4a0466f9697645..34fe23015b9d6b4fc8e83d2645acd51fedc0fdb3 100644 --- a/src/plugins/qmljseditor/qmloutlinemodel.h +++ b/src/plugins/qmljseditor/qmloutlinemodel.h @@ -46,7 +46,7 @@ public: QmlOutlineItem ©Values(const QmlOutlineItem &other); // so that we can assign all values at onc private: - QString prettyPrint(const QmlJS::Interpreter::Value *value, QmlJS::Interpreter::Context *context) const; + QString prettyPrint(const QmlJS::Interpreter::Value *value, const QmlJS::Interpreter::Context *context) const; QmlOutlineModel *m_outlineModel; QmlJS::AST::Node *m_node;