Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
|
#include <qqmljstypepropagator_p.h>
QQmlJSTypePropagator is the initial pass that performs the type inference and annotates every register in use at any instruction with the possible types it may hold. This includes information on how and in what scope the values are retrieved. These annotations may be used by further compile passes for refinement or code generation.
Definition at line 27 of file qqmljstypepropagator_p.h.
QQmlJSTypePropagator::QQmlJSTypePropagator | ( | const QV4::Compiler::JSUnitGenerator * | unitGenerator, |
const QQmlJSTypeResolver * | typeResolver, | ||
QQmlJSLogger * | logger, | ||
BasicBlocks | basicBlocks = {}, | ||
InstructionAnnotations | annotations = {}, | ||
QQmlSA::PassManager * | passManager = nullptr ) |
Definition at line 29 of file qqmljstypepropagator.cpp.
bool QQmlJSTypePropagator::checkForEnumProblems | ( | const QQmlJSRegisterContent & | base, |
const QString & | propertyName ) |
Definition at line 695 of file qqmljstypepropagator.cpp.
References base, QQmlJSUtils::didYouMean(), error, QQmlJSLogger::log(), QQmlJSCompilePass::m_logger, QQmlJSRegisterContent::MetaType, qmlMissingEnumEntry, qmlRestrictedType, and QQmlJSCompilePass::setError().
Referenced by generate_CallProperty().
|
overridevirtual |
Implements QV4::Moth::ByteCodeHandler.
Definition at line 2715 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::Accumulator, QQmlJSCompilePass::State::changedRegister(), QQmlJSCompilePass::State::changedRegisterIndex(), QQmlJSCompilePass::State::clearChangedRegister(), QV4::Moth::ByteCodeHandler::currentInstructionOffset(), QQmlJSCompilePass::State::hasSideEffects(), QQmlJSCompilePass::InvalidRegister, QQmlJS::DiagnosticMessage::isError(), QQmlJSCompilePass::State::isRegisterAffectedBySideEffects(), QQmlJSCompilePass::State::isRename(), QQmlJS::DiagnosticMessage::isValid(), QQmlJSRegisterContent::isValid(), QQmlJSCompilePass::m_error, Q_ASSERT, QQmlJSCompilePass::State::registers, QQmlJSCompilePass::State::renameSourceRegisterIndex(), QQmlJSCompilePass::setError(), QQmlJSCompilePass::State::setHasSideEffects(), QQmlJSCompilePass::State::setIsRename(), QQmlJSCompilePass::State::setReadRegisters(), and QQmlJSCompilePass::State::takeReadRegisters().
|
override |
Definition at line 2543 of file qqmljstypepropagator.cpp.
References QSOperator::Add.
|
override |
Definition at line 2421 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), arg, QQmlJSTypeResolver::canAddressValueTypes(), QQmlJSTypeResolver::cast(), QQmlJSTypeResolver::containedType(), QQmlJSRegisterContent::descriptiveName(), QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::inherits(), QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::merge(), QQmlJSTypeResolver::metaObjectType(), QQmlJSRegisterContent::MetaType, output, QQmlJSRegisterContent::ScopeAttached, QQmlJSRegisterContent::scopeType(), QQmlJSCompilePass::setError(), QQmlJSRegisterContent::variant(), and QQmlJSTypeResolver::voidType().
|
override |
Definition at line 2548 of file qqmljstypepropagator.cpp.
References QSOperator::BitAnd.
|
override |
Definition at line 2578 of file qqmljstypepropagator.cpp.
References QSOperator::BitAnd, and Q_UNUSED.
|
override |
Definition at line 2553 of file qqmljstypepropagator.cpp.
References QSOperator::BitOr.
|
override |
Definition at line 2584 of file qqmljstypepropagator.cpp.
References QSOperator::BitOr, and Q_UNUSED.
|
override |
Definition at line 2558 of file qqmljstypepropagator.cpp.
References QSOperator::BitXor.
|
override |
Definition at line 2590 of file qqmljstypepropagator.cpp.
References QSOperator::BitXor, and Q_UNUSED.
|
override |
Definition at line 1821 of file qqmljstypepropagator.cpp.
References QV4::Compiler::JSUnitGenerator::lookupName(), and QQmlJSCompilePass::m_jsUnitGenerator.
|
override |
Definition at line 1783 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::m_jsUnitGenerator, and QV4::Compiler::JSUnitGenerator::stringForIndex().
|
override |
Definition at line 1788 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1193 of file qqmljstypepropagator.cpp.
References QQmlJSScope::accessSemantics(), arg, QQmlJSTypeResolver::arrayPrototype(), base, checkForEnumProblems(), QQmlJSTypeResolver::consoleObject(), QQmlJSTypeResolver::containedType(), QQmlJSTypeResolver::containedTypeName(), QFlatMap< Key, T, Compare, KeyContainer, MappedContainer >::contains(), QQmlJSUtils::didYouMean(), QQmlJSTypeResolver::equals(), QQmlJSTypeResolver::globalType(), i, isLoggingMethod(), QQmlJSRegisterContent::JavaScriptReturnValue, QQmlJSTypeResolver::jsValueType(), QQmlJSLogger::log(), QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_logger, QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::mathObject(), QQmlJSTypeResolver::memberType(), QQmlJSScope::methods(), Q_ASSERT, qmlMissingProperty, QQmlJSTypeResolver::registerContains(), QQmlJSCompilePass::State::registers, QQmlJSTypeResolver::returnType(), QQmlJSCompilePass::setError(), QQmlJSCompilePass::State::setHasSideEffects(), QV4::Compiler::JSUnitGenerator::stringForIndex(), QQmlJSTypeResolver::stringType(), and QQmlJSTypeResolver::varType().
Referenced by generate_CallPropertyLookup().
|
override |
Definition at line 1777 of file qqmljstypepropagator.cpp.
References base, generate_CallProperty(), QV4::Compiler::JSUnitGenerator::lookupNameIndex(), and QQmlJSCompilePass::m_jsUnitGenerator.
|
override |
Definition at line 1826 of file qqmljstypepropagator.cpp.
References QV4::Compiler::JSUnitGenerator::lookupName(), QQmlJSCompilePass::m_function, QQmlJSCompilePass::m_jsUnitGenerator, and QQmlJSCompilePass::Function::qmlScope.
|
override |
Definition at line 1094 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1103 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1833 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2240 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2014 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2355 of file qqmljstypepropagator.cpp.
References QSOperator::Equal.
|
override |
Definition at line 2337 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), QSOperator::Equal, QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::int32Type(), QQmlJSCompilePass::m_typeResolver, Q_UNUSED, and QQmlJSTypeResolver::typeForBinaryOperation().
|
override |
Definition at line 2325 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::boolType(), QQmlJSTypeResolver::globalType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 2373 of file qqmljstypepropagator.cpp.
References QSOperator::Ge.
|
override |
Definition at line 2367 of file qqmljstypepropagator.cpp.
References QSOperator::Gt.
|
override |
Definition at line 2403 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QSOperator::In, QQmlJSTypeResolver::jsValueType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 2415 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2385 of file qqmljstypepropagator.cpp.
References QSOperator::Le.
|
override |
Definition at line 2379 of file qqmljstypepropagator.cpp.
References QSOperator::Lt.
|
override |
Definition at line 2361 of file qqmljstypepropagator.cpp.
References QSOperator::NotEqual.
|
override |
Definition at line 2346 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::int32Type(), QQmlJSCompilePass::m_typeResolver, QSOperator::NotEqual, Q_UNUSED, and QQmlJSTypeResolver::typeForBinaryOperation().
|
override |
Definition at line 2331 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::boolType(), QQmlJSTypeResolver::globalType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 2391 of file qqmljstypepropagator.cpp.
References QSOperator::StrictEqual.
|
override |
Definition at line 2397 of file qqmljstypepropagator.cpp.
References QSOperator::StrictNotEqual.
|
override |
Definition at line 1896 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::jsGlobalObject(), QQmlJSTypeResolver::jsValueType(), QQmlJSCompilePass::m_typeResolver, QQmlJSScope::methods(), QQmlJSCompilePass::State::registers, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1920 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2180 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::qObjectType(), and QQmlJSCompilePass::This.
|
override |
Definition at line 1988 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2156 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2164 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 2174 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2169 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 1950 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), QQmlJSTypeResolver::emptyType(), QQmlJSTypeResolver::equals(), QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::registerContains(), QQmlJSCompilePass::setError(), and QV4::Compiler::JSUnitGenerator::stringForIndex().
|
override |
Definition at line 132 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 2106 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2516 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::Decrement.
|
override |
Definition at line 2113 of file qqmljstypepropagator.cpp.
References args, QQmlJSTypeResolver::globalType(), i, QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::tracked(), QQmlJSTypeResolver::variantListType(), and QQmlJSTypeResolver::varType().
|
override |
Definition at line 2124 of file qqmljstypepropagator.cpp.
References args, QQmlJSTypeResolver::globalType(), i, QV4::Compiler::JSUnitGenerator::jsClassSize(), QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_typeResolver, Q_ASSERT, QQmlJSTypeResolver::stringType(), QQmlJSTypeResolver::tracked(), QQmlJSTypeResolver::variantMapType(), and QQmlJSTypeResolver::varType().
|
override |
Definition at line 2089 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2082 of file qqmljstypepropagator.cpp.
References base, INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2077 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 2624 of file qqmljstypepropagator.cpp.
References QSOperator::Div.
|
override |
Definition at line 2614 of file qqmljstypepropagator.cpp.
References QSOperator::Exp.
|
override |
Definition at line 1977 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 2038 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), QV4::Moth::ByteCodeHandler::currentInstructionOffset(), QQmlJSTypeResolver::globalType(), QQmlJSRegisterContent::isList(), QQmlJSTypeResolver::iteratorPointer(), QQmlJSTypeResolver::jsValueType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 981 of file qqmljstypepropagator.cpp.
References QV4::Compiler::JSUnitGenerator::lookupName(), and QQmlJSCompilePass::m_jsUnitGenerator.
|
override |
Definition at line 986 of file qqmljstypepropagator.cpp.
References QV4::Compiler::JSUnitGenerator::lookupName(), QQmlJSCompilePass::m_jsUnitGenerator, and Q_UNUSED.
|
override |
Definition at line 2650 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2511 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::Increment.
|
override |
Definition at line 2639 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::emptyType(), QQmlJSTypeResolver::globalType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 2072 of file qqmljstypepropagator.cpp.
|
override |
Definition at line 2053 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::merge(), QQmlJSCompilePass::State::setHasSideEffects(), QQmlJSTypeResolver::valueType(), and QQmlJSTypeResolver::voidType().
|
override |
Definition at line 2064 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2195 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2215 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), arg, QQmlJSTypeResolver::boolType(), QQmlJSRegisterContent::descriptiveName(), QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, QQmlJSCompilePass::setError(), and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2228 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2234 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2202 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), arg, QQmlJSTypeResolver::boolType(), QQmlJSRegisterContent::descriptiveName(), QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, QQmlJSCompilePass::setError(), and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 252 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::functionType(), QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, and Q_UNUSED.
|
override |
Definition at line 137 of file qqmljstypepropagator.cpp.
References QV4::Compiler::JSUnitGenerator::constant(), QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_typeResolver, and QQmlJSTypeResolver::typeForConst().
|
override |
Definition at line 725 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), base, QQmlJSTypeResolver::containedType(), QQmlJSTypeResolver::extractNonVoidFromOptionalType(), QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::isNumeric(), QQmlJSTypeResolver::isSignedInteger(), QQmlJSTypeResolver::isUnsignedInteger(), QQmlJSTypeResolver::jsValueType(), QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::merge(), QQmlJSTypeResolver::realType(), QQmlJSTypeResolver::registerContains(), QQmlJSCompilePass::State::registers, QQmlJSTypeResolver::sizeType(), QQmlJSTypeResolver::stringType(), QQmlJSTypeResolver::uint32Type(), QQmlJSTypeResolver::valueType(), and QQmlJSTypeResolver::voidType().
|
override |
Definition at line 153 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::boolType(), QQmlJSTypeResolver::globalType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 268 of file qqmljstypepropagator.cpp.
References generate_LoadName(), QV4::Compiler::JSUnitGenerator::lookupNameIndex(), and QQmlJSCompilePass::m_jsUnitGenerator.
|
override |
Definition at line 206 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 168 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::int32Type(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 212 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::jsValueType(), QQmlJSCompilePass::m_typeResolver, and Q_UNUSED.
|
override |
Definition at line 260 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorOut(), QQmlJSRegisterContent::isValid(), QQmlJSCompilePass::m_function, QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_typeResolver, QQmlJSCompilePass::Function::qmlScope, QQmlJSTypeResolver::scopedType(), QQmlJSCompilePass::setError(), and QV4::Compiler::JSUnitGenerator::stringForIndex().
Referenced by generate_LoadGlobalLookup().
|
override |
Definition at line 158 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, and QQmlJSTypeResolver::nullType().
|
override |
Definition at line 974 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 969 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::m_jsUnitGenerator, and QV4::Compiler::JSUnitGenerator::stringForIndex().
|
override |
Definition at line 562 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorOut(), QQmlJSTypeResolver::containedType(), QQmlJSRegisterContent::create(), QQmlJSTypeResolver::genericType(), QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::isPrefix(), QQmlJSRegisterContent::isValid(), QV4::Compiler::JSUnitGenerator::lookupNameIndex(), QQmlJSCompilePass::m_function, QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_typeResolver, QQmlJSRegisterContent::ObjectById, QQmlJSCompilePass::Function::qmlScope, QQmlJSRegisterContent::ScopeAttached, QQmlJSTypeResolver::scopedType(), QQmlJSRegisterContent::ScopeModulePrefix, QQmlJSCompilePass::setError(), QQmlJSRegisterContent::storedType(), QV4::Compiler::JSUnitGenerator::stringForIndex(), QQmlJSRegisterContent::variant(), and QQmlJSTypeResolver::voidType().
|
override |
Definition at line 179 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::Accumulator, QQmlJSCompilePass::State::addReadRegister(), QQmlJSCompilePass::State::setIsRename(), and QQmlJSCompilePass::State::setRegister().
|
override |
Definition at line 238 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, Q_UNUSED, and QQmlJSTypeResolver::stringType().
|
override |
Definition at line 224 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2185 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 1067 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, property, and Q_UNUSED.
|
override |
Definition at line 148 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::boolType(), QQmlJSTypeResolver::globalType(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 163 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, and QQmlJSTypeResolver::voidType().
|
override |
Definition at line 143 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::int32Type(), and QQmlJSCompilePass::m_typeResolver.
|
override |
Definition at line 2629 of file qqmljstypepropagator.cpp.
References QSOperator::Mod.
|
override |
Definition at line 173 of file qqmljstypepropagator.cpp.
References QV4::Compiler::JSUnitGenerator::constant(), QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_typeResolver, and QQmlJSTypeResolver::typeForConst().
|
override |
Definition at line 196 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::addReadRegister(), QQmlJSCompilePass::InvalidRegister, Q_ASSERT, QQmlJSCompilePass::State::setIsRename(), and QQmlJSCompilePass::State::setRegister().
|
override |
Definition at line 245 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 2619 of file qqmljstypepropagator.cpp.
References QSOperator::Mul.
|
override |
Definition at line 2033 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2027 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2007 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1993 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED_IGNORE, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2020 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2001 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1089 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 87 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), arg, QQmlJSTypeResolver::canHoldUndefined(), QQmlJSTypeResolver::containedTypeName(), QQmlJSRegisterContent::descriptiveName(), QQmlJSCompilePass::Function::isFullyTyped, QQmlJSCompilePass::Function::isSignalHandler, QQmlJSRegisterContent::isValid(), QQmlJSLogger::log(), QQmlJSCompilePass::m_function, QQmlJSCompilePass::m_logger, QQmlJSCompilePass::m_typeResolver, qmlIncompatibleType, QQmlJSTypeResolver::registerContains(), QQmlJSCompilePass::setError(), QQmlJSCompilePass::State::setHasSideEffects(), and QQmlJSTypeResolver::voidType().
|
override |
Definition at line 1982 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1062 of file qqmljstypepropagator.cpp.
References base, generate_StoreProperty(), QV4::Compiler::JSUnitGenerator::lookupNameIndex(), and QQmlJSCompilePass::m_jsUnitGenerator.
|
override |
Definition at line 1929 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED_IGNORE, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2573 of file qqmljstypepropagator.cpp.
References QSOperator::LShift.
|
override |
Definition at line 2608 of file qqmljstypepropagator.cpp.
References QSOperator::LShift, and Q_UNUSED.
|
override |
Definition at line 2568 of file qqmljstypepropagator.cpp.
References QSOperator::RShift.
|
override |
Definition at line 2602 of file qqmljstypepropagator.cpp.
References Q_UNUSED, and QSOperator::RShift.
|
override |
Definition at line 764 of file qqmljstypepropagator.cpp.
References base, QQmlJSTypeResolver::containedType(), QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::int32Type(), QQmlJSTypeResolver::isNumeric(), QQmlJSTypeResolver::isSignedInteger(), QQmlJSTypeResolver::isUnsignedInteger(), QQmlJSTypeResolver::jsValueType(), QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::realType(), QQmlJSCompilePass::State::registers, QQmlJSCompilePass::State::setHasSideEffects(), QQmlJSTypeResolver::uint32Type(), and QQmlJSTypeResolver::valueType().
|
override |
Definition at line 218 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
void QQmlJSTypePropagator::generate_StoreNameCommon | ( | int | nameIndex | ) |
As far as type propagation is involved, StoreNameSloppy and StoreNameStrict are completely the same StoreNameStrict is rejecting a few writes (where the variable was not defined before) that would work in a sloppy context in JS, but the compiler would always reject this. And for type propagation, this does not matter at all. nameIndex is the index in the string table corresponding to the name which we are storing
Definition at line 632 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), arg, QQmlJSTypeResolver::canHoldUndefined(), QQmlJSTypeResolver::globalType(), QQmlJSLogger::log(), QQmlJSCompilePass::m_function, QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_logger, QQmlJSCompilePass::m_typeResolver, qmlReadOnlyProperty, QQmlJSCompilePass::Function::qmlScope, QQmlJSTypeResolver::registerIsStoredIn(), QQmlJSTypeResolver::scopedType(), QQmlJSCompilePass::setError(), QQmlJSCompilePass::State::setHasSideEffects(), QV4::Compiler::JSUnitGenerator::stringForIndex(), QQmlJSTypeResolver::varType(), and QQmlJSTypeResolver::voidType().
Referenced by generate_StoreNameSloppy(), and generate_StoreNameStrict().
|
override |
Definition at line 685 of file qqmljstypepropagator.cpp.
References generate_StoreNameCommon().
|
override |
Definition at line 690 of file qqmljstypepropagator.cpp.
References generate_StoreNameCommon().
|
override |
Definition at line 1008 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), arg, base, QQmlJSTypeResolver::canHoldUndefined(), QQmlJSRegisterContent::descriptiveName(), QQmlJSLogger::log(), QQmlJSCompilePass::m_jsUnitGenerator, QQmlJSCompilePass::m_logger, QQmlJSCompilePass::m_typeResolver, QQmlJSTypeResolver::memberType(), property, qmlReadOnlyProperty, QQmlJSCompilePass::State::registers, QQmlJSCompilePass::setError(), QQmlJSCompilePass::State::setHasSideEffects(), QV4::Compiler::JSUnitGenerator::stringForIndex(), and QQmlJSTypeResolver::varType().
Referenced by generate_SetLookup().
|
override |
Definition at line 188 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::State::accumulatorIn(), QQmlJSCompilePass::State::addReadAccumulator(), QQmlJSCompilePass::State::setIsRename(), and QQmlJSCompilePass::State::setRegister().
|
override |
Definition at line 231 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, and Q_UNUSED.
|
override |
Definition at line 1073 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, property, and Q_UNUSED.
|
override |
Definition at line 2634 of file qqmljstypepropagator.cpp.
References QSOperator::Sub.
|
override |
Definition at line 1843 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1970 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSTypeResolver::jsValueType(), QQmlJSCompilePass::m_typeResolver, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2645 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 2190 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 2095 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, Q_UNUSED, and QQmlJSTypeResolver::stringType().
|
override |
Definition at line 2101 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::globalType(), QQmlJSCompilePass::m_typeResolver, and QQmlJSTypeResolver::stringType().
|
override |
Definition at line 2506 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::Complement.
|
override |
Definition at line 2501 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::Minus.
|
override |
Definition at line 2491 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::Not.
|
override |
Definition at line 1936 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED_IGNORE, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 1942 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED, Q_UNUSED, and QQmlJSCompilePass::State::setHasSideEffects().
|
override |
Definition at line 2496 of file qqmljstypepropagator.cpp.
References QQmlJSTypeResolver::Plus.
|
override |
Definition at line 2563 of file qqmljstypepropagator.cpp.
References QSOperator::URShift.
|
override |
Definition at line 2596 of file qqmljstypepropagator.cpp.
References Q_UNUSED, and QSOperator::URShift.
|
override |
Definition at line 1079 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
|
override |
Definition at line 1084 of file qqmljstypepropagator.cpp.
References INSTR_PROLOGUE_NOT_IMPLEMENTED.
QQmlJSCompilePass::BlocksAndAnnotations QQmlJSTypePropagator::run | ( | const Function * | m_function, |
QQmlJS::DiagnosticMessage * | error ) |
Definition at line 39 of file qqmljstypepropagator.cpp.
References QQmlJSCompilePass::Function::code, QByteArray::constData(), decode, error, function, QQmlJSCompilePass::initialState(), QQmlJSCompilePass::m_annotations, QQmlJSCompilePass::m_basicBlocks, QQmlJSCompilePass::m_error, QQmlJSCompilePass::m_function, QV4::Moth::ByteCodeHandler::reset(), QQmlJSCompilePass::Function::returnType, and QByteArray::size().
|
overridevirtual |
Implements QV4::Moth::ByteCodeHandler.
Definition at line 2657 of file qqmljstypepropagator.cpp.
References arg, QFlatMap< Key, T, Compare, KeyContainer, MappedContainer >::clear(), QMultiHash< Key, T >::constEnd(), QMultiHash< Key, T >::constFind(), QSet< T >::contains(), QV4::Moth::ByteCodeHandler::currentInstructionOffset(), QFlatMap< Key, T, Compare, KeyContainer, MappedContainer >::end(), QFlatMap< Key, T, Compare, KeyContainer, MappedContainer >::find(), QQmlJSCompilePass::instructionManipulatesContext(), QQmlJS::DiagnosticMessage::isValid(), QQmlJSCompilePass::m_error, QV4::Moth::ByteCodeHandler::ProcessInstruction, QQmlJSCompilePass::State::registers, QQmlJSCompilePass::setError(), and QV4::Moth::ByteCodeHandler::SkipInstruction.