Better menu deallocation.
This commit is contained in:
parent
375014b55b
commit
b7980567be
@ -272,18 +272,13 @@ namespace Components
|
|||||||
return newList;
|
return newList;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Menus::FreeMenuScript(Game::script_t* script)
|
|
||||||
{
|
|
||||||
Game::FreeMemory(script);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Menus::FreeMenuSource(int handle)
|
void Menus::FreeMenuSource(int handle)
|
||||||
{
|
{
|
||||||
if (!Menus::IsValidSourceHandle(handle)) return;
|
if (!Menus::IsValidSourceHandle(handle)) return;
|
||||||
|
|
||||||
Game::script_t *script;
|
Game::script_t *script;
|
||||||
// Game::token_t *token;
|
Game::token_t *token;
|
||||||
// Game::define_t *define;
|
Game::define_t *define;
|
||||||
Game::indent_t *indent;
|
Game::indent_t *indent;
|
||||||
Game::source_t *source = Game::sourceFiles[handle];
|
Game::source_t *source = Game::sourceFiles[handle];
|
||||||
|
|
||||||
@ -291,7 +286,21 @@ namespace Components
|
|||||||
{
|
{
|
||||||
script = source->scriptstack;
|
script = source->scriptstack;
|
||||||
source->scriptstack = source->scriptstack->next;
|
source->scriptstack = source->scriptstack->next;
|
||||||
Menus::FreeMenuScript(script);
|
Game::FreeMemory(script);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (source->tokens)
|
||||||
|
{
|
||||||
|
token = source->tokens;
|
||||||
|
source->tokens = source->tokens->next;
|
||||||
|
Game::FreeMemory(token);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (source->defines)
|
||||||
|
{
|
||||||
|
define = source->defines;
|
||||||
|
source->defines = source->defines->next;
|
||||||
|
Game::FreeMemory(define);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (source->indentstack)
|
while (source->indentstack)
|
||||||
@ -310,7 +319,19 @@ namespace Components
|
|||||||
|
|
||||||
void Menus::FreeMenu(Game::menuDef_t* menudef)
|
void Menus::FreeMenu(Game::menuDef_t* menudef)
|
||||||
{
|
{
|
||||||
if (menudef->items) free(menudef->items);
|
// Do i need to free expressions and strings?
|
||||||
|
// Or does the game take care of it?
|
||||||
|
|
||||||
|
if (menudef->items)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < menudef->itemCount; i++)
|
||||||
|
{
|
||||||
|
Game::Menu_FreeItemMemory(menudef->items[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(menudef->items);
|
||||||
|
}
|
||||||
|
|
||||||
free(menudef);
|
free(menudef);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ namespace Components
|
|||||||
|
|
||||||
static Game::menuDef_t* ParseMenu(int handle);
|
static Game::menuDef_t* ParseMenu(int handle);
|
||||||
|
|
||||||
static void FreeMenuScript(Game::script_t* script);
|
|
||||||
static void FreeMenuSource(int handle);
|
static void FreeMenuSource(int handle);
|
||||||
|
|
||||||
static void FreeMenuList(Game::MenuList* menuList);
|
static void FreeMenuList(Game::MenuList* menuList);
|
||||||
|
@ -69,4 +69,14 @@ namespace Game
|
|||||||
g_poolSize[type] = newSize;
|
g_poolSize[type] = newSize;
|
||||||
return poolEntry;
|
return poolEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Menu_FreeItemMemory(Game::itemDef_t* item)
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov edi, item
|
||||||
|
mov eax, 63D880h
|
||||||
|
call eax
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -113,4 +113,5 @@ namespace Game
|
|||||||
extern keywordHash_t **menuParseKeywordHash;
|
extern keywordHash_t **menuParseKeywordHash;
|
||||||
|
|
||||||
void* ReallocateAssetPool(XAssetType type, unsigned int newSize);
|
void* ReallocateAssetPool(XAssetType type, unsigned int newSize);
|
||||||
|
void Menu_FreeItemMemory(Game::itemDef_t* item);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user