QmlJS: Merge new parser from Qt 5.

Change-Id: I986df52b7ddb31e3bae1148eda881acc1829b102
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
This commit is contained in:
Christian Kamm
2011-12-07 11:16:26 +01:00
parent 72c06cb6fd
commit 67dd062a31
19 changed files with 1469 additions and 1416 deletions

View File

@@ -15,7 +15,7 @@ perl -p -0777 -i -e 's/QT_BEGIN_NAMESPACE\n\nclass QmlError;\nclass QmlDirParser
# export QmlJSGrammar # export QmlJSGrammar
perl -p -0777 -i -e 's/#include <QtCore\/qglobal.h>\n\nQT_BEGIN_NAMESPACE\n\nclass QmlJSGrammar\n/#include "qmljsglobal_p.h"\n#include <QtCore\/qglobal.h>\n\nQT_BEGIN_NAMESPACE\n\nclass QML_PARSER_EXPORT QmlJSGrammar\n/' qmljsgrammar_p.h perl -p -0777 -i -e 's/#include <QtCore\/qglobal.h>\n\nQT_BEGIN_NAMESPACE\n\nclass QmlJSGrammar\n/#include "qmljsglobal_p.h"\n#include <QtCore\/qglobal.h>\n\nQT_BEGIN_NAMESPACE\n\nclass QML_PARSER_EXPORT QmlJSGrammar\n/' qmljsgrammar_p.h
# replace qmlglobal_p.h include with needed declaration # replace qmlglobal_p.h include with needed declaration
perl -p -0777 -i -e 's/#include \<qmlglobal_p.h\>/bool Qml_isFileCaseCorrect(const QString &) { return true; }/' qmldirparser.cpp perl -p -0777 -i -e 's/#include \"qmlglobal_p.h\"/bool Qml_isFileCaseCorrect(const QString &) { return true; }/' qmldirparser.cpp
./changeLicense.py $me/../qmljs_global.h qml*.{cpp,h} ./changeLicense.py $me/../qmljs_global.h qml*.{cpp,h}

View File

@@ -1,5 +1,3 @@
INCLUDEPATH += $$PWD
HEADERS += \ HEADERS += \
$$PWD/qmljsast_p.h \ $$PWD/qmljsast_p.h \
$$PWD/qmljsastfwd_p.h \ $$PWD/qmljsastfwd_p.h \

View File

@@ -177,7 +177,7 @@ bool QmlDirParser::parse()
QString::fromUtf8("internal types require 2 arguments, but %1 were provided").arg(sectionCount - 1)); QString::fromUtf8("internal types require 2 arguments, but %1 were provided").arg(sectionCount - 1));
continue; continue;
} }
Component entry(sections[1].toUtf8(), sections[2], -1, -1); Component entry(sections[1], sections[2], -1, -1);
entry.internal = true; entry.internal = true;
_components.append(entry); _components.append(entry);
} else if (sections[0] == QLatin1String("typeinfo")) { } else if (sections[0] == QLatin1String("typeinfo")) {
@@ -193,7 +193,7 @@ bool QmlDirParser::parse()
} else if (sectionCount == 2) { } else if (sectionCount == 2) {
// No version specified (should only be used for relative qmldir files) // No version specified (should only be used for relative qmldir files)
const Component entry(sections[0].toUtf8(), sections[1], -1, -1); const Component entry(sections[0], sections[1], -1, -1);
_components.append(entry); _components.append(entry);
} else if (sectionCount == 3) { } else if (sectionCount == 3) {
const QString &version = sections[1]; const QString &version = sections[1];
@@ -211,7 +211,7 @@ bool QmlDirParser::parse()
const int minorVersion = version.mid(dotIndex + 1).toInt(&validVersionNumber); const int minorVersion = version.mid(dotIndex + 1).toInt(&validVersionNumber);
if (validVersionNumber) { if (validVersionNumber) {
const Component entry(sections[0].toUtf8(), sections[2], majorVersion, minorVersion); const Component entry(sections[0], sections[2], majorVersion, minorVersion);
_components.append(entry); _components.append(entry);
} }

View File

@@ -91,11 +91,11 @@ public:
Component() Component()
: majorVersion(0), minorVersion(0), internal(false) {} : majorVersion(0), minorVersion(0), internal(false) {}
Component(const QByteArray &typeName, const QString &fileName, int majorVersion, int minorVersion) Component(const QString &typeName, const QString &fileName, int majorVersion, int minorVersion)
: typeName(typeName), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion), : typeName(typeName), fileName(fileName), majorVersion(majorVersion), minorVersion(minorVersion),
internal(false) {} internal(false) {}
QByteArray typeName; QString typeName;
QString fileName; QString fileName;
int majorVersion; int majorVersion;
int minorVersion; int minorVersion;

View File

@@ -246,9 +246,6 @@ public:
AST::UiObjectMemberList *UiObjectMemberList; AST::UiObjectMemberList *UiObjectMemberList;
AST::UiArrayMemberList *UiArrayMemberList; AST::UiArrayMemberList *UiArrayMemberList;
AST::UiQualifiedId *UiQualifiedId; AST::UiQualifiedId *UiQualifiedId;
AST::UiSignature *UiSignature;
AST::UiFormalList *UiFormalList;
AST::UiFormal *UiFormal;
}; };
public: public:
@@ -781,7 +778,10 @@ case $rule_number: {
UiScriptStatement: Block ; UiScriptStatement: Block ;
UiScriptStatement: EmptyStatement ; UiScriptStatement: EmptyStatement ;
UiScriptStatement: ExpressionStatement ; UiScriptStatement: ExpressionStatement ;
UiScriptStatement: IfStatement ; --- ### do we really want if statement in a binding? UiScriptStatement: IfStatement ;
UiScriptStatement: WithStatement ;
UiScriptStatement: SwitchStatement ;
UiScriptStatement: TryStatement ;
UiObjectMember: UiQualifiedId T_COLON UiScriptStatement ; UiObjectMember: UiQualifiedId T_COLON UiScriptStatement ;
/. /.
@@ -816,6 +816,7 @@ UiParameterList: UiPropertyType JsIdentifier ;
/. /.
case $rule_number: { case $rule_number: {
AST::UiParameterList *node = new (pool) AST::UiParameterList(stringRef(1), stringRef(2)); AST::UiParameterList *node = new (pool) AST::UiParameterList(stringRef(1), stringRef(2));
node->propertyTypeToken = loc(1);
node->identifierToken = loc(2); node->identifierToken = loc(2);
sym(1).Node = node; sym(1).Node = node;
} break; } break;
@@ -1100,6 +1101,7 @@ case $rule_number: {
} }
loc(1).length = lexer->tokenLength(); loc(1).length = lexer->tokenLength();
yylloc = loc(1); // adjust the location of the current token
AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral( AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral(
driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags()); driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags());
@@ -1121,6 +1123,7 @@ case $rule_number: {
} }
loc(1).length = lexer->tokenLength(); loc(1).length = lexer->tokenLength();
yylloc = loc(1); // adjust the location of the current token
AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral( AST::RegExpLiteral *node = new (pool) AST::RegExpLiteral(
driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags()); driver->newStringRef(lexer->regExpPattern()), lexer->regExpFlags());
@@ -2810,6 +2813,8 @@ case $rule_number: {
} break; } break;
./ ./
Program: Empty ;
Program: SourceElements ; Program: SourceElements ;
/. /.
case $rule_number: { case $rule_number: {

View File

@@ -799,31 +799,6 @@ void UiProgram::accept0(Visitor *visitor)
visitor->endVisit(this); visitor->endVisit(this);
} }
void UiSignature::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
accept(formals, visitor);
}
visitor->endVisit(this);
}
void UiFormalList::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
for (UiFormalList *it = this; it; it = it->next) {
accept(it->formal, visitor);
}
}
visitor->endVisit(this);
}
void UiFormal::accept0(Visitor *visitor)
{
if (visitor->visit(this)) {
}
visitor->endVisit(this);
}
void UiPublicMember::accept0(Visitor *visitor) void UiPublicMember::accept0(Visitor *visitor)
{ {
if (visitor->visit(this)) { if (visitor->visit(this)) {

View File

@@ -207,10 +207,7 @@ public:
Kind_UiPublicMember, Kind_UiPublicMember,
Kind_UiQualifiedId, Kind_UiQualifiedId,
Kind_UiScriptBinding, Kind_UiScriptBinding,
Kind_UiSourceElement, Kind_UiSourceElement
Kind_UiFormal,
Kind_UiFormalList,
Kind_UiSignature
}; };
inline Node() inline Node()
@@ -233,6 +230,8 @@ public:
{ return accept(node, visitor); } // ### remove { return accept(node, visitor); } // ### remove
virtual void accept0(Visitor *visitor) = 0; virtual void accept0(Visitor *visitor) = 0;
virtual SourceLocation firstSourceLocation() const = 0;
virtual SourceLocation lastSourceLocation() const = 0;
// attributes // attributes
int kind; int kind;
@@ -244,9 +243,6 @@ public:
ExpressionNode() {} ExpressionNode() {}
virtual ExpressionNode *expressionCast(); virtual ExpressionNode *expressionCast();
virtual SourceLocation firstSourceLocation() const = 0;
virtual SourceLocation lastSourceLocation() const = 0;
}; };
class QML_PARSER_EXPORT Statement: public Node class QML_PARSER_EXPORT Statement: public Node
@@ -255,92 +251,6 @@ public:
Statement() {} Statement() {}
virtual Statement *statementCast(); virtual Statement *statementCast();
virtual SourceLocation firstSourceLocation() const = 0;
virtual SourceLocation lastSourceLocation() const = 0;
};
class QML_PARSER_EXPORT UiFormal: public Node
{
public:
QMLJS_DECLARE_AST_NODE(UiFormal)
UiFormal(const QStringRef &name, const QStringRef &alias)
: name(name), alias(alias)
{ }
virtual SourceLocation firstSourceLocation() const
{ return SourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return SourceLocation(); }
virtual void accept0(Visitor *visitor);
// attributes
QStringRef name;
QStringRef alias;
SourceLocation identifierToken;
SourceLocation asToken;
SourceLocation aliasToken;
};
class QML_PARSER_EXPORT UiFormalList: public Node
{
public:
QMLJS_DECLARE_AST_NODE(UiFormalList)
UiFormalList(UiFormal *formal)
: formal(formal), next(this) {}
UiFormalList(UiFormalList *previous, UiFormal *formal)
: formal(formal)
{
next = previous->next;
previous->next = this;
}
UiFormalList *finish()
{
UiFormalList *head = next;
next = 0;
return head;
}
virtual SourceLocation firstSourceLocation() const
{ return SourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return SourceLocation(); }
virtual void accept0(Visitor *visitor);
// attributes
UiFormal *formal;
UiFormalList *next;
};
class QML_PARSER_EXPORT UiSignature: public Node
{
public:
QMLJS_DECLARE_AST_NODE(UiSignature)
UiSignature(UiFormalList *formals = 0)
: formals(formals)
{ }
virtual SourceLocation firstSourceLocation() const
{ return SourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return SourceLocation(); }
virtual void accept0(Visitor *visitor);
// attributes
SourceLocation lparenToken;
UiFormalList *formals;
SourceLocation rparenToken;
}; };
class QML_PARSER_EXPORT NestedExpression: public ExpressionNode class QML_PARSER_EXPORT NestedExpression: public ExpressionNode
@@ -585,6 +495,41 @@ public:
SourceLocation rbraceToken; SourceLocation rbraceToken;
}; };
class QML_PARSER_EXPORT Elision: public Node
{
public:
QMLJS_DECLARE_AST_NODE(Elision)
Elision():
next (this) { kind = K; }
Elision(Elision *previous)
{
kind = K;
next = previous->next;
previous->next = this;
}
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return commaToken; }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : commaToken; }
inline Elision *finish ()
{
Elision *front = next;
next = 0;
return front;
}
// attributes
Elision *next;
SourceLocation commaToken;
};
class QML_PARSER_EXPORT ElementList: public Node class QML_PARSER_EXPORT ElementList: public Node
{ {
public: public:
@@ -611,6 +556,20 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{
if (elision)
return elision->firstSourceLocation();
return expression->firstSourceLocation();
}
virtual SourceLocation lastSourceLocation() const
{
if (next)
return next->lastSourceLocation();
return expression->lastSourceLocation();
}
// attributes // attributes
Elision *elision; Elision *elision;
ExpressionNode *expression; ExpressionNode *expression;
@@ -618,33 +577,21 @@ public:
SourceLocation commaToken; SourceLocation commaToken;
}; };
class QML_PARSER_EXPORT Elision: public Node class QML_PARSER_EXPORT PropertyName: public Node
{ {
public: public:
QMLJS_DECLARE_AST_NODE(Elision) QMLJS_DECLARE_AST_NODE(PropertyName)
Elision(): PropertyName() { kind = K; }
next (this) { kind = K; }
Elision(Elision *previous) virtual SourceLocation firstSourceLocation() const
{ { return propertyNameToken; }
kind = K;
next = previous->next;
previous->next = this;
}
virtual void accept0(Visitor *visitor); virtual SourceLocation lastSourceLocation() const
{ return propertyNameToken; }
inline Elision *finish ()
{
Elision *front = next;
next = 0;
return front;
}
// attributes // attributes
Elision *next; SourceLocation propertyNameToken;
SourceLocation commaToken;
}; };
class QML_PARSER_EXPORT PropertyNameAndValueList: public Node class QML_PARSER_EXPORT PropertyNameAndValueList: public Node
@@ -666,6 +613,16 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return name->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{
if (next)
return next->lastSourceLocation();
return value->lastSourceLocation();
}
inline PropertyNameAndValueList *finish () inline PropertyNameAndValueList *finish ()
{ {
PropertyNameAndValueList *front = next; PropertyNameAndValueList *front = next;
@@ -681,17 +638,6 @@ public:
SourceLocation commaToken; SourceLocation commaToken;
}; };
class QML_PARSER_EXPORT PropertyName: public Node
{
public:
QMLJS_DECLARE_AST_NODE(PropertyName)
PropertyName() { kind = K; }
// attributes
SourceLocation propertyNameToken;
};
class QML_PARSER_EXPORT IdentifierPropertyName: public PropertyName class QML_PARSER_EXPORT IdentifierPropertyName: public PropertyName
{ {
public: public:
@@ -871,6 +817,16 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return expression->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{
if (next)
return next->lastSourceLocation();
return expression->lastSourceLocation();
}
inline ArgumentList *finish () inline ArgumentList *finish ()
{ {
ArgumentList *front = next; ArgumentList *front = next;
@@ -1229,6 +1185,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return statement->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : statement->lastSourceLocation(); }
inline StatementList *finish () inline StatementList *finish ()
{ {
StatementList *front = next; StatementList *front = next;
@@ -1275,6 +1237,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return identifierToken; }
virtual SourceLocation lastSourceLocation() const
{ return expression ? expression->lastSourceLocation() : identifierToken; }
// attributes // attributes
QStringRef name; QStringRef name;
ExpressionNode *expression; ExpressionNode *expression;
@@ -1301,6 +1269,16 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return declaration->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{
if (next)
return next->lastSourceLocation();
return declaration->lastSourceLocation();
}
inline VariableDeclarationList *finish (bool readOnly) inline VariableDeclarationList *finish (bool readOnly)
{ {
VariableDeclarationList *front = next; VariableDeclarationList *front = next;
@@ -1661,6 +1639,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return lbraceToken; }
virtual SourceLocation lastSourceLocation() const
{ return rbraceToken; }
// attributes // attributes
CaseClauses *clauses; CaseClauses *clauses;
DefaultClause *defaultClause; DefaultClause *defaultClause;
@@ -1694,6 +1678,30 @@ public:
SourceLocation rparenToken; SourceLocation rparenToken;
}; };
class QML_PARSER_EXPORT CaseClause: public Node
{
public:
QMLJS_DECLARE_AST_NODE(CaseClause)
CaseClause(ExpressionNode *e, StatementList *slist):
expression (e), statements (slist)
{ kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return caseToken; }
virtual SourceLocation lastSourceLocation() const
{ return statements ? statements->lastSourceLocation() : colonToken; }
// attributes
ExpressionNode *expression;
StatementList *statements;
SourceLocation caseToken;
SourceLocation colonToken;
};
class QML_PARSER_EXPORT CaseClauses: public Node class QML_PARSER_EXPORT CaseClauses: public Node
{ {
public: public:
@@ -1713,6 +1721,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return clause->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : clause->lastSourceLocation(); }
inline CaseClauses *finish () inline CaseClauses *finish ()
{ {
CaseClauses *front = next; CaseClauses *front = next;
@@ -1725,24 +1739,6 @@ public:
CaseClauses *next; CaseClauses *next;
}; };
class QML_PARSER_EXPORT CaseClause: public Node
{
public:
QMLJS_DECLARE_AST_NODE(CaseClause)
CaseClause(ExpressionNode *e, StatementList *slist):
expression (e), statements (slist)
{ kind = K; }
virtual void accept0(Visitor *visitor);
// attributes
ExpressionNode *expression;
StatementList *statements;
SourceLocation caseToken;
SourceLocation colonToken;
};
class QML_PARSER_EXPORT DefaultClause: public Node class QML_PARSER_EXPORT DefaultClause: public Node
{ {
public: public:
@@ -1754,6 +1750,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return defaultToken; }
virtual SourceLocation lastSourceLocation() const
{ return statements ? statements->lastSourceLocation() : colonToken; }
// attributes // attributes
StatementList *statements; StatementList *statements;
SourceLocation defaultToken; SourceLocation defaultToken;
@@ -1817,6 +1819,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return catchToken; }
virtual SourceLocation lastSourceLocation() const
{ return statement->lastSourceLocation(); }
// attributes // attributes
QStringRef name; QStringRef name;
Block *statement; Block *statement;
@@ -1837,6 +1845,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return finallyToken; }
virtual SourceLocation lastSourceLocation() const
{ return statement ? statement->lastSourceLocation() : finallyToken; }
// attributes // attributes
Block *statement; Block *statement;
SourceLocation finallyToken; SourceLocation finallyToken;
@@ -1941,6 +1955,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return identifierToken; }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : identifierToken; }
inline FormalParameterList *finish () inline FormalParameterList *finish ()
{ {
FormalParameterList *front = next; FormalParameterList *front = next;
@@ -1955,34 +1975,13 @@ public:
SourceLocation identifierToken; SourceLocation identifierToken;
}; };
class QML_PARSER_EXPORT FunctionBody: public Node class QML_PARSER_EXPORT SourceElement: public Node
{ {
public: public:
QMLJS_DECLARE_AST_NODE(FunctionBody) QMLJS_DECLARE_AST_NODE(SourceElement)
FunctionBody(SourceElements *elts): inline SourceElement()
elements (elts)
{ kind = K; } { kind = K; }
virtual void accept0(Visitor *visitor);
// attributes
SourceElements *elements;
};
class QML_PARSER_EXPORT Program: public Node
{
public:
QMLJS_DECLARE_AST_NODE(Program)
Program(SourceElements *elts):
elements (elts)
{ kind = K; }
virtual void accept0(Visitor *visitor);
// attributes
SourceElements *elements;
}; };
class QML_PARSER_EXPORT SourceElements: public Node class QML_PARSER_EXPORT SourceElements: public Node
@@ -2004,6 +2003,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return element->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : element->lastSourceLocation(); }
inline SourceElements *finish () inline SourceElements *finish ()
{ {
SourceElements *front = next; SourceElements *front = next;
@@ -2016,13 +2021,46 @@ public:
SourceElements *next; SourceElements *next;
}; };
class QML_PARSER_EXPORT SourceElement: public Node class QML_PARSER_EXPORT FunctionBody: public Node
{ {
public: public:
QMLJS_DECLARE_AST_NODE(SourceElement) QMLJS_DECLARE_AST_NODE(FunctionBody)
inline SourceElement() FunctionBody(SourceElements *elts):
elements (elts)
{ kind = K; } { kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return elements ? elements->firstSourceLocation() : SourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return elements ? elements->lastSourceLocation() : SourceLocation(); }
// attributes
SourceElements *elements;
};
class QML_PARSER_EXPORT Program: public Node
{
public:
QMLJS_DECLARE_AST_NODE(Program)
Program(SourceElements *elts):
elements (elts)
{ kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return elements ? elements->firstSourceLocation() : SourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return elements ? elements->lastSourceLocation() : SourceLocation(); }
// attributes
SourceElements *elements;
}; };
class QML_PARSER_EXPORT FunctionSourceElement: public SourceElement class QML_PARSER_EXPORT FunctionSourceElement: public SourceElement
@@ -2036,6 +2074,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return declaration->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return declaration->lastSourceLocation(); }
// attributes // attributes
FunctionDeclaration *declaration; FunctionDeclaration *declaration;
}; };
@@ -2051,6 +2095,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return statement->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return statement->lastSourceLocation(); }
// attributes // attributes
Statement *statement; Statement *statement;
}; };
@@ -2076,22 +2126,6 @@ public:
SourceLocation semicolonToken; SourceLocation semicolonToken;
}; };
class QML_PARSER_EXPORT UiProgram: public Node
{
public:
QMLJS_DECLARE_AST_NODE(UiProgram)
UiProgram(UiImportList *imports, UiObjectMemberList *members)
: imports(imports), members(members)
{ kind = K; }
virtual void accept0(Visitor *visitor);
// attributes
UiImportList *imports;
UiObjectMemberList *members;
};
class QML_PARSER_EXPORT UiQualifiedId: public Node class QML_PARSER_EXPORT UiQualifiedId: public Node
{ {
public: public:
@@ -2118,6 +2152,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return identifierToken; }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : identifierToken; }
// attributes // attributes
UiQualifiedId *next; UiQualifiedId *next;
QStringRef name; QStringRef name;
@@ -2137,14 +2177,14 @@ public:
: importUri(uri) : importUri(uri)
{ kind = K; } { kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const virtual SourceLocation firstSourceLocation() const
{ return importToken; } { return importToken; }
virtual SourceLocation lastSourceLocation() const virtual SourceLocation lastSourceLocation() const
{ return semicolonToken; } { return semicolonToken; }
virtual void accept0(Visitor *visitor);
// attributes // attributes
QStringRef fileName; QStringRef fileName;
UiQualifiedId *importUri; UiQualifiedId *importUri;
@@ -2175,21 +2215,6 @@ public:
previous->next = this; previous->next = this;
} }
virtual SourceLocation firstSourceLocation() const
{
if (import) return import->firstSourceLocation();
else return SourceLocation();
}
virtual SourceLocation lastSourceLocation() const
{
for (const UiImportList *it = this; it; it = it->next)
if (!it->next && it->import)
return it->import->lastSourceLocation();
return SourceLocation();
}
UiImportList *finish() UiImportList *finish()
{ {
UiImportList *head = next; UiImportList *head = next;
@@ -2199,6 +2224,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return import->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : import->lastSourceLocation(); }
// attributes // attributes
UiImport *import; UiImport *import;
UiImportList *next; UiImportList *next;
@@ -2232,6 +2263,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return member->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : member->lastSourceLocation(); }
UiObjectMemberList *finish() UiObjectMemberList *finish()
{ {
UiObjectMemberList *head = next; UiObjectMemberList *head = next;
@@ -2244,6 +2281,40 @@ public:
UiObjectMember *member; UiObjectMember *member;
}; };
class QML_PARSER_EXPORT UiProgram: public Node
{
public:
QMLJS_DECLARE_AST_NODE(UiProgram)
UiProgram(UiImportList *imports, UiObjectMemberList *members)
: imports(imports), members(members)
{ kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{
if (imports)
return imports->firstSourceLocation();
else if (members)
return members->firstSourceLocation();
return SourceLocation();
}
virtual SourceLocation lastSourceLocation() const
{
if (members)
return members->lastSourceLocation();
else if (imports)
return imports->lastSourceLocation();
return SourceLocation();
}
// attributes
UiImportList *imports;
UiObjectMemberList *members;
};
class QML_PARSER_EXPORT UiArrayMemberList: public Node class QML_PARSER_EXPORT UiArrayMemberList: public Node
{ {
public: public:
@@ -2263,6 +2334,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return member->firstSourceLocation(); }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : member->lastSourceLocation(); }
UiArrayMemberList *finish() UiArrayMemberList *finish()
{ {
UiArrayMemberList *head = next; UiArrayMemberList *head = next;
@@ -2287,6 +2364,12 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const
{ return lbraceToken; }
virtual SourceLocation lastSourceLocation() const
{ return rbraceToken; }
// attributes // attributes
SourceLocation lbraceToken; SourceLocation lbraceToken;
UiObjectMemberList *members; UiObjectMemberList *members;
@@ -2312,6 +2395,12 @@ public:
virtual void accept0(Visitor *) {} virtual void accept0(Visitor *) {}
virtual SourceLocation firstSourceLocation() const
{ return propertyTypeToken; }
virtual SourceLocation lastSourceLocation() const
{ return next ? next->lastSourceLocation() : identifierToken; }
inline UiParameterList *finish () inline UiParameterList *finish ()
{ {
UiParameterList *front = next; UiParameterList *front = next;
@@ -2324,6 +2413,7 @@ public:
QStringRef name; QStringRef name;
UiParameterList *next; UiParameterList *next;
SourceLocation commaToken; SourceLocation commaToken;
SourceLocation propertyTypeToken;
SourceLocation identifierToken; SourceLocation identifierToken;
}; };
@@ -2343,6 +2433,8 @@ public:
: type(Property), memberType(memberType), name(name), statement(statement), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0) : type(Property), memberType(memberType), name(name), statement(statement), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
{ kind = K; } { kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const virtual SourceLocation firstSourceLocation() const
{ {
if (defaultToken.isValid()) if (defaultToken.isValid())
@@ -2363,8 +2455,6 @@ public:
return semicolonToken; return semicolonToken;
} }
virtual void accept0(Visitor *visitor);
// attributes // attributes
enum { Signal, Property } type; enum { Signal, Property } type;
QStringRef typeModifier; QStringRef typeModifier;
@@ -2395,14 +2485,14 @@ public:
: qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer) : qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
{ kind = K; } { kind = K; }
virtual void accept0(Visitor *visitor);
virtual SourceLocation firstSourceLocation() const virtual SourceLocation firstSourceLocation() const
{ return qualifiedTypeNameId->identifierToken; } { return qualifiedTypeNameId->identifierToken; }
virtual SourceLocation lastSourceLocation() const virtual SourceLocation lastSourceLocation() const
{ return initializer->rbraceToken; } { return initializer->rbraceToken; }
virtual void accept0(Visitor *visitor);
// attributes // attributes
UiQualifiedId *qualifiedTypeNameId; UiQualifiedId *qualifiedTypeNameId;
UiObjectInitializer *initializer; UiObjectInitializer *initializer;
@@ -2437,9 +2527,9 @@ public:
return SourceLocation(); return SourceLocation();
} }
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
// attributes // attributes
Node *sourceElement; Node *sourceElement;
}; };
@@ -2471,6 +2561,7 @@ public:
virtual void accept0(Visitor *visitor); virtual void accept0(Visitor *visitor);
// attributes // attributes
UiQualifiedId *qualifiedId; UiQualifiedId *qualifiedId;
UiQualifiedId *qualifiedTypeNameId; UiQualifiedId *qualifiedTypeNameId;

View File

@@ -169,9 +169,6 @@ class UiObjectMember;
class UiObjectMemberList; class UiObjectMemberList;
class UiArrayMemberList; class UiArrayMemberList;
class UiQualifiedId; class UiQualifiedId;
class UiFormalList;
class UiFormal;
class UiSignature;
} } // namespace AST } } // namespace AST

View File

@@ -74,9 +74,6 @@ public:
virtual bool visit(UiObjectMemberList *) { return true; } virtual bool visit(UiObjectMemberList *) { return true; }
virtual bool visit(UiArrayMemberList *) { return true; } virtual bool visit(UiArrayMemberList *) { return true; }
virtual bool visit(UiQualifiedId *) { return true; } virtual bool visit(UiQualifiedId *) { return true; }
virtual bool visit(UiSignature *) { return true; }
virtual bool visit(UiFormalList *) { return true; }
virtual bool visit(UiFormal *) { return true; }
virtual void endVisit(UiProgram *) {} virtual void endVisit(UiProgram *) {}
virtual void endVisit(UiImportList *) {} virtual void endVisit(UiImportList *) {}
@@ -91,9 +88,6 @@ public:
virtual void endVisit(UiObjectMemberList *) {} virtual void endVisit(UiObjectMemberList *) {}
virtual void endVisit(UiArrayMemberList *) {} virtual void endVisit(UiArrayMemberList *) {}
virtual void endVisit(UiQualifiedId *) {} virtual void endVisit(UiQualifiedId *) {}
virtual void endVisit(UiSignature *) {}
virtual void endVisit(UiFormalList *) {}
virtual void endVisit(UiFormal *) {}
// QmlJS // QmlJS
virtual bool visit(ThisExpression *) { return true; } virtual bool visit(ThisExpression *) { return true; }

View File

@@ -49,7 +49,12 @@
#else // !QT_CREATOR #else // !QT_CREATOR
# define QT_QML_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE # define QT_QML_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
# define QT_QML_END_NAMESPACE QT_END_NAMESPACE # define QT_QML_END_NAMESPACE QT_END_NAMESPACE
# define QML_PARSER_EXPORT Q_AUTOTEST_EXPORT # if defined(QT_BUILD_QMLDEVTOOLS_LIB) || defined(QT_QMLDEVTOOLS_LIB)
// QmlDevTools is a static library
# define QML_PARSER_EXPORT
# else
# define QML_PARSER_EXPORT Q_AUTOTEST_EXPORT
# endif
#endif // QT_CREATOR #endif // QT_CREATOR
#endif // QMLJSGLOBAL_P_H #endif // QMLJSGLOBAL_P_H

File diff suppressed because it is too large Load Diff

View File

@@ -157,15 +157,15 @@ public:
T_XOR = 79, T_XOR = 79,
T_XOR_EQ = 80, T_XOR_EQ = 80,
ACCEPT_STATE = 640, ACCEPT_STATE = 644,
RULE_COUNT = 345, RULE_COUNT = 349,
STATE_COUNT = 641, STATE_COUNT = 645,
TERMINAL_COUNT = 102, TERMINAL_COUNT = 102,
NON_TERMINAL_COUNT = 107, NON_TERMINAL_COUNT = 107,
GOTO_INDEX_OFFSET = 641, GOTO_INDEX_OFFSET = 645,
GOTO_INFO_OFFSET = 2818, GOTO_INFO_OFFSET = 2807,
GOTO_CHECK_OFFSET = 2818 GOTO_CHECK_OFFSET = 2807
}; };
static const char *const spell []; static const char *const spell [];

View File

@@ -97,13 +97,18 @@ Lexer::Lexer(Engine *engine)
, _restrictedKeyword(false) , _restrictedKeyword(false)
, _terminator(false) , _terminator(false)
, _followsClosingBrace(false) , _followsClosingBrace(false)
, _delimited(false) , _delimited(true)
, _qmlMode(true) , _qmlMode(true)
{ {
if (engine) if (engine)
engine->setLexer(this); engine->setLexer(this);
} }
bool Lexer::qmlMode() const
{
return _qmlMode;
}
QString Lexer::code() const QString Lexer::code() const
{ {
return _code; return _code;
@@ -147,7 +152,7 @@ void Lexer::setCode(const QString &code, int lineno, bool qmlMode)
_restrictedKeyword = false; _restrictedKeyword = false;
_terminator = false; _terminator = false;
_followsClosingBrace = false; _followsClosingBrace = false;
_delimited = false; _delimited = true;
} }
void Lexer::scanChar() void Lexer::scanChar()
@@ -176,6 +181,7 @@ int Lexer::lex()
switch (_tokenKind) { switch (_tokenKind) {
case T_LBRACE: case T_LBRACE:
case T_SEMICOLON: case T_SEMICOLON:
case T_COLON:
_delimited = true; _delimited = true;
break; break;

View File

@@ -136,6 +136,8 @@ public:
public: public:
Lexer(Engine *engine); Lexer(Engine *engine);
bool qmlMode() const;
QString code() const; QString code() const;
void setCode(const QString &code, int lineno, bool qmlMode = true); void setCode(const QString &code, int lineno, bool qmlMode = true);
@@ -174,12 +176,13 @@ public:
BalancedParentheses BalancedParentheses
}; };
protected:
int classify(const QChar *s, int n, bool qmlMode);
private: private:
inline void scanChar(); inline void scanChar();
int scanToken(); int scanToken();
int classify(const QChar *s, int n, bool qmlMode);
bool isLineTerminator() const; bool isLineTerminator() const;
static bool isIdentLetter(QChar c); static bool isIdentLetter(QChar c);
static bool isDecimalDigit(ushort c); static bool isDecimalDigit(ushort c);

File diff suppressed because it is too large Load Diff

View File

@@ -108,9 +108,6 @@ public:
AST::UiObjectMemberList *UiObjectMemberList; AST::UiObjectMemberList *UiObjectMemberList;
AST::UiArrayMemberList *UiArrayMemberList; AST::UiArrayMemberList *UiArrayMemberList;
AST::UiQualifiedId *UiQualifiedId; AST::UiQualifiedId *UiQualifiedId;
AST::UiSignature *UiSignature;
AST::UiFormalList *UiFormalList;
AST::UiFormal *UiFormal;
}; };
public: public:
@@ -231,9 +228,9 @@ protected:
#define J_SCRIPT_REGEXPLITERAL_RULE1 76 #define J_SCRIPT_REGEXPLITERAL_RULE1 79
#define J_SCRIPT_REGEXPLITERAL_RULE2 77 #define J_SCRIPT_REGEXPLITERAL_RULE2 80
QT_QML_END_NAMESPACE QT_QML_END_NAMESPACE

View File

@@ -212,21 +212,6 @@ bool Evaluate::visit(AST::UiQualifiedId *ast)
return false; return false;
} }
bool Evaluate::visit(AST::UiSignature *)
{
return false;
}
bool Evaluate::visit(AST::UiFormalList *)
{
return false;
}
bool Evaluate::visit(AST::UiFormal *)
{
return false;
}
bool Evaluate::visit(AST::ThisExpression *) bool Evaluate::visit(AST::ThisExpression *)
{ {
return false; return false;

View File

@@ -79,9 +79,6 @@ protected:
virtual bool visit(AST::UiObjectMemberList *ast); virtual bool visit(AST::UiObjectMemberList *ast);
virtual bool visit(AST::UiArrayMemberList *ast); virtual bool visit(AST::UiArrayMemberList *ast);
virtual bool visit(AST::UiQualifiedId *ast); virtual bool visit(AST::UiQualifiedId *ast);
virtual bool visit(AST::UiSignature *ast);
virtual bool visit(AST::UiFormalList *ast);
virtual bool visit(AST::UiFormal *ast);
// QmlJS // QmlJS
virtual bool visit(AST::ThisExpression *ast); virtual bool visit(AST::ThisExpression *ast);

View File

@@ -238,9 +238,6 @@ protected: // visiting methods:
return false; return false;
} }
virtual bool visit(UiFormal *ast) { terminal(ast->identifierToken); terminal(ast->asToken); terminal(ast->aliasToken); return false; }
virtual bool visit(UiSignature *ast) { terminal(ast->lparenToken); nonterminal(ast->formals); terminal(ast->rparenToken); return false; }
virtual bool visit(StringLiteral *ast) { terminal(ast->literalToken); return false; } virtual bool visit(StringLiteral *ast) { terminal(ast->literalToken); return false; }
virtual bool visit(NumericLiteral *ast) { terminal(ast->literalToken); return false; } virtual bool visit(NumericLiteral *ast) { terminal(ast->literalToken); return false; }
virtual bool visit(TrueLiteral *ast) { terminal(ast->trueToken); return false; } virtual bool visit(TrueLiteral *ast) { terminal(ast->trueToken); return false; }