From ad3e13d97367aade27b328306a19d78f68331fa8 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Thu, 11 Apr 2019 14:13:24 +0200 Subject: JSRuntime: Provide an optional symbol table The method names are only used for debugging purposes. We don't need to pass them through production code. Centralize the names of all the runtime methods in a symbol table and only look them up when actually printing them. Change-Id: I0d9d7db04b961841242acdbaaa7a2ba29b1f4ff2 Reviewed-by: Simon Hausmann --- src/qml/jsruntime/qv4runtime.cpp | 127 ++++++++++++++++++++++++++++++++++++ src/qml/jsruntime/qv4runtimeapi_p.h | 2 + 2 files changed, 129 insertions(+) (limited to 'src/qml/jsruntime') diff --git a/src/qml/jsruntime/qv4runtime.cpp b/src/qml/jsruntime/qv4runtime.cpp index aaa198c62a..21a0017728 100644 --- a/src/qml/jsruntime/qv4runtime.cpp +++ b/src/qml/jsruntime/qv4runtime.cpp @@ -2316,6 +2316,133 @@ Bool Runtime::CompareStrictNotEqual::call(const Value &left, const Value &right) return ! RuntimeHelpers::strictEqual(left, right); } +template +static inline const void *symbol() +{ + return reinterpret_cast(&Operation::call); +} + +QHash Runtime::symbolTable() +{ + static const QHash symbols({ +#ifndef V4_BOOTSTRAP + {symbol(), "CallGlobalLookup" }, + {symbol(), "CallQmlContextPropertyLookup" }, + {symbol(), "CallName" }, + {symbol(), "CallProperty" }, + {symbol(), "CallPropertyLookup" }, + {symbol(), "CallElement" }, + {symbol(), "CallValue" }, + {symbol(), "CallWithReceiver" }, + {symbol(), "CallPossiblyDirectEval" }, + {symbol(), "CallWithSpread" }, + {symbol(), "TailCall" }, + + {symbol(), "Construct" }, + {symbol(), "ConstructWithSpread" }, + + {symbol(), "StoreNameStrict" }, + {symbol(), "StoreNameSloppy" }, + {symbol(), "StoreProperty" }, + {symbol(), "StoreElement" }, + {symbol(), "LoadProperty" }, + {symbol(), "LoadName" }, + {symbol(), "LoadElement" }, + {symbol(), "LoadSuperProperty" }, + {symbol(), "StoreSuperProperty" }, + {symbol(), "LoadSuperConstructor" }, + {symbol(), "LoadGlobalLookup" }, + {symbol(), "LoadQmlContextPropertyLookup" }, + {symbol(), "GetLookup" }, + {symbol(), "SetLookupStrict" }, + {symbol(), "SetLookupSloppy" }, + + {symbol(), "TypeofValue" }, + {symbol(), "TypeofName" }, + + {symbol(), "DeleteProperty_NoThrow" }, + {symbol(), "DeleteProperty" }, + {symbol(), "DeleteName_NoThrow" }, + {symbol(), "DeleteName" }, + + {symbol(), "ThrowException" }, + {symbol(), "PushCallContext" }, + {symbol(), "PushWithContext" }, + {symbol(), "PushCatchContext" }, + {symbol(), "PushBlockContext" }, + {symbol(), "CloneBlockContext" }, + {symbol(), "PushScriptContext" }, + {symbol(), "PopScriptContext" }, + {symbol(), "ThrowReferenceError" }, + {symbol(), "ThrowOnNullOrUndefined" }, + + {symbol(), "Closure" }, + + {symbol(), "ConvertThisToObject" }, + {symbol(), "DeclareVar" }, + {symbol(), "CreateMappedArgumentsObject" }, + {symbol(), "CreateUnmappedArgumentsObject" }, + {symbol(), "CreateRestParameter" }, + + {symbol(), "ArrayLiteral" }, + {symbol(), "ObjectLiteral" }, + {symbol(), "CreateClass" }, + + {symbol(), "GetIterator" }, + {symbol(), "IteratorNext" }, + {symbol(), "IteratorNextForYieldStar" }, + {symbol(), "IteratorClose" }, + {symbol(), "DestructureRestElement" }, + + {symbol(), "ToObject" }, + {symbol(), "ToBoolean" }, + {symbol(), "ToNumber" }, + + {symbol(), "UMinus" }, + + {symbol(), "Instanceof" }, + {symbol(), "In" }, + {symbol(), "Add" }, + {symbol(), "Sub" }, + {symbol(), "Mul" }, + {symbol
(), "Div" }, + {symbol(), "Mod" }, + {symbol(), "Exp" }, + {symbol(), "BitAnd" }, + {symbol(), "BitOr" }, + {symbol(), "BitXor" }, + {symbol(), "Shl" }, + {symbol(), "Shr" }, + {symbol(), "UShr" }, + {symbol(), "GreaterThan" }, + {symbol(), "LessThan" }, + {symbol(), "GreaterEqual" }, + {symbol(), "LessEqual" }, + {symbol(), "Equal" }, + {symbol(), "NotEqual" }, + {symbol(), "StrictEqual" }, + {symbol(), "StrictNotEqual" }, + + {symbol(), "CompareGreaterThan" }, + {symbol(), "CompareLessThan" }, + {symbol(), "CompareGreaterEqual" }, + {symbol(), "CompareLessEqual" }, + {symbol(), "CompareEqual" }, + {symbol(), "CompareNotEqual" }, + {symbol(), "CompareStrictEqual" }, + {symbol(), "CompareStrictNotEqual" }, + + {symbol(), "CompareInstanceOf" }, + {symbol(), "CompareIn" }, + + {symbol(), "RegexpLiteral" }, + {symbol(), "GetTemplateObject" } +#endif + }); + + return symbols; +} + } // namespace QV4 QT_END_NAMESPACE diff --git a/src/qml/jsruntime/qv4runtimeapi_p.h b/src/qml/jsruntime/qv4runtimeapi_p.h index 05ffb84d58..d155187e48 100644 --- a/src/qml/jsruntime/qv4runtimeapi_p.h +++ b/src/qml/jsruntime/qv4runtimeapi_p.h @@ -501,6 +501,8 @@ struct Q_QML_PRIVATE_EXPORT Runtime { static const int tailCall_argv = -3; static const int tailCall_argc = -4; }; + + static QHash symbolTable(); }; static_assert(std::is_standard_layout::value, "Runtime needs to be standard layout in order for us to be able to use offsetof"); -- cgit v1.2.3