- changed VMValue to handle strings by reference.
This makes VMValue a real POD type with no hacky overloads and eliminates a lot of destructor code in all places that call a VM function. Due to the way this had to be handled, none of these destructors could be skipped because any value could have been a string. This required some minor changes in functions that passed a temporary FString into the VM to ensure that the temporary object lives long enough to be handled. The code generator had already been changed to deal with this in a previous commit. This is easily offset by the code savings and reduced maintenance needs elsewhere.
This commit is contained in:
parent
9bffe4ee50
commit
4417afd548
9 changed files with 55 additions and 93 deletions
|
|
@ -630,7 +630,8 @@ void cht_Give (player_t *player, const char *name, int amount)
|
|||
|
||||
IFVIRTUALPTR(player->mo, APlayerPawn, CheatGive)
|
||||
{
|
||||
VMValue params[3] = { player->mo, FString(name), amount };
|
||||
FString namestr = name;
|
||||
VMValue params[3] = { player->mo, &namestr, amount };
|
||||
GlobalVMStack.Call(func, params, 3, nullptr, 0);
|
||||
}
|
||||
}
|
||||
|
|
@ -641,7 +642,8 @@ void cht_Take (player_t *player, const char *name, int amount)
|
|||
|
||||
IFVIRTUALPTR(player->mo, APlayerPawn, CheatTake)
|
||||
{
|
||||
VMValue params[3] = { player->mo, FString(name), amount };
|
||||
FString namestr = name;
|
||||
VMValue params[3] = { player->mo, &namestr, amount };
|
||||
GlobalVMStack.Call(func, params, 3, nullptr, 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue