diff --git a/src/xenia/kernel/notify_listener.h b/src/xenia/kernel/notify_listener.h index 70562ea59..f341e659b 100644 --- a/src/xenia/kernel/notify_listener.h +++ b/src/xenia/kernel/notify_listener.h @@ -23,6 +23,8 @@ namespace kernel { class NotifyListener : public XObject { public: + static const Type kType = kTypeNotifyListener; + explicit NotifyListener(KernelState* kernel_state); ~NotifyListener() override; diff --git a/src/xenia/kernel/util/object_table.h b/src/xenia/kernel/util/object_table.h index f992b8b5f..f1f7e7d0d 100644 --- a/src/xenia/kernel/util/object_table.h +++ b/src/xenia/kernel/util/object_table.h @@ -38,10 +38,22 @@ class ObjectTable { template object_ref LookupObject(X_HANDLE handle) { auto object = LookupObject(handle, false); + if (object) { + assert_true(object->type() == T::kType); + } + auto result = object_ref(reinterpret_cast(object)); return result; } + // Generic lookup + template <> + object_ref LookupObject(X_HANDLE handle) { + auto object = LookupObject(handle, false); + auto result = object_ref(reinterpret_cast(object)); + return result; + } + X_STATUS AddNameMapping(const std::string& name, X_HANDLE handle); void RemoveNameMapping(const std::string& name); X_STATUS GetObjectByName(const std::string& name, X_HANDLE* out_handle); diff --git a/src/xenia/kernel/xenumerator.h b/src/xenia/kernel/xenumerator.h index 437ce7339..dafded9fe 100644 --- a/src/xenia/kernel/xenumerator.h +++ b/src/xenia/kernel/xenumerator.h @@ -21,6 +21,8 @@ namespace kernel { class XEnumerator : public XObject { public: + static const Type kType = kTypeEnumerator; + XEnumerator(KernelState* kernel_state, size_t item_capacity, size_t item_size); virtual ~XEnumerator(); diff --git a/src/xenia/kernel/xevent.h b/src/xenia/kernel/xevent.h index 4567617d4..011234b39 100644 --- a/src/xenia/kernel/xevent.h +++ b/src/xenia/kernel/xevent.h @@ -24,6 +24,8 @@ struct X_KEVENT { class XEvent : public XObject { public: + static const Type kType = kTypeEvent; + explicit XEvent(KernelState* kernel_state); ~XEvent() override; diff --git a/src/xenia/kernel/xfile.h b/src/xenia/kernel/xfile.h index 8bd7c6a00..e3e4dd3da 100644 --- a/src/xenia/kernel/xfile.h +++ b/src/xenia/kernel/xfile.h @@ -77,6 +77,8 @@ static_assert_size(X_FILE_DIRECTORY_INFORMATION, 72); class XFile : public XObject { public: + static const Type kType = kTypeFile; + ~XFile() override; vfs::Device* device() const { return entry_->device(); } diff --git a/src/xenia/kernel/xmodule.h b/src/xenia/kernel/xmodule.h index ac215d135..b772f443c 100644 --- a/src/xenia/kernel/xmodule.h +++ b/src/xenia/kernel/xmodule.h @@ -57,6 +57,8 @@ class XModule : public XObject { kUserModule = 1, }; + static const Type kType = kTypeModule; + XModule(KernelState* kernel_state, ModuleType module_type, const std::string& path); virtual ~XModule(); diff --git a/src/xenia/kernel/xmutant.h b/src/xenia/kernel/xmutant.h index 1c87f472a..b87c01020 100644 --- a/src/xenia/kernel/xmutant.h +++ b/src/xenia/kernel/xmutant.h @@ -19,6 +19,8 @@ namespace kernel { class XMutant : public XObject { public: + static const Type kType = kTypeMutant; + explicit XMutant(KernelState* kernel_state); ~XMutant() override; diff --git a/src/xenia/kernel/xsemaphore.h b/src/xenia/kernel/xsemaphore.h index c68393d68..6dbd4f5d6 100644 --- a/src/xenia/kernel/xsemaphore.h +++ b/src/xenia/kernel/xsemaphore.h @@ -24,6 +24,8 @@ struct X_KSEMAPHORE { class XSemaphore : public XObject { public: + static const Type kType = kTypeSemaphore; + explicit XSemaphore(KernelState* kernel_state); ~XSemaphore() override; diff --git a/src/xenia/kernel/xthread.h b/src/xenia/kernel/xthread.h index 130f088bc..8dc9e8058 100644 --- a/src/xenia/kernel/xthread.h +++ b/src/xenia/kernel/xthread.h @@ -103,6 +103,8 @@ static_assert_size(X_KTHREAD, 0xAB0); class XThread : public XObject { public: + static const Type kType = kTypeThread; + struct CreationParams { uint32_t stack_size; uint32_t xapi_thread_startup; diff --git a/src/xenia/kernel/xtimer.h b/src/xenia/kernel/xtimer.h index 914af0b17..052e3ea9c 100644 --- a/src/xenia/kernel/xtimer.h +++ b/src/xenia/kernel/xtimer.h @@ -21,6 +21,8 @@ class XThread; class XTimer : public XObject { public: + static const Type kType = kTypeTimer; + explicit XTimer(KernelState* kernel_state); ~XTimer() override;