17#include <private/qtqmlcompilerexports_p.h>
25#include <QtQml/private/qqmljssourcelocation_p.h>
27#include <QtCore/qfileinfo.h>
28#include <QtCore/qhash.h>
29#include <QtCore/qset.h>
30#include <QtCore/qstring.h>
31#include <QtCore/qversionnumber.h>
57 return a.m_iterator ==
b.m_iterator;
61 return a.m_iterator !=
b.m_iterator;
67 m_pointer = *m_iterator;
73 m_pointer = *m_iterator;
120 std::variant<InlineComponentNameType, RootDocumentNameType>;
129 InlineComponent = 0x40,
130 WrappedInImplicitComponent = 0x80,
131 HasBaseTypeError = 0x100,
132 HasExtensionNamespace = 0x200,
133 IsListProperty = 0x400,
145 bool isValid()
const;
157 bool m_isFile =
false;
158 bool m_isDependency =
false;
163 key.m_isFile,
key.m_isDependency);
168 return a.m_prefix ==
b.m_prefix &&
a.m_name ==
b.m_name &&
a.m_version ==
b.m_version
169 &&
a.m_isFile ==
b.m_isFile &&
a.m_isDependency ==
b.m_isDependency;
178 bool isValid()
const;
192 template<
typename Po
inter>
198 template<
typename Po
inter>
218 , m_arrayType(arrayType)
244 m_types.insert(std::move(
types.m_types));
250 m_types.insert(
types.m_types);
259 CompileContext m_context;
280 bool isConst =
false;
287 UnnamedPropertyTarget
300 return m_parentScope.toStrongRef();
306#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU < 1400 && Q_CC_GNU >= 1200
315 void insertJSIdentifier(
const QString &
name,
const JavaScriptIdentifier &identifier);
320 bool isIdInCurrentScope(
const QString &
id)
const;
359 switch (m_semantics) {
360 case AccessSemantics::Reference:
361 return m_internalName +
" *"_L1;
362 case AccessSemantics::Value:
363 case AccessSemantics::Sequence:
365 case AccessSemantics::None:
370 switch (
base->accessSemantics()) {
371 case AccessSemantics::Reference:
372 return m_internalName +
" *"_L1;
373 case AccessSemantics::Value:
374 case AccessSemantics::Sequence:
375 return m_internalName;
376 case AccessSemantics::None:
382 return m_internalName;
390 bool isComponentRootElement()
const;
407 void setBaseTypeName(
const QString &baseTypeName);
422 void setBaseTypeError(
const QString &baseTypeError);
434 void setPropertyLocallyRequired(
const QString &
name,
bool isRequired);
435 bool isPropertyRequired(
const QString &
name)
const;
436 bool isPropertyLocallyRequired(
const QString &
name)
const;
443 m_propertyBindings.insert(binding.
propertyName(), binding);
449 std::rotate(
r.first, std::next(
r.first),
r.second);
452 addOwnPropertyBindingInQmlIROrder(binding, specifier);
453 Q_ASSERT(m_propertyBindings.size() == m_propertyBindingsArray.size());
457 return m_propertyBindings;
463 return m_propertyBindings.equal_range(
name);
468 return m_propertyBindings.contains(
name);
471 bool hasPropertyBindings(
const QString &
name)
const;
474 struct AnnotatedScope;
477 bool isResolved()
const;
478 bool isFullyResolved()
const;
482 QString defaultPropertyName()
const;
486 QString parentPropertyName()
const;
492 QString attachedTypeName()
const;
509 if (!m_extensionType)
510 return { m_extensionType, NotExtension };
511 return { m_extensionType,
512 (m_flags & HasExtensionNamespace) ? ExtensionNamespace : ExtensionType };
523 m_runtimeFunctionIndices.emplaceBack(
index);
528 const int i =
static_cast<int>(
index);
530 Q_ASSERT(
i <
int(m_runtimeFunctionIndices.size()));
531 return m_runtimeFunctionIndices[
i];
536 bool isCreatable()
const;
539 bool isStructured()
const;
561 m_flags.setFlag(CustomParser,
v);;
573 bool isReferenceType()
const {
return m_semantics == QQmlJSScope::AccessSemantics::Reference; }
574 bool isValueType()
const {
return m_semantics == QQmlJSScope::AccessSemantics::Value; }
576 bool isIdInCurrentQmlScopes(
const QString &
id)
const;
577 bool isIdInCurrentJSScopes(
const QString &
id)
const;
578 bool isIdInjectedFromSignal(
const QString &
id)
const;
580 std::optional<JavaScriptIdentifier> findJSIdentifier(
const QString &
id)
const;
581 std::optional<JavaScriptIdentifier> JSIdentifier(
const QString &
id)
const;
589 m_inlineComponentName = inlineComponentName;
591 std::optional<QString> inlineComponentName()
const;
592 InlineComponentOrDocumentRootName enclosingInlineComponentName()
const;
596 return m_childScopes;
602 result.reserve(m_childScopes.size());
603 for (
const auto &
child : m_childScopes)
611 static void resolveNonEnumTypes(
614 static void resolveEnums(
617 static void resolveList(
619 static void resolveGeneralizedGroup(
626 m_sourceLocation = sourceLocation;
631 return m_sourceLocation;
637 if (!
base->isComposite())
646 base = {
base.scope->m_baseType.scope,
base.scope->m_baseType.revision }) {
647 if (!
base.scope->isComposite())
648 return base.revision;
662 return this == otherScope.
get()
670 if (scope->isSameType(
base))
691 bool isInCustomParserParent()
const;
702 : propertyName(
name), sourceLocationOffset(
offset)
733 static void updateChildScope(
738 BindingTargetSpecifier specifier);
765 ImportedScope<QQmlJSScope::WeakConstPtr> m_baseType;
767 ScopeType m_scopeType = ScopeType::QMLScope;
800 Flags m_flags = Creatable;
801 AccessSemantics m_semantics = AccessSemantics::Reference;
808 std::optional<QString> m_inlineComponentName;
819 m_filePath(filePath), m_importer(importer)
824 return !m_filePath.isEmpty() && m_importer !=
nullptr;
834 m_isSingleton = isSingleton;
838 void setModuleName(
const QString &moduleName) { m_moduleName = moduleName; }
851 bool m_isSingleton =
false;
static JNINativeMethod methods[]
QDeferredFactory(QQmlJSImporter *importer, const QString &filePath)
QDeferredFactory()=default
void setIsSingleton(bool isSingleton)
void setQualifiedName(const QString &qualifiedName)
QString internalName() const
QSharedPointer< T > toStrongRef() const
\inmodule QtCore \reentrant
QString baseName() const
Returns the base name of the file without the path.
QTypeRevision revision() const
QTypeRevision version() const
friend bool operator==(const Import &a, const Import &b)
bool isDependency() const
friend size_t qHash(const Import &key, size_t seed=0) noexcept
QTypeRevision version() const
Tracks the types for the QmlCompiler.
void setIsInlineComponent(bool v)
QQmlJSMetaProperty ownProperty(const QString &name) const
void setIsComposite(bool v)
bool isWrappedInImplicitComponent() const
QPair< QMultiHash< QString, QQmlJSMetaPropertyBinding >::const_iterator, QMultiHash< QString, QQmlJSMetaPropertyBinding >::const_iterator > ownPropertyBindings(const QString &name) const
bool hasOwnPropertyBindings(const QString &name) const
void setOwnDeferredNames(const QStringList &names)
void setExtensionTypeName(const QString &name)
void setAnnotations(const QList< QQmlJSAnnotation > &annotation)
void setInterfaceNames(const QStringList &interfaces)
QQmlJSScope & operator=(QQmlJSScope &&)=default
static QQmlJSScope::Ptr create()
QString extensionTypeName() const
bool isSameType(const QQmlJSScope::ConstPtr &otherScope) const
void setStructuredFlag(bool v)
const QList< QQmlJSAnnotation > & annotations() const
void setAccessSemantics(AccessSemantics semantics)
void setModuleName(const QString &moduleName)
std::monostate RootDocumentNameType
QQmlJSMetaEnum ownEnumeration(const QString &name) const
void setOwnParentPropertyName(const QString &name)
QQmlJSScope::Ptr listType()
QQmlJS::ConstPtrWrapperIterator childScopesEnd() const
QQmlJS::ConstPtrWrapperIterator childScopesBegin() const
QHash< QString, QQmlJSMetaEnum > ownEnumerations() const
QQmlJSScope::Ptr parentScope()
void setOwnAttachedTypeName(const QString &name)
AnnotatedScope extensionType() const
ScopeType scopeType() const
bool hasStructuredFlag() const
void setInternalName(const QString &internalName)
QDeferredWeakPointer< const QQmlJSScope > WeakConstPtr
QString internalName() const
bool hasCreatableFlag() const
void setHasCustomParser(bool v)
void setIsSingleton(bool v)
QList< QQmlJSMetaMethod > ownMethods(const QString &name) const
void setScopeType(ScopeType type)
bool isReferenceType() const
static QQmlJSScope::ConstPtr nonCompositeBaseType(const QQmlJSScope::ConstPtr &type)
void addOwnProperty(const QQmlJSMetaProperty &prop)
QQmlJSMetaMethod::AbsoluteFunctionIndex ownRuntimeFunctionIndex(QQmlJSMetaMethod::RelativeFunctionIndex index) const
QString moduleName() const
bool isInlineComponent() const
AccessSemantics accessSemantics() const
void setExtensionIsNamespace(bool v)
void setIsArrayScope(bool v)
QVector< QQmlJSScope::Ptr > childScopes()
QString ownDefaultPropertyName() const
bool hasCustomParser() const
QString qualifiedName() const
bool isListProperty() const
QStringList ownDeferredNames() const
void setQualifiedName(const QString &qualifiedName)
void setSourceLocation(const QQmlJS::SourceLocation &sourceLocation)
QQmlJSScope(QQmlJSScope &&)=default
void addOwnPropertyBinding(const QQmlJSMetaPropertyBinding &binding, BindingTargetSpecifier specifier=BindingTargetSpecifier::SimplePropertyTarget)
QQmlJSScope::ConstPtr listType() const
static QTypeRevision nonCompositeBaseRevision(const ImportedScope< QQmlJSScope::ConstPtr > &scope)
void setInlineComponentName(const QString &inlineComponentName)
QStringList ownImmediateNames() const
void setValueTypeName(const QString &name)
void setOwnImmediateNames(const QStringList &names)
QString augmentedInternalName() const
bool inherits(const QQmlJSScope::ConstPtr &base) const
QString valueTypeName() const
void addOwnEnumeration(const QQmlJSMetaEnum &enumeration)
bool isArrayScope() const
QStringList interfaceNames() const
QDeferredSharedPointer< const QQmlJSScope > ConstPtr
std::variant< InlineComponentNameType, RootDocumentNameType > InlineComponentOrDocumentRootName
A Hashable type to differentiate document roots from different inline components.
bool hasOwnEnumeration(const QString &name) const
void setIsWrappedInImplicitComponent(bool v)
bool hasOwnProperty(const QString &name) const
bool hasOwnInterface(const QString &name) const
QQmlJSScope::ConstPtr baseType() const
bool extensionIsNamespace() const
void addOwnMethod(const QQmlJSMetaMethod &method)
static QQmlJSScope::Ptr create(const QString &internalName)
QString ownParentPropertyName() const
QQmlJSScope::ConstPtr parentScope() const
void setCreatableFlag(bool v)
static constexpr qsizetype sizeofQQmlSAElement()
QHash< QString, QQmlJSMetaProperty > ownProperties() const
void addOwnRuntimeFunctionIndex(QQmlJSMetaMethod::AbsoluteFunctionIndex index)
void setOwnDefaultPropertyName(const QString &name)
QVector< QQmlJSScope::ConstPtr > childScopes() const
QQmlJSScope::ConstPtr ownAttachedType() const
QMultiHash< QString, QQmlJSMetaPropertyBinding > ownPropertyBindings() const
void setIsListProperty(bool v)
QQmlJS::SourceLocation sourceLocation() const
void setFilePath(const QString &file)
QMultiHash< QString, QQmlJSMetaMethod > ownMethods() const
QTypeRevision baseTypeRevision() const
QQmlJSScope::ConstPtr valueType() const
bool hasOwnMethod(const QString &name) const
QString ownAttachedTypeName() const
std::ptrdiff_t difference_type
ConstPtrWrapperIterator(QList< Ptr >::const_iterator iterator)
QDeferredSharedPointer< const QQmlJSScope > ConstPtr
friend bool operator==(const ConstPtrWrapperIterator &a, const ConstPtrWrapperIterator &b)
ConstPtrWrapperIterator & operator++()
friend bool operator!=(const ConstPtrWrapperIterator &a, const ConstPtrWrapperIterator &b)
std::forward_iterator_tag iterator_category
ConstPtrWrapperIterator operator++(int)
const_iterator constEnd() const noexcept
const_iterator constFind(const T &value) const
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
QSet< QString >::iterator it
Combined button and popup list for selecting options.
#define QT_WARNING_DISABLE_GCC(text)
std::pair< T1, T2 > QPair
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter * iter
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
static QDBusError::ErrorType get(const char *name)
#define Q_DECLARE_FLAGS(Flags, Enum)
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMulti(size_t seed, const T &... args) noexcept(std::conjunction_v< QtPrivate::QNothrowHashable< T >... >)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLsizei GLenum GLenum * types
GLenum GLuint GLintptr offset
static QString internalName(const QQmlJSScope::ConstPtr &scope)
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
QQmlJSScope::ConstPtr scope
ContextualTypes(CompileContext context, const QHash< QString, ImportedScope< ConstPtr > > types, const QQmlJSScope::ConstPtr &arrayType)
const QHash< QString, ImportedScope< ConstPtr > > & types() const
bool hasType(const QString &name) const
ConstPtr arrayType() const
void addTypes(const ContextualTypes &types)
void addTypes(ContextualTypes &&types)
void clearType(const QString &name)
void setType(const QString &name, const ImportedScope< ConstPtr > &type)
ImportedScope< ConstPtr > type(const QString &name) const
bool isNullType(const QString &name) const
CompileContext context() const
QList< QQmlJSScope::Export > exports
std::optional< QString > typeName
QQmlJS::SourceLocation location
QmlIRCompatibilityBindingData(const QString &name, quint32 offset)
QmlIRCompatibilityBindingData()=default