diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2021-11-15 11:45:14 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2021-11-17 20:59:23 +0100 |
commit | f9bddfa12d233d9ef01299869f4d491d62a0828e (patch) | |
tree | 1ffdf0e7a013e43d849bf26ce454af1fd2c93b01 /src/qml/parser/qqmljsast_p.h | |
parent | 2248ee16e0f143221803e644d2c4c5ac47a72d63 (diff) |
Clean up property attributes (1/2)
Instead of directly accessing the attribute related members of
UiPublicMember, we access them via a function.
Moreover, we remove some redundancy: A property is
readonly/default/required if and only if the corresponding token is
valid. Thus we can drop the boolean members.
Change-Id: I22f15b2b037e857d2f9d3167cb761cba9516a135
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/qml/parser/qqmljsast_p.h')
-rw-r--r-- | src/qml/parser/qqmljsast_p.h | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/qml/parser/qqmljsast_p.h b/src/qml/parser/qqmljsast_p.h index ba646919dc..6e51a906bb 100644 --- a/src/qml/parser/qqmljsast_p.h +++ b/src/qml/parser/qqmljsast_p.h @@ -61,6 +61,10 @@ QT_BEGIN_NAMESPACE +namespace QQmlJS { + class Parser; +} + #define QQMLJS_DECLARE_AST_NODE(name) \ enum { K = Kind_##name }; @@ -3372,25 +3376,26 @@ public: UiPublicMember(UiQualifiedId *memberType, QStringView name) - : type(Property), memberType(memberType), name(name), statement(nullptr), binding(nullptr), isDefaultMember(false), isReadonlyMember(false), parameters(nullptr) + : type(Property), memberType(memberType), name(name), statement(nullptr), binding(nullptr), parameters(nullptr) { kind = K; } UiPublicMember(UiQualifiedId *memberType, QStringView name, Statement *statement) - : type(Property), memberType(memberType), name(name), statement(statement), binding(nullptr), isDefaultMember(false), isReadonlyMember(false), parameters(nullptr) + : type(Property), memberType(memberType), name(name), statement(statement), binding(nullptr), parameters(nullptr) { kind = K; } void accept0(BaseVisitor *visitor) override; SourceLocation firstSourceLocation() const override { - if (defaultToken.isValid()) - return defaultToken; - else if (readonlyToken.isValid()) - return readonlyToken; - else if (requiredToken.isValid()) - return requiredToken; + // ### FIXME: return the first(!) modifier token + if (defaultToken().isValid()) + return defaultToken(); + else if (readonlyToken().isValid()) + return readonlyToken(); + else if (requiredToken().isValid()) + return requiredToken(); return propertyToken; } @@ -3405,6 +3410,13 @@ public: return semicolonToken; } + SourceLocation defaultToken() const { return m_defaultToken; } + bool isDefaultMember() const { return defaultToken().isValid(); } + SourceLocation requiredToken() const { return m_requiredToken; } + bool isRequired() const { return requiredToken().isValid(); } + SourceLocation readonlyToken() const { return m_readonlyToken; } + bool isReadonly() const { return readonlyToken().isValid(); } + // attributes enum { Signal, Property } type; QStringView typeModifier; @@ -3412,20 +3424,19 @@ public: QStringView name; Statement *statement; // initialized with a JS expression UiObjectMember *binding; // initialized with a QML object or array. - bool isDefaultMember; - bool isReadonlyMember; - bool isRequired = false; UiParameterList *parameters; // TODO: merge source locations - SourceLocation defaultToken; - SourceLocation readonlyToken; SourceLocation propertyToken; - SourceLocation requiredToken; SourceLocation typeModifierToken; SourceLocation typeToken; SourceLocation identifierToken; SourceLocation colonToken; SourceLocation semicolonToken; +private: + friend class QQmlJS::Parser; + SourceLocation m_defaultToken; + SourceLocation m_readonlyToken; + SourceLocation m_requiredToken; }; class QML_PARSER_EXPORT UiObjectDefinition: public UiObjectMember |