mirror of
https://github.com/zeldaret/tp
synced 2026-05-24 23:22:01 -04:00
ac6b191dc1
* new system for handling vtables * commented out non-matching JKRDisposer::~JKDisposer() * removed artificial vtables and matched simple virtual-call functions * better text on nonmatching functions * reverted asmdiff.sh * attempt 2 * Spelling * banner and .gitignore for vtable artifacts * move virtual function to the correct class * remove unnecessary casts
39 lines
963 B
C++
39 lines
963 B
C++
#include "JSystem/JKernel/JKRDisposer/JKRDisposer.h"
|
|
#include "global.h"
|
|
#include "JSystem/JKernel/JKRHeap/JKRHeap.h"
|
|
|
|
// #include "JSystem/JKernel/asm/func_802D147C.s"
|
|
JKRDisposer::JKRDisposer() : ptr_link(this) {
|
|
this->heap = JKRHeap::findFromRoot(this);
|
|
if (this->heap != 0) {
|
|
this->heap->disposable_list.append(&this->ptr_link);
|
|
}
|
|
}
|
|
|
|
/*
|
|
Super close.
|
|
|
|
This is what we expected: (from Ghidra)
|
|
if (this != (JKRDisposer *)&DAT_fffffff8) {
|
|
JSUPtrLink::~JSUPtrLink(&this->ptr_link,0);
|
|
}
|
|
|
|
But the compiler generate code like this instead: (no if and -1 instead of 0)
|
|
JSUPtrLink::~JSUPtrLink(&this->ptr_link,-1);
|
|
|
|
Maybe we are using the wrong compiler?
|
|
*/
|
|
#ifdef NONMATCHING
|
|
JKRDisposer::~JKRDisposer() {
|
|
JKRHeap* heap = this->heap;
|
|
if (heap != 0) {
|
|
heap->disposable_list.remove(&this->ptr_link);
|
|
}
|
|
}
|
|
#else
|
|
asm JKRDisposer::~JKRDisposer() {
|
|
nofralloc
|
|
#include "JSystem/JKernel/JKRDisposer/asm/func_802D14E4.s"
|
|
}
|
|
#endif
|