diff --git a/runtime/dump.cpp b/runtime/dump.cpp index d28a3129e9cdeb3ae4e32fe5e2eb4b9792cff79c..581bbb548df48b1aa10736198718e0f005f5a94a 100644 --- a/runtime/dump.cpp +++ b/runtime/dump.cpp @@ -269,6 +269,12 @@ PandaString JSHClass::DumpJSType(JSType type) return "ClassInfoExtractor"; case JSType::JS_ARRAY_LIST: return "ArrayList"; + case JSType::FREE_OBJECT_WITH_NONE_FIELD: + return "FreeObjectWithNoneField"; + case JSType::FREE_OBJECT_WITH_ONE_FIELD: + return "FreeObjectWithOneField"; + case JSType::FREE_OBJECT_WITH_TWO_FIELD: + return "FreeObjectWithTwoField"; default: { PandaString ret = "unknown type "; return ret + static_cast(type); @@ -629,6 +635,12 @@ static void DumpObject(JSThread *thread, TaggedObject *obj, std::ostream &os) case JSType::JS_ARRAY_LIST: JSArrayList::Cast(obj)->Dump(thread, os); break; + case JSType::FREE_OBJECT_WITH_NONE_FIELD: + case JSType::FREE_OBJECT_WITH_ONE_FIELD: + case JSType::FREE_OBJECT_WITH_TWO_FIELD: + case JSType::INTERNAL_ACCESSOR: + // No additional info + break; default: UNREACHABLE(); break; diff --git a/runtime/ecma_vm.cpp b/runtime/ecma_vm.cpp index 99ee66d1c4f991db8bd2d7c79506aac360ddf50c..f656e28f20899775b3beaffe26bc7704b4ffc939 100644 --- a/runtime/ecma_vm.cpp +++ b/runtime/ecma_vm.cpp @@ -458,6 +458,17 @@ bool EcmaVM::ExecuteFromBuffer(const void *buffer, size_t size, std::string_view return Execute(std::move(pf), entry_point, args); } +void EcmaVM::DumpHeap(PandaOStringStream *o_str) const +{ + size_t obj_cnt = 0; + *o_str << "Dumping heap" << std::endl; + GetHeapManager()->GetObjectAllocator()->IterateOverObjects([&obj_cnt, &o_str](ObjectHeader *mem) { + JSTaggedValue(mem).Dump(nullptr, *o_str); + obj_cnt++; + }); + *o_str << "\nTotal dumped " << obj_cnt << std::endl; +} + tooling::ecmascript::PtJSExtractor *EcmaVM::GetDebugInfoExtractor(const panda_file::File *file) { tooling::ecmascript::PtJSExtractor *res = nullptr; diff --git a/runtime/ecma_vm.h b/runtime/ecma_vm.h index de611e4678af5953b9142887ca4bcad1cca4cdcb..a68988824bf89515e2d22c041e422535d07a5f18 100644 --- a/runtime/ecma_vm.h +++ b/runtime/ecma_vm.h @@ -451,6 +451,8 @@ public: profiles_methods_.insert(method); } + void DumpHeap(PandaOStringStream *o_str) const final; + static constexpr size_t GetGlobalEnvOffset() { return MEMBER_OFFSET(EcmaVM, global_env_);