Isolate JKRHeap operator overloads

Fixes #25

This isolates the JKRHeap operator new/delete overloads. Every single new/delete site in the code has been replaced with a macro.

Sadly for new[] and delete[] we have to keep global operators. The global new[] just allocates into malloc() however, and delete[] goes into free() if it's not in a JKRHeap. So that's fine.
This commit is contained in:
PJB3005
2026-02-27 23:11:59 +01:00
parent 2204ad0813
commit 038ef4216f
634 changed files with 3451 additions and 3350 deletions
+28 -28
View File
@@ -210,7 +210,7 @@ int mDoExt_bckAnm::init(J3DAnmTransform* i_bck, int i_play, int i_attr, f32 i_ra
JUT_ASSERT(614, (i_modify || isCurrentSolidHeap()) && i_bck != NULL);
mAnmTransform = i_bck;
if (!i_modify) {
mAnm = new J3DMtxCalcAnimation<J3DMtxCalcAnimationAdaptorDefault<J3DMtxCalcCalcTransformMaya>, J3DMtxCalcJ3DSysInitMaya>(mAnmTransform);
mAnm = JKR_NEW J3DMtxCalcAnimation<J3DMtxCalcAnimationAdaptorDefault<J3DMtxCalcCalcTransformMaya>, J3DMtxCalcJ3DSysInitMaya>(mAnmTransform);
if (!mAnm) {
return 0;
}
@@ -422,8 +422,8 @@ static void dummy2() {
J3DTevSwapModeTable tevSwapModeTable;
J3DIndTexOrder indTexOrder;
J3DIndTexMtx* indTexMtx = new J3DIndTexMtx();
J3DIndTexCoordScale* indTexCoordScale = new J3DIndTexCoordScale();
J3DIndTexMtx* indTexMtx = JKR_NEW J3DIndTexMtx();
J3DIndTexCoordScale* indTexCoordScale = JKR_NEW J3DIndTexCoordScale();
J3DColorBlock* colorBlock = NULL;
colorBlock->setColorChanNum((u8)NULL);
colorBlock->setMatColor(0, gxColor);
@@ -503,7 +503,7 @@ static void dummy2() {
int mDoExt_invisibleModel::create(J3DModel* i_model, u8 param_1) {
J3DModelData* model_data = i_model->getModelData();
mpPackets = new mDoExt_invJntPacket[model_data->getJointNum()];
mpPackets = JKR_NEW mDoExt_invJntPacket[model_data->getJointNum()];
if (mpPackets == NULL) {
return 0;
}
@@ -1311,18 +1311,18 @@ int mDoExt_McaMorf::create(J3DModelData* modelData, mDoExt_McaMorfCallBack1_c* c
}
}
if (param_8) {
mpSound = new mDoExt_zelAnime();
mpSound = JKR_NEW mDoExt_zelAnime();
if (!mpSound) {
goto cleanup;
}
}
setAnm(anmTransform, param_4, 0.0f, param_5, param_6, param_7, param_9);
mPrevMorf = -1.0f;
mpTransformInfo = new J3DTransformInfo[modelData->getJointNum()];
mpTransformInfo = JKR_NEW J3DTransformInfo[modelData->getJointNum()];
if (!mpTransformInfo) {
goto cleanup;
}
mpQuat = new Quaternion[modelData->getJointNum()];
mpQuat = JKR_NEW Quaternion[modelData->getJointNum()];
if (mpQuat) {
J3DTransformInfo* info = mpTransformInfo;
Quaternion* quat = mpQuat;
@@ -1569,9 +1569,9 @@ int mDoExt_McaMorfSO::create(J3DModelData* i_modelData, mDoExt_McaMorfCallBack1_
setAnm(param_3, param_4, 0.0f, param_5, param_6, param_7);
mPrevMorf = -1.0f;
mpTransformInfo = new J3DTransformInfo[i_modelData->getJointNum()];
mpTransformInfo = JKR_NEW J3DTransformInfo[i_modelData->getJointNum()];
if (mpTransformInfo != NULL) {
mpQuat = new Quaternion[i_modelData->getJointNum()];
mpQuat = JKR_NEW Quaternion[i_modelData->getJointNum()];
if (mpQuat != NULL) {
J3DTransformInfo* transInfo_p = mpTransformInfo;
@@ -1853,13 +1853,13 @@ mDoExt_McaMorf2::~mDoExt_McaMorf2() {
setAnm(param_3, param_4, 0.0f, param_5, 0.0f, param_6, param_7, param_8);
mPrevMorf = -1.0f;
mpTransformInfo = new J3DTransformInfo[param_0->getJointNum()];
mpTransformInfo = JKR_NEW J3DTransformInfo[param_0->getJointNum()];
if (mpTransformInfo == NULL) {
ERROR_EXIT();
return 0;
}
mpQuat = new Quaternion[param_0->getJointNum()];
mpQuat = JKR_NEW Quaternion[param_0->getJointNum()];
if (mpQuat == NULL) {
ERROR_EXIT();
return 0;
@@ -2248,13 +2248,13 @@ void mDoExt_invJntPacket::draw() {
}
int mDoExt_3Dline_c::init(u16 param_0, int param_1, BOOL param_2) {
field_0x0 = new cXyz[param_0];
field_0x0 = JKR_NEW cXyz[param_0];
if (field_0x0 == NULL) {
return 0;
}
if (param_1 != 0) {
field_0x4 = new f32[param_0];
field_0x4 = JKR_NEW f32[param_0];
if (field_0x4 == NULL) {
return 0;
}
@@ -2264,33 +2264,33 @@ int mDoExt_3Dline_c::init(u16 param_0, int param_1, BOOL param_2) {
int sp20 = param_0 * 2;
field_0x8 = new cXyz[sp20];
field_0x8 = JKR_NEW cXyz[sp20];
if (field_0x8 == NULL) {
return 0;
}
field_0xc = new cXyz[sp20];
field_0xc = JKR_NEW cXyz[sp20];
if (field_0xc == NULL) {
return 0;
}
field_0x10 = new mDoExt_3Dline_field_0x10_c[sp20];
field_0x10 = JKR_NEW mDoExt_3Dline_field_0x10_c[sp20];
if (field_0x10 == NULL) {
return 0;
}
field_0x14 = new mDoExt_3Dline_field_0x10_c[sp20];
field_0x14 = JKR_NEW mDoExt_3Dline_field_0x10_c[sp20];
if (field_0x14 == NULL) {
return 0;
}
if (param_2) {
field_0x18 = new mDoExt_3Dline_field_0x18_c[sp20];
field_0x18 = JKR_NEW mDoExt_3Dline_field_0x18_c[sp20];
if (field_0x18 == NULL) {
return 0;
}
field_0x1c = new mDoExt_3Dline_field_0x18_c[sp20];
field_0x1c = JKR_NEW mDoExt_3Dline_field_0x18_c[sp20];
if (field_0x1c == NULL) {
return 0;
}
@@ -2313,7 +2313,7 @@ int mDoExt_3DlineMat0_c::init(u16 param_0, u16 param_1, int param_2) {
field_0x10 = param_0;
field_0x12 = param_1;
field_0x18 = new mDoExt_3Dline_c[param_0];
field_0x18 = JKR_NEW mDoExt_3Dline_c[param_0];
if (field_0x18 == NULL) {
return 0;
}
@@ -2619,7 +2619,7 @@ void mDoExt_3DlineMat0_c::update(int param_0, GXColor& param_2, dKy_tevstr_c* pa
int mDoExt_3DlineMat1_c::init(u16 param_0, u16 param_1, ResTIMG* param_2, int param_3) {
mNumLines = param_0;
field_0x32 = param_1;
mpLines = new mDoExt_3Dline_c[param_0];
mpLines = JKR_NEW mDoExt_3Dline_c[param_0];
if (mpLines == NULL) {
return 0;
}
@@ -3561,7 +3561,7 @@ static void mDoExt_initFontCommon(JUTFont** mDoExt_font_p, ResFONT** mDoExt_resf
JUT_ASSERT_MSG(7144, *mDoExt_resfont != NULL, "mDoExt_resfont != 0");
if (param_5 == 0) {
u32 cacheSize = JUTCacheFont::calcCacheSize(param_7, param_6);
JUTCacheFont* cacheFont = new (param_2, 0) JUTCacheFont(*mDoExt_resfont, cacheSize, param_2);
JUTCacheFont* cacheFont = JKR_NEW_ARGS (param_2, 0) JUTCacheFont(*mDoExt_resfont, cacheSize, param_2);
if (cacheFont->isValid()) {
// "Allocated %d bytes for font cache buffer size"
OS_REPORT("\nキャッシュフォントバッファサイズとして %d バイト確保しました\n", cacheSize);
@@ -3577,7 +3577,7 @@ static void mDoExt_initFontCommon(JUTFont** mDoExt_font_p, ResFONT** mDoExt_resf
JKRRemoveResource(*mDoExt_resfont, NULL);
*mDoExt_resfont = NULL;
} else {
*mDoExt_font = new JUTResFont(*mDoExt_resfont, param_2);
*mDoExt_font = JKR_NEW JUTResFont(*mDoExt_resfont, param_2);
// "Allocated %d bytes for the font buffer size"
OS_REPORT("\nフォントバッファサイズとして %d バイト確保しました\n",
JKRGetMemBlockSize(param_2, *mDoExt_font));
@@ -3587,7 +3587,7 @@ static void mDoExt_initFontCommon(JUTFont** mDoExt_font_p, ResFONT** mDoExt_resf
if (*mDoExt_font != NULL && !(*mDoExt_font)->isValid()) {
// "Failed to create cache font class"
OSReport_FatalError("\nキャッシュフォントクラス作成に失敗しました\n");
delete *mDoExt_font;
JKR_DELETE(*mDoExt_font);
*mDoExt_font = NULL;
}
JUT_ASSERT_MSG(7183, *mDoExt_font != NULL, "mDoExt_font != 0");
@@ -3625,7 +3625,7 @@ void mDoExt_removeMesgFont() {
mDoExt_font0_getCount--;
JUT_ASSERT(7241, mDoExt_font0_getCount > 0);
if (mDoExt_font0_getCount == 0) {
delete mDoExt_font0;
JKR_DELETE(mDoExt_font0);
mDoExt_font0 = NULL;
if (mDoExt_resfont0 != NULL) {
#if REGION_JPN
@@ -3691,7 +3691,7 @@ void mDoExt_removeSubFont() {
mDoExt_font2_getCount--;
JUT_ASSERT(7357, mDoExt_font2_getCount > 0);
if (mDoExt_font2_getCount == 0) {
delete mDoExt_font2;
JKR_DELETE(mDoExt_font2);
mDoExt_font2 = NULL;
if (mDoExt_resfont2 != NULL) {
JKRFree(mDoExt_resfont2);
@@ -3703,7 +3703,7 @@ void mDoExt_removeSubFont() {
J3DModel* mDoExt_J3DModel__create(J3DModelData* i_modelData, u32 i_modelFlag, u32 i_differedDlistFlag) {
if (i_modelData != NULL) {
J3DModel* model = new J3DModel();
J3DModel* model = JKR_NEW J3DModel();
if (model != NULL) {
#if DEBUG
@@ -3798,7 +3798,7 @@ void DummyCheckHeap::setHeap(JKRHeap* heap) {
int DummyCheckHeap_init() {
JUT_ASSERT(7634, dch == NULL);
dch = new((JKRHeap*)mDoExt_getZeldaHeap(), 0) DummyCheckHeap();
dch = JKR_NEW_ARGS((JKRHeap*)mDoExt_getZeldaHeap(), 0) DummyCheckHeap();
if (dch == NULL) {
return false;
}