QmlJs: sync qmljs parser

The last version of the grammar contains some constructs that the code model
needs to know.

Task-number: QTCREATORBUG-17842
Change-Id: I6250f96431acc05b19f3fd1b6cc268a07485cf0f
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Benelli
2017-03-16 17:13:46 +01:00
parent aa87ee72ec
commit 61d30a20ce
24 changed files with 1411 additions and 1222 deletions

View File

@@ -1852,7 +1852,7 @@ ASTObjectValue::ASTObjectValue(UiQualifiedId *typeName,
for (UiObjectMemberList *it = m_initializer->members; it; it = it->next) {
UiObjectMember *member = it->member;
if (UiPublicMember *def = cast<UiPublicMember *>(member)) {
if (def->type == UiPublicMember::Property && !def->name.isEmpty() && !def->memberType.isEmpty()) {
if (def->type == UiPublicMember::Property && !def->name.isEmpty() && def->isValid()) {
ASTPropertyReference *ref = new ASTPropertyReference(def, m_doc, valueOwner);
m_properties.append(ref);
if (def->defaultToken.isValid())
@@ -2117,10 +2117,10 @@ bool ASTPropertyReference::getSourceLocation(QString *fileName, int *line, int *
const Value *ASTPropertyReference::value(ReferenceContext *referenceContext) const
{
if (m_ast->statement
&& (m_ast->memberType.isEmpty()
|| m_ast->memberType == QLatin1String("variant")
|| m_ast->memberType == QLatin1String("var")
|| m_ast->memberType == QLatin1String("alias"))) {
&& (!m_ast->isValid()
|| m_ast->memberTypeName() == QLatin1String("variant")
|| m_ast->memberTypeName() == QLatin1String("var")
|| m_ast->memberTypeName() == QLatin1String("alias"))) {
// Adjust the context for the current location - expensive!
// ### Improve efficiency by caching the 'use chain' constructed in ScopeBuilder.
@@ -2136,7 +2136,7 @@ const Value *ASTPropertyReference::value(ReferenceContext *referenceContext) con
return evaluator(m_ast->statement);
}
const QString memberType = m_ast->memberType.toString();
const QString memberType = m_ast->memberTypeName().toString();
const Value *builtin = valueOwner()->defaultValueForBuiltinType(memberType);
if (!builtin->asUndefinedValue())
@@ -2160,7 +2160,7 @@ ASTSignal::ASTSignal(UiPublicMember *ast, const Document *doc, ValueOwner *value
ObjectValue *v = valueOwner->newObject(/*prototype=*/0);
for (UiParameterList *it = ast->parameters; it; it = it->next) {
if (!it->name.isEmpty())
v->setMember(it->name.toString(), valueOwner->defaultValueForBuiltinType(it->type.toString()));
v->setMember(it->name.toString(), valueOwner->defaultValueForBuiltinType(it->type->name.toString()));
}
m_bodyScope = v;
}
@@ -2187,9 +2187,9 @@ const Value *ASTSignal::argument(int index) const
UiParameterList *param = m_ast->parameters;
for (int i = 0; param && i < index; ++i)
param = param->next;
if (!param || param->type.isEmpty())
if (!param || param->type->name.isEmpty())
return valueOwner()->unknownValue();
return valueOwner()->defaultValueForBuiltinType(param->type.toString());
return valueOwner()->defaultValueForBuiltinType(param->type->name.toString());
}
QString ASTSignal::argumentName(int index) const