From e4b8bafa3be9d5c20b220349d2ffa39a3085b947 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Wed, 14 Sep 2011 14:50:24 +0200 Subject: Fix automatic semicolon insertion. The parser should insert a T_SEMICOLON token when it reaches an error state and the lookahead token is following a closing brace. Change-Id: Ib849e7fbfe50c2a3e679ae0794f5780cc0b94de5 Reviewed-on: http://codereview.qt-project.org/4896 Reviewed-by: Qt Sanity Bot Reviewed-by: Kent Hansen --- src/declarative/qml/parser/qdeclarativejslexer.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/declarative/qml/parser/qdeclarativejslexer.cpp') diff --git a/src/declarative/qml/parser/qdeclarativejslexer.cpp b/src/declarative/qml/parser/qdeclarativejslexer.cpp index def027c1f8..dd74ffa004 100644 --- a/src/declarative/qml/parser/qdeclarativejslexer.cpp +++ b/src/declarative/qml/parser/qdeclarativejslexer.cpp @@ -111,6 +111,7 @@ Lexer::Lexer(Engine *engine) , _prohibitAutomaticSemicolon(false) , _restrictedKeyword(false) , _terminator(false) + , _followsClosingBrace(false) , _delimited(false) , _qmlMode(true) { @@ -160,6 +161,7 @@ void Lexer::setCode(const QString &code, int lineno, bool qmlMode) _prohibitAutomaticSemicolon = false; _restrictedKeyword = false; _terminator = false; + _followsClosingBrace = false; _delimited = false; } @@ -175,12 +177,15 @@ void Lexer::scanChar() int Lexer::lex() { + const int previousTokenKind = _tokenKind; + _tokenSpell = QStringRef(); _tokenKind = scanToken(); _tokenLength = _codePtr - _tokenStartPtr - 1; _delimited = false; _restrictedKeyword = false; + _followsClosingBrace = (previousTokenKind == T_RBRACE); // update the flags switch (_tokenKind) { @@ -1044,4 +1049,17 @@ bool Lexer::prevTerminator() const return _terminator; } +bool Lexer::followsClosingBrace() const +{ + return _followsClosingBrace; +} + +bool Lexer::canInsertAutomaticSemicolon(int token) const +{ + return token == T_RBRACE + || token == EOF_SYMBOL + || _terminator + || _followsClosingBrace; +} + #include "qdeclarativejskeywords_p.h" -- cgit v1.2.3