3#ifndef QQMLIRBUILDER_P_H
4#define QQMLIRBUILDER_P_H
17#include <private/qqmljsast_p.h>
18#include <private/qqmljsengine_p.h>
19#include <private/qv4compiler_p.h>
20#include <private/qv4compileddata_p.h>
21#include <private/qqmljsmemorypool_p.h>
22#include <private/qqmljsfixedpoolarray_p.h>
23#include <private/qv4codegen_p.h>
24#include <private/qv4compiler_p.h>
26#include <QCoreApplication>
69 template <
typename Sortable,
typename Base, Sortable Base::*sortMember>
72 T *insertPos =
nullptr;
75 if (!(
it->*sortMember <= item->*sortMember))
84 if (!insertionPoint) {
86 }
else if (insertionPoint ==
last) {
89 item->next = insertionPoint->next;
90 insertionPoint->next =
item;
96 T *
const newNext =
item->next;
99 before->next = newNext;
171 operator T *() {
return ptr; }
172 operator const T *()
const {
return ptr; }
206 template<
typename IdGenerator>
221 return initType(
type, typeId, idGenerator(typeId), Flag::NoFlag);
224 return initType(
type, typeArgument, idGenerator(typeArgument), Flag::List);
227 return initType(
type, annotationString, idGenerator(annotationString), Flag::NoFlag);
340 void simplifyRequiredProperties();
391 friend struct ::QQmlIRLoader;
395 PoolList<Enum> *qmlEnums;
396 PoolList<Signal> *qmlSignals;
397 PoolList<Binding> *bindings;
398 PoolList<Function> *functions;
399 PoolList<InlineComponent> *inlineComponents;
400 PoolList<RequiredPropertyExtraData> *requiredPropertyExtraDatas;
469 QList<const QV4::CompiledData::Import *>
imports;
478 return std::any_of(pragmas.constBegin(), pragmas.constEnd(), [](
const Pragma *pragma) {
479 return pragma->type == Pragma::Singleton;
499 void pragmaLibrary()
override;
500 void importFile(
const QString &jsfile,
const QString &module,
int lineNumber,
int column)
override;
508 IRBuilder(
const QSet<QString> &illegalNames);
511 using QQmlJS::AST::Visitor::visit;
512 using QQmlJS::AST::Visitor::endVisit;
536 QStringLiteral(
"Maximum statement or expression depth exceeded"));
542 bool defineQMLObject(
549 Object *declarationsOverride =
nullptr)
552 return defineQMLObject(
554 { location.startLine, location.startColumn }, node->
initializer,
555 declarationsOverride);
578 int objectIndex,
bool isListItem =
false,
bool isOnAssignment =
false);
582 Object *bindingsTarget()
const;
593 template <
typename _Tp> _Tp *
New() {
return pool->New<_Tp>(); }
620 bool insideInlineComponent =
false;
628 typedef bool (
Binding::*BindingFilter)()
const;
629 char *writeBindings(
char *bindingPtr,
const Object *
o, BindingFilter
filter)
const;
637 bool storeSourceLocations =
false);
641 generateJSCodeForFunctionsAndBindings(
const QList<CompiledFunctionOrExpression> &functions);
663 typename RegisterMainString,
664 typename RegisterCommentString,
665 typename RegisterContextString,
666 typename FinalizeTranslationData>
668 RegisterMainString registerMainString,
669 RegisterCommentString registerCommentString,
670 RegisterContextString registerContextString,
671 FinalizeTranslationData finalizeTranslationData
676 translationData.
number = -1;
679 translationData.commentIndex = 0;
689 translation =
arg1->value;
694 translationData.stringIndex = registerMainString(translation);
702 translationData.commentIndex = registerCommentString(
arg2->value);
707 translationData.number = int(
arg3->value);
721 translationData.
number = -1;
724 translationData.commentIndex = 0;
738 translationData.stringIndex = registerMainString(
id);
744 translationData.number = int(
arg3->value);
771 translationData.
number = registerMainString(
str);
793 fakeTranslationData.
number = registerMainString(
str);
797 translationData.
number = -1;
798 translationData.commentIndex = 0;
805 = QQmlJS::AST::cast<QQmlJS::AST::StringLiteral *>(
args->expression)) {
806 translation =
arg1->value;
811 translationData.contextIndex = registerContextString(translation);
817 = QQmlJS::AST::cast<QQmlJS::AST::StringLiteral *>(
args->expression);
820 translationData.stringIndex = registerMainString(
arg2->value);
825 = QQmlJS::AST::cast<QQmlJS::AST::StringLiteral *>(
args->expression);
828 translationData.commentIndex = registerCommentString(
arg3->value);
833 = QQmlJS::AST::cast<QQmlJS::AST::NumericLiteral *>(
args->expression)) {
834 translationData.number = int(arg4->value);
UiQualifiedId * typeArgument
UiQualifiedId * qualifiedTypeNameId
UiObjectInitializer * initializer
SourceLocation firstSourceLocation() const override
constexpr QStringView mid(qsizetype pos, qsizetype n=-1) const noexcept
Returns the substring of length length starting at position start in this object.
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
QSet< QString >::iterator it
Combined button and popup list for selecting options.
std::function< QByteArray()> DependentTypesHasher
CodegenWarningInterface * defaultCodegenWarningInterface()
void tryGeneratingTranslationBindingBase(QStringView base, QQmlJS::AST::ArgumentList *args, RegisterMainString registerMainString, RegisterCommentString registerCommentString, RegisterContextString registerContextString, FinalizeTranslationData finalizeTranslationData)
#define Q_DECLARE_TR_FUNCTIONS(context)
static const QCssKnownValue properties[NumProperties - 1]
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLboolean GLboolean GLboolean b
GLenum GLenum GLsizei count
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLenum GLenum GLsizei void GLsizei void * column
GLuint GLuint GLuint GLuint arg1
GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg3
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
static QStringList aliases(const QQmlJSScope::ConstPtr &scope)
static QT_BEGIN_NAMESPACE const char * asString(QSSGRenderGraphObject::Type type)
QLatin1StringView QLatin1String
#define QStringLiteral(str)
static QT_BEGIN_NAMESPACE void init(QTextBoundaryFinder::BoundaryType type, QStringView str, QCharAttributes *attributes)
#define Q_QML_COMPILER_EXPORT
QT_BEGIN_NAMESPACE typedef uchar * output
QUrl url("example.com")
[constructor-url-reference]
QString stringForIndex(int index) const
int registerString(const QString &str)
CompiledFunctionOrExpression()
QQmlRefPointer< QV4::CompiledData::CompilationUnit > javaScriptCompilationUnit
Object * objectAt(int i) const
QQmlJS::AST::UiProgram * program
QVector< Object * > objects
QString stringAt(int index) const
QV4::Compiler::Module jsModule
QV4::Compiler::JSUnitGenerator jsGenerator
int registerString(const QString &str)
QList< Pragma * > pragmas
QList< const QV4::CompiledData::Import * > imports
QQmlJS::Engine jsParserEngine
QV4::CompiledData::Location location
PoolList< EnumValue >::Iterator enumValuesEnd() const
PoolList< EnumValue > * enumValues
int enumValueCount() const
PoolList< EnumValue >::Iterator enumValuesBegin() const
QV4::CompiledData::Location location
const Parameter * formalsBegin() const
QV4::CompiledData::ParameterType returnType
QQmlJS::FixedPoolArray< Parameter > formals
const Parameter * formalsEnd() const
QVector< Object * > _objects
QList< const QV4::CompiledData::Import * > _imports
QList< Pragma * > _pragmas
bool defineQMLObject(int *objectIndex, QQmlJS::AST::UiObjectDefinition *node, Object *declarationsOverride=nullptr)
void throwRecursionDepthError() override
QString stringAt(int index) const
QQmlJS::MemoryPool * pool
QV4::CompiledData::TypeReferenceMap _typeReferences
Property * _propertyDeclaration
QList< QQmlJS::DiagnosticMessage > errors
QV4::Compiler::JSUnitGenerator * jsGenerator
quint32 registerString(const QString &str) const
QSet< QString > inlineComponentsNames
QSet< QString > illegalNames
QStringView textRefAt(const QQmlJS::SourceLocation &loc) const
bool hasFlag(QV4::CompiledData::Object::Flag flag) const
int indexOfDefaultPropertyOrAlias
PoolList< Property >::Iterator propertiesEnd() const
PoolList< Property >::Iterator propertiesBegin() const
int requiredPropertyExtraDataCount() const
PoolList< Signal >::Iterator signalsEnd() const
int inlineComponentCount() const
const quint32 * namedObjectsInComponentTable() const
PoolList< RequiredPropertyExtraData >::Iterator requiredPropertyExtraDataEnd() const
PoolList< Binding >::Iterator bindingsEnd() const
PoolList< Function >::Iterator functionsBegin() const
QV4::CompiledData::Location location
bool defaultPropertyIsAlias
Alias * firstAlias() const
PoolList< Function >::Iterator functionsEnd() const
PoolList< Alias >::Iterator aliasesBegin() const
PoolList< RequiredPropertyExtraData >::Iterator requiredPropertyExtraDataBegin() const
PoolList< Enum >::Iterator enumsEnd() const
Binding * firstBinding() const
const Property * firstProperty() const
const Enum * firstEnum() const
Object * declarationsOverride
int functionCount() const
PoolList< Enum >::Iterator enumsBegin() const
PoolList< CompiledFunctionOrExpression > * functionsAndExpressions
Binding * unlinkBinding(Binding *before, Binding *binding)
const RequiredPropertyExtraData * requiredPropertyExtraData() const
bool hasAliasAsDefaultProperty() const
PoolList< InlineComponent >::Iterator inlineComponentsEnd() const
PoolList< Signal >::Iterator signalsBegin() const
const Function * firstFunction() const
quint32 inheritedTypeNameIndex
PoolList< Binding >::Iterator bindingsBegin() const
PoolList< InlineComponent >::Iterator inlineComponentsBegin() const
const InlineComponent * inlineComponent() const
QQmlJS::FixedPoolArray< int > runtimeFunctionIndices
const Signal * firstSignal() const
QV4::CompiledData::Location locationOfIdProperty
QQmlJS::FixedPoolArray< quint32 > namedObjectsInComponent
int propertyCount() const
int namedObjectsInComponentCount() const
PoolList< Alias >::Iterator aliasesEnd() const
static bool initType(QV4::CompiledData::ParameterType *type, const IdGenerator &idGenerator, const QQmlJS::AST::Type *annotation)
static QV4::CompiledData::CommonType stringToBuiltinType(const QString &typeName)
std::forward_iterator_tag iterator_category
bool operator!=(const Iterator &rhs) const
ptrdiff_t difference_type
const T * operator->() const
bool operator==(const Iterator &rhs) const
const T & operator*() const
T * findSortedInsertionPoint(T *item) const
T * unlink(T *before, T *item)
T * slowAt(int index) const
void insertAfter(T *insertionPoint, T *item)
NativeMethodBehaviorValue nativeMethodBehavior
ComponentBehaviorValue componentBehavior
ValueTypeBehaviorValues::Int valueTypeBehavior
ListPropertyAssignBehaviorValue
Q_DECLARE_FLAGS(ValueTypeBehaviorValues, ValueTypeBehaviorValue)
QV4::CompiledData::Location location
FunctionSignatureBehaviorValue functionSignatureBehavior
ListPropertyAssignBehaviorValue listPropertyAssignBehavior
NativeMethodBehaviorValue
FunctionSignatureBehaviorValue
@ FunctionSignatureBehavior
@ ListPropertyAssignBehavior
uint translationContextIndex
int parameterCount() const
PoolList< Parameter > * parameters
PoolList< Parameter >::Iterator parametersEnd() const
QStringList parameterStringList(const QV4::Compiler::StringTableGenerator *stringPool) const
PoolList< Parameter >::Iterator parametersBegin() const
QV4::CompiledData::Location location