|
| QQmlJSTypePropagator (const QV4::Compiler::JSUnitGenerator *unitGenerator, const QQmlJSTypeResolver *typeResolver, QQmlJSLogger *logger, const BasicBlocks &basicBlocks={}, const InstructionAnnotations &annotations={}, QQmlSA::PassManager *passManager=nullptr, const ContextPropertyInfo &contextPropertyInfo={}) |
BlocksAndAnnotations | run (const Function *m_function) |
void | generate_Ret () override |
void | generate_Debug () override |
void | generate_LoadConst (int index) override |
void | generate_LoadZero () override |
void | generate_LoadTrue () override |
void | generate_LoadFalse () override |
void | generate_LoadNull () override |
void | generate_LoadUndefined () override |
void | generate_LoadInt (int value) override |
void | generate_MoveConst (int constIndex, int destTemp) override |
void | generate_LoadReg (int reg) override |
void | generate_StoreReg (int reg) override |
void | generate_MoveReg (int srcReg, int destReg) override |
void | generate_LoadImport (int index) override |
void | generate_LoadLocal (int index) override |
void | generate_StoreLocal (int index) override |
void | generate_LoadScopedLocal (int scope, int index) override |
void | generate_StoreScopedLocal (int scope, int index) override |
void | generate_LoadRuntimeString (int stringId) override |
void | generate_MoveRegExp (int regExpId, int destReg) override |
void | generate_LoadClosure (int value) override |
void | generate_LoadName (int nameIndex) override |
void | generate_LoadGlobalLookup (int index) override |
void | generate_LoadQmlContextPropertyLookup (int index) override |
void | generate_StoreNameCommon (int nameIndex) |
void | generate_StoreNameSloppy (int nameIndex) override |
void | generate_StoreNameStrict (int name) override |
void | generate_LoadElement (int base) override |
void | generate_StoreElement (int base, int index) override |
void | generate_LoadProperty (int nameIndex) override |
void | generate_LoadOptionalProperty (int name, int offset) override |
void | generate_GetLookup (int index) override |
void | generate_GetOptionalLookup (int index, int offset) override |
void | generate_StoreProperty (int name, int base) override |
void | generate_SetLookup (int index, int base) override |
void | generate_LoadSuperProperty (int property) override |
void | generate_StoreSuperProperty (int property) override |
void | generate_Yield () override |
void | generate_YieldStar () override |
void | generate_Resume (int) override |
void | generate_CallValue (int name, int argc, int argv) override |
void | generate_CallWithReceiver (int name, int thisObject, int argc, int argv) override |
void | generate_CallProperty (int name, int base, int argc, int argv) override |
void | generate_CallPropertyLookup (int lookupIndex, int base, int argc, int argv) override |
void | generate_CallName (int name, int argc, int argv) override |
void | generate_CallPossiblyDirectEval (int argc, int argv) override |
void | generate_CallGlobalLookup (int index, int argc, int argv) override |
void | generate_CallQmlContextPropertyLookup (int index, int argc, int argv) override |
void | generate_CallWithSpread (int func, int thisObject, int argc, int argv) override |
void | generate_TailCall (int func, int thisObject, int argc, int argv) override |
void | generate_Construct (int func, int argc, int argv) override |
void | generate_ConstructWithSpread (int func, int argc, int argv) override |
void | generate_SetUnwindHandler (int offset) override |
void | generate_UnwindDispatch () override |
void | generate_UnwindToLabel (int level, int offset) override |
void | generate_DeadTemporalZoneCheck (int name) override |
void | generate_ThrowException () override |
void | generate_GetException () override |
void | generate_SetException () override |
void | generate_CreateCallContext () override |
void | generate_PushCatchContext (int index, int name) override |
void | generate_PushWithContext () override |
void | generate_PushBlockContext (int index) override |
void | generate_CloneBlockContext () override |
void | generate_PushScriptContext (int index) override |
void | generate_PopScriptContext () override |
void | generate_PopContext () override |
void | generate_GetIterator (int iterator) override |
void | generate_IteratorNext (int value, int offset) override |
void | generate_IteratorNextForYieldStar (int iterator, int object, int offset) override |
void | generate_IteratorClose () override |
void | generate_DestructureRestElement () override |
void | generate_DeleteProperty (int base, int index) override |
void | generate_DeleteName (int name) override |
void | generate_TypeofName (int name) override |
void | generate_TypeofValue () override |
void | generate_DeclareVar (int varName, int isDeletable) override |
void | generate_DefineArray (int argc, int args) override |
void | generate_DefineObjectLiteral (int internalClassId, int argc, int args) override |
void | generate_CreateClass (int classIndex, int heritage, int computedNames) override |
void | generate_CreateMappedArgumentsObject () override |
void | generate_CreateUnmappedArgumentsObject () override |
void | generate_CreateRestParameter (int argIndex) override |
void | generate_ConvertThisToObject () override |
void | generate_LoadSuperConstructor () override |
void | generate_ToObject () override |
void | generate_Jump (int offset) override |
void | generate_JumpTrue (int offset) override |
void | generate_JumpFalse (int offset) override |
void | generate_JumpNoException (int offset) override |
void | generate_JumpNotUndefined (int offset) override |
void | generate_CheckException () override |
void | generate_CmpEqNull () override |
void | generate_CmpNeNull () override |
void | generate_CmpEqInt (int lhsConst) override |
void | generate_CmpNeInt (int lhs) override |
void | generate_CmpEq (int lhs) override |
void | generate_CmpNe (int lhs) override |
void | generate_CmpGt (int lhs) override |
void | generate_CmpGe (int lhs) override |
void | generate_CmpLt (int lhs) override |
void | generate_CmpLe (int lhs) override |
void | generate_CmpStrictEqual (int lhs) override |
void | generate_CmpStrictNotEqual (int lhs) override |
void | generate_CmpIn (int lhs) override |
void | generate_CmpInstanceOf (int lhs) override |
void | generate_As (int lhs) override |
void | generate_UNot () override |
void | generate_UPlus () override |
void | generate_UMinus () override |
void | generate_UCompl () override |
void | generate_Increment () override |
void | generate_Decrement () override |
void | generate_Add (int lhs) override |
void | generate_BitAnd (int lhs) override |
void | generate_BitOr (int lhs) override |
void | generate_BitXor (int lhs) override |
void | generate_UShr (int lhs) override |
void | generate_Shr (int lhs) override |
void | generate_Shl (int lhs) override |
void | generate_BitAndConst (int rhsConst) override |
void | generate_BitOrConst (int rhsConst) override |
void | generate_BitXorConst (int rhsConst) override |
void | generate_UShrConst (int rhsConst) override |
void | generate_ShrConst (int rhs) override |
void | generate_ShlConst (int rhs) override |
void | generate_Exp (int lhs) override |
void | generate_Mul (int lhs) override |
void | generate_Div (int lhs) override |
void | generate_Mod (int lhs) override |
void | generate_Sub (int lhs) override |
void | generate_InitializeBlockDeadTemporalZone (int firstReg, int count) override |
void | generate_ThrowOnNullOrUndefined () override |
void | generate_GetTemplateObject (int index) override |
bool | checkForEnumProblems (QQmlJSRegisterContent base, const QString &propertyName) |
Verdict | startInstruction (QV4::Moth::Instr::Type instr) override |
void | endInstruction (QV4::Moth::Instr::Type instr) override |
| QQmlJSCompilePass (const QV4::Compiler::JSUnitGenerator *jsUnitGenerator, const QQmlJSTypeResolver *typeResolver, QQmlJSLogger *logger, const BasicBlocks &basicBlocks={}, const InstructionAnnotations &annotations={}) |
Public Member Functions inherited from QV4::Moth::ByteCodeHandler |
| ByteCodeHandler ()=default |
virtual | ~ByteCodeHandler () |
void | decode (const char *code, uint len) |
void | reset () |
int | currentInstructionOffset () const |
int | nextInstructionOffset () const |
int | absoluteOffset (int relativeOffset) const |
|
enum | RegisterShortcuts {
InvalidRegister = -1
, CurrentFunction = QV4::CallData::Function
, Context = QV4::CallData::Context
, Accumulator = QV4::CallData::Accumulator
,
This = QV4::CallData::This
, NewTarget = QV4::CallData::NewTarget
, Argc = QV4::CallData::Argc
, FirstArgument = QV4::CallData::OffsetCount
} |
using | SourceLocationTable = QV4::Compiler::Context::SourceLocationTable |
using | VirtualRegisters = QFlatMap<int, VirtualRegister> |
using | BasicBlocks = QFlatMap<int, BasicBlock> |
using | InstructionAnnotations = QFlatMap<int, InstructionAnnotation> |
Protected Types inherited from QV4::Moth::ByteCodeHandler |
enum | Verdict { ProcessInstruction
, SkipInstruction
} |
int | firstRegisterIndex () const |
bool | isArgument (int registerIndex) const |
QQmlJSRegisterContent | argumentType (int registerIndex) const |
bool | isQmlScopeObject (QQmlJSRegisterContent content) |
State | initialState (const Function *function) |
State | nextStateFromAnnotations (const State &oldState, const InstructionAnnotations &annotations) |
QList< SourceLocationTable::Entry >::const_iterator | sourceLocationEntry (int instructionOffset) const |
QQmlJS::SourceLocation | sourceLocation (int instructionOffset) const |
QQmlJS::SourceLocation | nonEmptySourceLocation (int instructionOffset) const |
QQmlJS::SourceLocation | currentSourceLocation () const |
QQmlJS::SourceLocation | currentNonEmptySourceLocation () const |
QQmlJS::SourceLocation | currentFunctionSourceLocation () const |
void | addError (const QString &message, int instructionOffset) |
void | addSkip (const QString &message, int instructionOffset) |
void | addError (const QString &message) |
void | addSkip (const QString &message) |
void | generate_Add (int) override |
void | generate_As (int) override |
void | generate_BitAnd (int) override |
void | generate_BitAndConst (int) override |
void | generate_BitOr (int) override |
void | generate_BitOrConst (int) override |
void | generate_BitXor (int) override |
void | generate_BitXorConst (int) override |
void | generate_CallGlobalLookup (int, int, int) override |
void | generate_CallName (int, int, int) override |
void | generate_CallPossiblyDirectEval (int, int) override |
void | generate_CallProperty (int, int, int, int) override |
void | generate_CallPropertyLookup (int, int, int, int) override |
void | generate_CallQmlContextPropertyLookup (int, int, int) override |
void | generate_CallValue (int, int, int) override |
void | generate_CallWithReceiver (int, int, int, int) override |
void | generate_CallWithSpread (int, int, int, int) override |
void | generate_CheckException () override |
void | generate_CloneBlockContext () override |
void | generate_CmpEq (int) override |
void | generate_CmpEqInt (int) override |
void | generate_CmpEqNull () override |
void | generate_CmpGe (int) override |
void | generate_CmpGt (int) override |
void | generate_CmpIn (int) override |
void | generate_CmpInstanceOf (int) override |
void | generate_CmpLe (int) override |
void | generate_CmpLt (int) override |
void | generate_CmpNe (int) override |
void | generate_CmpNeInt (int) override |
void | generate_CmpNeNull () override |
void | generate_CmpStrictEqual (int) override |
void | generate_CmpStrictNotEqual (int) override |
void | generate_Construct (int, int, int) override |
void | generate_ConstructWithSpread (int, int, int) override |
void | generate_ConvertThisToObject () override |
void | generate_CreateCallContext () override |
void | generate_CreateClass (int, int, int) override |
void | generate_CreateMappedArgumentsObject () override |
void | generate_CreateRestParameter (int) override |
void | generate_CreateUnmappedArgumentsObject () override |
void | generate_DeadTemporalZoneCheck (int) override |
void | generate_Debug () override |
void | generate_DeclareVar (int, int) override |
void | generate_Decrement () override |
void | generate_DefineArray (int, int) override |
void | generate_DefineObjectLiteral (int, int, int) override |
void | generate_DeleteName (int) override |
void | generate_DeleteProperty (int, int) override |
void | generate_DestructureRestElement () override |
void | generate_Div (int) override |
void | generate_Exp (int) override |
void | generate_GetException () override |
void | generate_GetIterator (int) override |
void | generate_GetLookup (int) override |
void | generate_GetOptionalLookup (int, int) override |
void | generate_GetTemplateObject (int) override |
void | generate_Increment () override |
void | generate_InitializeBlockDeadTemporalZone (int, int) override |
void | generate_IteratorClose () override |
void | generate_IteratorNext (int, int) override |
void | generate_IteratorNextForYieldStar (int, int, int) override |
void | generate_Jump (int) override |
void | generate_JumpFalse (int) override |
void | generate_JumpNoException (int) override |
void | generate_JumpNotUndefined (int) override |
void | generate_JumpTrue (int) override |
void | generate_LoadClosure (int) override |
void | generate_LoadConst (int) override |
void | generate_LoadElement (int) override |
void | generate_LoadFalse () override |
void | generate_LoadGlobalLookup (int) override |
void | generate_LoadImport (int) override |
void | generate_LoadInt (int) override |
void | generate_LoadLocal (int) override |
void | generate_LoadName (int) override |
void | generate_LoadNull () override |
void | generate_LoadOptionalProperty (int, int) override |
void | generate_LoadProperty (int) override |
void | generate_LoadQmlContextPropertyLookup (int) override |
void | generate_LoadReg (int) override |
void | generate_LoadRuntimeString (int) override |
void | generate_LoadScopedLocal (int, int) override |
void | generate_LoadSuperConstructor () override |
void | generate_LoadSuperProperty (int) override |
void | generate_LoadTrue () override |
void | generate_LoadUndefined () override |
void | generate_LoadZero () override |
void | generate_Mod (int) override |
void | generate_MoveConst (int, int) override |
void | generate_MoveReg (int, int) override |
void | generate_MoveRegExp (int, int) override |
void | generate_Mul (int) override |
void | generate_PopContext () override |
void | generate_PopScriptContext () override |
void | generate_PushBlockContext (int) override |
void | generate_PushCatchContext (int, int) override |
void | generate_PushScriptContext (int) override |
void | generate_PushWithContext () override |
void | generate_Resume (int) override |
void | generate_Ret () override |
void | generate_SetException () override |
void | generate_SetLookup (int, int) override |
void | generate_SetUnwindHandler (int) override |
void | generate_Shl (int) override |
void | generate_ShlConst (int) override |
void | generate_Shr (int) override |
void | generate_ShrConst (int) override |
void | generate_StoreElement (int, int) override |
void | generate_StoreLocal (int) override |
void | generate_StoreNameSloppy (int) override |
void | generate_StoreNameStrict (int) override |
void | generate_StoreProperty (int, int) override |
void | generate_StoreReg (int) override |
void | generate_StoreScopedLocal (int, int) override |
void | generate_StoreSuperProperty (int) override |
void | generate_Sub (int) override |
void | generate_TailCall (int, int, int, int) override |
void | generate_ThrowException () override |
void | generate_ThrowOnNullOrUndefined () override |
void | generate_ToObject () override |
void | generate_TypeofName (int) override |
void | generate_TypeofValue () override |
void | generate_UCompl () override |
void | generate_UMinus () override |
void | generate_UNot () override |
void | generate_UPlus () override |
void | generate_UShr (int) override |
void | generate_UShrConst (int) override |
void | generate_UnwindDispatch () override |
void | generate_UnwindToLabel (int, int) override |
void | generate_Yield () override |
void | generate_YieldStar () override |
static bool | instructionManipulatesContext (QV4::Moth::Instr::Type type) |
const QV4::Compiler::JSUnitGenerator * | m_jsUnitGenerator = nullptr |
const QQmlJSTypeResolver * | m_typeResolver = nullptr |
QQmlJSRegisterContentPool * | m_pool = nullptr |
QQmlJSLogger * | m_logger = nullptr |
const Function * | m_function = nullptr |
BasicBlocks | m_basicBlocks |
InstructionAnnotations | m_annotations |
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 36 of file qqmljstypepropagator_p.h.