diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-27 15:12:22 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-28 08:52:56 +0200 |
commit | 82cbd0a9740010021853d1c954d788131861fb04 (patch) | |
tree | 939dffe4b442fbe54f072c74e38309893da0ee35 /src/libs/qmljs/parser | |
parent | faa792f3cdf7141004ea83cfc1406fc678520b58 (diff) | |
download | qt-creator-82cbd0a9740010021853d1c954d788131861fb04.tar.gz |
QmlJS: Support .import directives in js files.
* Allow .import...
* Fix parsing of JS files when using Lexer::scanDirectives()
* Clean up ImportInfo construction.
* Rename ImportInfo::id to ImportInfo::as.
Change-Id: I888da248f06dc6184db99aa74c3b50d7f2f5e491
Reviewed-on: http://codereview.qt-project.org/5625
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Diffstat (limited to 'src/libs/qmljs/parser')
-rw-r--r-- | src/libs/qmljs/parser/qmljsengine_p.cpp | 8 | ||||
-rw-r--r-- | src/libs/qmljs/parser/qmljsengine_p.h | 5 | ||||
-rw-r--r-- | src/libs/qmljs/parser/qmljsparser.cpp | 15 |
3 files changed, 26 insertions, 2 deletions
diff --git a/src/libs/qmljs/parser/qmljsengine_p.cpp b/src/libs/qmljs/parser/qmljsengine_p.cpp index 3d9a84e8f1..ca7597dac9 100644 --- a/src/libs/qmljs/parser/qmljsengine_p.cpp +++ b/src/libs/qmljs/parser/qmljsengine_p.cpp @@ -113,7 +113,7 @@ double integerFromString(const QString &str, int radix) Engine::Engine() - : _lexer(0) + : _lexer(0), _directives(0) { } Engine::~Engine() @@ -134,6 +134,12 @@ Lexer *Engine::lexer() const void Engine::setLexer(Lexer *lexer) { _lexer = lexer; } +void Engine::setDirectives(Directives *directives) +{ _directives = directives; } + +Directives *Engine::directives() const +{ return _directives; } + MemoryPool *Engine::pool() { return &_pool; } diff --git a/src/libs/qmljs/parser/qmljsengine_p.h b/src/libs/qmljs/parser/qmljsengine_p.h index 9297b38ca1..1aec0c5d77 100644 --- a/src/libs/qmljs/parser/qmljsengine_p.h +++ b/src/libs/qmljs/parser/qmljsengine_p.h @@ -56,6 +56,7 @@ QT_QML_BEGIN_NAMESPACE namespace QmlJS { class Lexer; +class Directives; class MemoryPool; class QML_PARSER_EXPORT DiagnosticMessage @@ -83,6 +84,7 @@ public: class QML_PARSER_EXPORT Engine { Lexer *_lexer; + Directives *_directives; MemoryPool _pool; QList<AST::SourceLocation> _comments; QString _extraCode; @@ -100,6 +102,9 @@ public: Lexer *lexer() const; void setLexer(Lexer *lexer); + void setDirectives(Directives *directives); + Directives *directives() const; + MemoryPool *pool(); inline QStringRef midRef(int position, int size) { return _code.midRef(position, size); } diff --git a/src/libs/qmljs/parser/qmljsparser.cpp b/src/libs/qmljs/parser/qmljsparser.cpp index b85092b8da..61f901de8d 100644 --- a/src/libs/qmljs/parser/qmljsparser.cpp +++ b/src/libs/qmljs/parser/qmljsparser.cpp @@ -138,7 +138,20 @@ bool Parser::parse(int startToken) token_buffer[0].token = startToken; first_token = &token_buffer[0]; - last_token = &token_buffer[1]; + if (startToken == T_FEED_JS_PROGRAM) { + Directives ignoreDirectives; + Directives *directives = driver->directives(); + if (!directives) + directives = &ignoreDirectives; + lexer->scanDirectives(directives); + token_buffer[1].token = lexer->tokenKind(); + token_buffer[1].dval = lexer->tokenValue(); + token_buffer[1].loc = location(lexer); + token_buffer[1].spell = lexer->tokenSpell(); + last_token = &token_buffer[2]; + } else { + last_token = &token_buffer[1]; + } tos = -1; program = 0; |