51 Compiler(
const QString &url, TypeResolver *resolver, Visitor *visitor,
52 QQmlJSLogger *logger);
58
59
60
61
65 return binding.bindingType() == QQmlSA::BindingType::Script;
70 TypeResolver *m_typeResolver =
nullptr;
71 Visitor *m_visitor =
nullptr;
72 QQmlJSLogger *m_logger =
nullptr;
74 QString m_urlMethodName;
75 uint m_currentVariableNumber = 0;
77 struct UniqueStringId;
80 QHash<UniqueStringId, TypeLocalData> m_uniques;
82 void compileUrlMethod(Method &urlMethod,
const QString &urlMethodName);
84 compileType(Type ¤t,
const QQmlJSScope::ConstPtr &type,
85 std::function<
void(Type &,
const QQmlJSScope::ConstPtr &)> compileElements);
86 void compileTypeElements(Type ¤t,
const QQmlJSScope::ConstPtr &type);
87 void compileEnum(Type ¤t,
const QQmlJSMetaEnum &e);
88 void compileMethod(Type ¤t,
const QQmlJSMetaMethod &m,
89 const QQmlJSScope::ConstPtr &owner);
90 void compileProperty(Type ¤t,
const QQmlJSMetaProperty &p,
91 const QQmlJSScope::ConstPtr &owner);
92 void compileAlias(Type ¤t,
const QQmlJSMetaProperty &alias,
93 const QQmlJSScope::ConstPtr &owner);
94 void compileExtraListMethods(Type ¤t,
const QQmlJSMetaProperty &p);
96 QString uniqueVariableName(
const QString &qmlName)
98 QString result = u"m_"_s + QString::number(++m_currentVariableNumber) + qmlName;
99 result.replace(u'.', u'_');
104
105
106
107
108
109
110
111
112
113
114 struct BindingAccessorData
116 QQmlJSScope::ConstPtr scope;
117 QString name = QStringLiteral(
"this");
118 QString propertyName = QString();
119 bool isValueType =
false;
122 QStringList unprocessedListBindings;
123 QQmlJSMetaProperty unprocessedListProperty;
125 void processLastListBindings(Type ¤t,
const QQmlJSScope::ConstPtr &type,
126 const BindingAccessorData &accessor);
128 void compileBinding(Type ¤t, QList<QQmlJSMetaPropertyBinding>::iterator bindingStart,
129 QList<QQmlJSMetaPropertyBinding>::iterator bindingEnd,
130 const QQmlJSScope::ConstPtr &type,
const BindingAccessorData &accessor);
132 void compileBindingByType(Type ¤t,
const QQmlJSMetaPropertyBinding &binding,
133 const QQmlJSScope::ConstPtr &type,
134 const BindingAccessorData &accessor);
136 void compileObjectBinding(Type ¤t,
const QQmlJSMetaPropertyBinding &binding,
137 const QQmlJSScope::ConstPtr &type,
138 const BindingAccessorData &accessor);
140 void compileValueSourceOrInterceptorBinding(Type ¤t,
141 const QQmlJSMetaPropertyBinding &binding,
142 const QQmlJSScope::ConstPtr &type,
143 const BindingAccessorData &accessor);
145 void compileAttachedPropertyBinding(Type ¤t,
const QQmlJSMetaPropertyBinding &binding,
146 const QQmlJSScope::ConstPtr &type,
147 const BindingAccessorData &accessor);
149 void compileGroupPropertyBinding(Type ¤t,
const QQmlJSMetaPropertyBinding &binding,
150 const QQmlJSScope::ConstPtr &type,
151 const BindingAccessorData &accessor);
153 void compileTranslationBinding(Type ¤t,
const QQmlJSMetaPropertyBinding &binding,
154 const QQmlJSScope::ConstPtr &type,
155 const BindingAccessorData &accessor);
158 void compileScriptBinding(Type ¤t,
const QQmlJSMetaPropertyBinding &binding,
159 const QString &bindingSymbolName,
const QQmlJSScope::ConstPtr &type,
160 const QString &propertyName,
161 const QQmlJSScope::ConstPtr &propertyType,
162 const BindingAccessorData &accessor);
164 void compilePropertyInitializer(Type ¤t,
const QQmlJSScope::ConstPtr &type);
167
168
169
170
171
172
173
174
175 struct UniqueStringId
178 UniqueStringId(
const Type &context,
const QString &property)
179 : unique(context.cppType + u"_" + property)
181 Q_ASSERT(!context.cppType.isEmpty());
182 Q_ASSERT(!property.isEmpty());
184 friend bool operator==(
const UniqueStringId &x,
const UniqueStringId &y)
186 return x.unique == y.unique;
188 friend bool operator!=(
const UniqueStringId &x,
const UniqueStringId &y)
192 friend size_t qHash(
const UniqueStringId &x, size_t seed = 0)
194 return qHash(x.unique, seed);
201 QString qmlListVariableName;
202 QString onAssignmentObjectName;
203 QString attachedVariableName;
206 QHash<QString, qsizetype> m_symbols;
207 QString newSymbol(
const QString &base);
209 bool hasErrors()
const {
return m_logger->hasErrors(); }
210 void recordError(
const QQmlJS::SourceLocation &location,
const QString &message,
211 QQmlJS::LoggerWarningId id = qmlCompiler)
215 m_logger->log(message, id, location);
217 void recordError(
const QV4::CompiledData::Location &location,
const QString &message,
218 QQmlJS::LoggerWarningId id = qmlCompiler)
220 recordError(QQmlJS::SourceLocation { 0, 0, location.line(), location.column() }, message,