diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 5076ef912162b12194db7fcb7f8d935b1b0cc25f..0c7ab0e9e008ec675e1d60012ca148f085aafffb 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -31,6 +31,7 @@ #include "qmljsbind.h" #include "qmljslink.h" #include "qmljscheck.h" +#include "qmljsdocument.h" #include "qmljsmetatypesystem.h" #include <QtCore/QDir> diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h index bb64a8685bc886634d15383800ed66eda1d6c5c5..9d8e67b5dfb1fc82b9dc20a337ec94b957676aae 100644 --- a/src/libs/qmljs/qmljsbind.h +++ b/src/libs/qmljs/qmljsbind.h @@ -32,7 +32,6 @@ #include <qmljs/parser/qmljsastvisitor_p.h> #include <qmljs/qmljsinterpreter.h> -#include <qmljs/qmljsdocument.h> #include <QtCore/QHash> #include <QtCore/QStringList> @@ -42,9 +41,12 @@ namespace QmlJS { class LinkImports; class Link; +class Document; class QMLJS_EXPORT Bind: protected AST::Visitor { + Q_DISABLE_COPY(Bind) + public: Bind(Document *doc); virtual ~Bind(); @@ -96,7 +98,6 @@ private: friend class LinkImports; friend class Link; }; -typedef QSharedPointer<Bind> BindPtr; } // end of namespace Qml diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index a215198fe98e5a8578d8674a99c5665325cb30c6..fc3fb9ec88343287c7f675e0303b4703733aa86f 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -36,7 +36,6 @@ #include <qmljs/parser/qmljsastfwd_p.h> #include <QtCore/QDir> -using namespace QmlJS; using namespace QmlJS; using namespace QmlJS::AST; @@ -44,6 +43,7 @@ Document::Document(const QString &fileName) : _engine(0) , _pool(0) , _ast(0) + , _bind(0) , _documentRevision(0) , _parsedCorrectly(false) , _fileName(fileName) @@ -65,6 +65,9 @@ Document::Document(const QString &fileName) Document::~Document() { + if (_bind) + delete _bind; + if (_engine) delete _engine; @@ -131,6 +134,7 @@ bool Document::parseQml() Q_ASSERT(! _engine); Q_ASSERT(! _pool); Q_ASSERT(! _ast); + Q_ASSERT(! _bind); _engine = new Engine(); _pool = new NodePool(_fileName, _engine); @@ -144,7 +148,7 @@ bool Document::parseQml() _ast = parser.ast(); _diagnosticMessages = parser.diagnosticMessages(); - _bind = BindPtr(new Bind(this)); + _bind = new Bind(this); return _parsedCorrectly; } @@ -154,6 +158,7 @@ bool Document::parseJavaScript() Q_ASSERT(! _engine); Q_ASSERT(! _pool); Q_ASSERT(! _ast); + Q_ASSERT(! _bind); _engine = new Engine(); _pool = new NodePool(_fileName, _engine); @@ -167,7 +172,7 @@ bool Document::parseJavaScript() _ast = cast<Program*>(parser.rootNode()); _diagnosticMessages = parser.diagnosticMessages(); - _bind = BindPtr(new Bind(this)); + _bind = new Bind(this); return _parsedCorrectly; } @@ -195,7 +200,7 @@ bool Document::parseExpression() return _parsedCorrectly; } -BindPtr Document::bind() const +Bind *Document::bind() const { return _bind; } @@ -214,11 +219,11 @@ void Snapshot::insert(const Document::Ptr &document) _documents.insert(document->fileName(), document); } -Document::PtrList Snapshot::importedDocuments(const Document::Ptr &doc, const QString &importPath) const +QList<Document::Ptr> Snapshot::importedDocuments(const Document::Ptr &doc, const QString &importPath) const { // ### TODO: maybe we should add all imported documents in the parse Document::parse() method, regardless of whether they're in the path or not. - Document::PtrList result; + QList<Document::Ptr> result; QString docPath = doc->path(); docPath += QLatin1Char('/'); diff --git a/src/libs/qmljs/qmljsdocument.h b/src/libs/qmljs/qmljsdocument.h index bef0fd986e47b7be1726d947f49aa617b7533700..5cc07ccf6bbf9c7988b1f7093e79e39f4545e4e1 100644 --- a/src/libs/qmljs/qmljsdocument.h +++ b/src/libs/qmljs/qmljsdocument.h @@ -41,13 +41,11 @@ namespace QmlJS { class Bind; -typedef QSharedPointer<Bind> BindPtr; class QMLJS_EXPORT Document { public: typedef QSharedPointer<Document> Ptr; - typedef QList<Document::Ptr> PtrList; protected: Document(const QString &fileName); @@ -57,12 +55,12 @@ public: static Document::Ptr create(const QString &fileName); - QmlJS::AST::UiProgram *qmlProgram() const; - QmlJS::AST::Program *jsProgram() const; - QmlJS::AST::ExpressionNode *expression() const; - QmlJS::AST::Node *ast() const; + AST::UiProgram *qmlProgram() const; + AST::Program *jsProgram() const; + AST::ExpressionNode *expression() const; + AST::Node *ast() const; - QList<QmlJS::DiagnosticMessage> diagnosticMessages() const; + QList<DiagnosticMessage> diagnosticMessages() const; QString source() const; void setSource(const QString &source); @@ -74,7 +72,7 @@ public: bool isParsedCorrectly() const { return _parsedCorrectly; } - BindPtr bind() const; + Bind *bind() const; int documentRevision() const; void setDocumentRevision(int documentRevision); @@ -85,8 +83,9 @@ public: private: QmlJS::Engine *_engine; - QmlJS::NodePool *_pool; - QmlJS::AST::Node *_ast; + NodePool *_pool; + AST::Node *_ast; + Bind *_bind; int _documentRevision; bool _parsedCorrectly; QList<QmlJS::DiagnosticMessage> _diagnosticMessages; @@ -94,7 +93,6 @@ private: QString _path; QString _componentName; QString _source; - BindPtr _bind; }; class QMLJS_EXPORT Snapshot @@ -117,7 +115,7 @@ public: Document::Ptr document(const QString &fileName) const { return _documents.value(fileName); } - Document::PtrList importedDocuments(const Document::Ptr &doc, const QString &importPath) const; + QList<Document::Ptr> importedDocuments(const Document::Ptr &doc, const QString &importPath) const; QMap<QString, Document::Ptr> componentsDefinedByImportedDocuments(const Document::Ptr &doc, const QString &importPath) const; }; diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 2b786b6d12d71d834a054618dcfbdb83bd36c607..666c8a56ca337564d4fd92c059b82a543b351c63 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -45,7 +45,7 @@ void Link::scopeChainAt(Document::Ptr doc, Node *currentObject) if (doc->qmlProgram() != 0) _context.setLookupMode(Context::QmlLookup); - BindPtr bind = doc->bind(); + Bind *bind = doc->bind(); // Build the scope chain. diff --git a/src/libs/qmljs/qmljslink.h b/src/libs/qmljs/qmljslink.h index c588c37b16b163cea3363928502705ccf092c0c2..0a481598c24382761b93acb8691bab872e2a7c26 100644 --- a/src/libs/qmljs/qmljslink.h +++ b/src/libs/qmljs/qmljslink.h @@ -40,7 +40,7 @@ private: AST::UiImport *import, const QString &startPath); void importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, AST::UiImport *import); - void importObject(BindPtr bind, const QString &name, Interpreter::ObjectValue *object, NameId* targetNamespace); + void importObject(Bind *bind, const QString &name, Interpreter::ObjectValue *object, NameId *targetNamespace); private: Snapshot _snapshot;