3#ifndef QV4COMPILERCONTEXT_P_H
4#define QV4COMPILERCONTEXT_P_H
17#include <private/qqmljsast_p.h>
18#include <private/qv4compileddata_p.h>
19#include <QtCore/QStringList>
20#include <QtCore/QDateTime>
21#include <QtCore/QStack>
22#include <QtCore/QHash>
25#include <QtCore/QVarLengthArray>
79 return strings == other.strings && rawStrings == other.rawStrings;
92 {
return lhs.exportName < rhs.exportName; }
104 Module(
const QString &fileName,
const QString &finalUrl,
bool debugMode)
110 qDeleteAll(contextMap);
171 bool requiresTDZCheck(
const QQmlJS::SourceLocation &accessLocation,
bool accessAcrossContextBoundaries)
const;
225 template <
typename T>
231 for (
auto it : *
this) {
257 for (
auto it = begin(), eit = end(); it != eit; ++it) {
258 if (it->_key == key) {
277 return arguments.contains(name);
283 for (
int i = arguments.size() - 1; i >= 0; --i) {
284 const auto &arg = arguments.at(i);
285 if (arg.id == name) {
286 *isInjected = arg.isInjected();
295 MemberMap::const_iterator it =
members.find(name);
298 Q_ASSERT(it->index != -1 || !
parent);
305 MemberMap::const_iterator it =
members.find(name);
321 usedVariables.insert(name);
325 const QString &name,
MemberType contextType, QQmlJS::AST::VariableScope scope,
326 QQmlJS::AST::FunctionExpression *function =
nullptr,
328 bool isInjected =
false);
369 return contextType == ContextType::Block && name == u"%CaseBlock";
void insert(quint32 key, quint32 value)
int currentRegister() const
int newRegisterArray(int n)
QVector< Method > staticMethods
QVector< Method > methods
KeyValuePair(quint32 key, quint32 value)
bool isLexicallyScoped() const
QQmlJS::AST::FunctionExpression * function
bool requiresTDZCheck(const QQmlJS::SourceLocation &accessLocation, bool accessAcrossContextBoundaries) const
QQmlJS::SourceLocation declarationLocation
QQmlJS::AST::VariableScope scope
QQmlJS::SourceLocation declarationLocation
Context::MemberType memberType
QQmlJS::SourceLocation location
bool memberInfo(const QString &name, const Member **m) const
void emitBlockFooter(Compiler::Codegen *codegen)
QQmlJS::AST::FormalParameterList * formals
bool innerFunctionAccessesThis
bool hasArgument(const QString &name) const
void emitBlockHeader(Compiler::Codegen *codegen)
QQmlJS::AST::BoundNames arguments
QSet< QString > usedVariables
bool canHaveTailCalls() const
QVector< Context * > nestedContexts
bool innerFunctionAccessesNewTarget
int firstTemporalDeadZoneRegister
std::unique_ptr< SourceLocationTable > sourceLocationTable
QVector< ImportEntry > importEntries
UsesArgumentsObject usesArgumentsObject
QVector< ExportEntry > exportEntries
bool requiresExecutionContext
QMap< QString, Member > MemberMap
QQmlJS::AST::Type * returnType
Context(Context *parent, ContextType type)
int sizeOfRegisterTemporalDeadZone
ResolvedName resolveName(const QString &name, const QQmlJS::SourceLocation &accessLocation)
QString localNameForDefaultExport
bool requiresImplicitReturnValue() const
void setupFunctionIndices(Moth::BytecodeGenerator *bytecodeGenerator)
int registerCountInFunction
QQmlJS::SourceLocation lastBlockInitializerLocation
QVector< CompiledData::CodeOffsetToLineAndStatement > lineAndStatementNumberMapping
void addUsedVariable(const QString &name)
ControlFlow * controlFlow
int sizeOfLocalTemporalDeadZone
std::vector< unsigned > labelInfo
Member findMember(const QString &name) const
QStringList moduleRequests
bool addLocalVar(const QString &name, MemberType contextType, QQmlJS::AST::VariableScope scope, QQmlJS::AST::FunctionExpression *function=nullptr, const QQmlJS::SourceLocation &declarationLocation=QQmlJS::SourceLocation(), bool isInjected=false)
int findArgument(const QString &name, bool *isInjected) const
CompiledData::Location location
static bool lessThan(const ExportEntry &lhs, const ExportEntry &rhs)
CompiledData::Location location
QVector< ImportEntry > importEntries
Context * newContext(QQmlJS::AST::Node *node, Context *parent, ContextType compilationMode)
QVector< ExportEntry > localExportEntries
QHash< QQmlJS::AST::Node *, Context * > contextMap
QList< Context * > functions
QVector< TemplateObject > templateObjects
QDateTime sourceTimeStamp
Module(const QString &fileName, const QString &finalUrl, bool debugMode)
QStringList moduleRequests
QVector< ExportEntry > starExportEntries
QVector< ExportEntry > indirectExportEntries
QList< Context * > blocks
QVector< uint > rawStrings
bool operator==(const TemplateObject &other)