From ace3e29473b67326e59e0f3e5cbe1ff1c3219a7c Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 11 Apr 2020 12:58:38 +0200 Subject: [PATCH] - removed the implicit conversion operators from FName. These were creating dangerous interdependencies. It is better to do explicit conversions when needed. As an added plus, this means that zstring.h no longer depends on name.h which was very annoying. --- src/console/c_console.cpp | 6 +- src/console/c_cvars.cpp | 4 +- src/ct_chat.cpp | 2 +- src/d_main.cpp | 2 +- src/d_net.cpp | 2 +- src/d_netinfo.cpp | 6 +- src/dobjtype.cpp | 2 +- src/g_level.cpp | 2 +- src/g_statusbar/sbar_mugshot.cpp | 6 +- src/gamedata/a_weapons.cpp | 2 +- src/gamedata/d_dehacked.cpp | 2 +- src/gamedata/decallib.cpp | 8 +-- src/gamedata/fonts/v_font.cpp | 2 +- src/gamedata/g_mapinfo.cpp | 6 +- src/gamedata/gi.cpp | 4 +- src/gamedata/gi.h | 1 + src/gamedata/umapinfo.cpp | 2 +- src/maploader/postprocessor.cpp | 2 +- src/maploader/udmf.cpp | 68 +++++++++++----------- src/maploader/udmf.h | 14 ++--- src/maploader/usdf.cpp | 26 ++++----- src/menu/menu.cpp | 4 +- src/p_states.cpp | 4 +- src/playsim/a_dynlight.cpp | 4 +- src/playsim/actor.h | 5 ++ src/playsim/bots/b_think.cpp | 4 +- src/playsim/fragglescript/t_func.cpp | 2 +- src/playsim/fragglescript/t_variable.cpp | 2 +- src/playsim/p_acs.cpp | 24 ++++---- src/playsim/p_actionfunctions.cpp | 12 ++-- src/playsim/p_enemy.cpp | 4 +- src/playsim/p_interaction.cpp | 2 +- src/playsim/p_mobj.cpp | 6 +- src/playsim/p_user.cpp | 12 ++-- src/r_data/r_translate.cpp | 4 +- src/r_data/sprites.cpp | 2 +- src/scripting/backend/codegen.cpp | 16 ++--- src/scripting/backend/codegen.h | 2 +- src/scripting/backend/vmbuilder.cpp | 2 +- src/scripting/decorate/olddecorations.cpp | 2 +- src/scripting/decorate/thingdef_exp.cpp | 4 +- src/scripting/decorate/thingdef_parse.cpp | 2 +- src/scripting/decorate/thingdef_states.cpp | 2 +- src/scripting/thingdef_properties.cpp | 2 +- src/scripting/types.cpp | 16 ++--- src/scripting/vm/jit_move.cpp | 2 +- src/scripting/vm/vm.h | 1 + src/scripting/vm/vmexec.h | 2 +- src/scripting/vmthunks_actors.cpp | 4 +- src/scripting/zscript/zcc_compile.cpp | 14 ++--- src/scripting/zscript/zcc_parser.cpp | 4 +- src/serializer.cpp | 6 +- src/sound/s_advsound.cpp | 4 +- src/sound/s_sndseq.cpp | 6 +- src/utility/name.h | 9 ++- src/utility/namedef.h | 1 + src/utility/zstring.h | 23 -------- 57 files changed, 184 insertions(+), 200 deletions(-) diff --git a/src/console/c_console.cpp b/src/console/c_console.cpp index e31f8cf0e5..14bba8d6a8 100644 --- a/src/console/c_console.cpp +++ b/src/console/c_console.cpp @@ -1993,7 +1993,7 @@ static void C_TabComplete (bool goForward) else { CmdLineText.Truncate(TabStart); - CmdLineText << TabCommands[TabPos].TabName << ' '; + CmdLineText << TabCommands[TabPos].TabName.GetChars() << ' '; } } CmdLine.SetString(CmdLineText); @@ -2043,9 +2043,9 @@ static bool C_TabCompleteList () // [Dusk] Print console commands blue, CVars green, aliases red. const char* colorcode = ""; FConsoleCommand* ccmd; - if (FindCVar (TabCommands[i].TabName, NULL)) + if (FindCVar (TabCommands[i].TabName.GetChars(), NULL)) colorcode = TEXTCOLOR_GREEN; - else if ((ccmd = FConsoleCommand::FindByName (TabCommands[i].TabName)) != NULL) + else if ((ccmd = FConsoleCommand::FindByName (TabCommands[i].TabName.GetChars())) != NULL) { if (ccmd->IsAlias()) colorcode = TEXTCOLOR_RED; diff --git a/src/console/c_cvars.cpp b/src/console/c_cvars.cpp index d13e0baa34..332c67e427 100644 --- a/src/console/c_cvars.cpp +++ b/src/console/c_cvars.cpp @@ -1436,7 +1436,7 @@ DEFINE_ACTION_FUNCTION(_CVar, FindCVar) { PARAM_PROLOGUE; PARAM_NAME(name); - ACTION_RETURN_POINTER(FindCVar(name, nullptr)); + ACTION_RETURN_POINTER(FindCVar(name.GetChars(), nullptr)); } DEFINE_ACTION_FUNCTION(_CVar, GetCVar) @@ -1444,7 +1444,7 @@ DEFINE_ACTION_FUNCTION(_CVar, GetCVar) PARAM_PROLOGUE; PARAM_NAME(name); PARAM_POINTER(plyr, player_t); - ACTION_RETURN_POINTER(GetCVar(plyr ? int(plyr - players) : -1, name)); + ACTION_RETURN_POINTER(GetCVar(plyr ? int(plyr - players) : -1, name.GetChars())); } FBaseCVar *FindCVarSub (const char *var_name, int namelen) diff --git a/src/ct_chat.cpp b/src/ct_chat.cpp index ea80df71fe..ed023bf5de 100644 --- a/src/ct_chat.cpp +++ b/src/ct_chat.cpp @@ -426,7 +426,7 @@ static bool DoSubstitution (FString &out, const char *in) } else { - out += weapon->GetClass()->TypeName; + out += weapon->GetClass()->TypeName.GetChars(); } } } diff --git a/src/d_main.cpp b/src/d_main.cpp index ee8bdf067c..e587d57fcf 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -1409,7 +1409,7 @@ void D_DoAdvanceDemo (void) gamestate = GS_DEMOSCREEN; if (gameinfo.creditPages.Size() > 0) { - pagename = gameinfo.creditPages[pagecount]; + pagename = gameinfo.creditPages[pagecount].GetChars(); pagecount = (pagecount+1) % gameinfo.creditPages.Size(); } demosequence = 1; diff --git a/src/d_net.cpp b/src/d_net.cpp index 3b8222b3cc..f186538f85 100644 --- a/src/d_net.cpp +++ b/src/d_net.cpp @@ -2539,7 +2539,7 @@ void Net_DoCommand (int type, uint8_t **stream, int player) s = ReadString(stream); int argn = ReadByte(stream); - RunScript(stream, players[player].mo, -FName(s), argn & 127, (argn & 128) ? ACS_ALWAYS : 0); + RunScript(stream, players[player].mo, -FName(s).GetIndex(), argn & 127, (argn & 128) ? ACS_ALWAYS : 0); } break; diff --git a/src/d_netinfo.cpp b/src/d_netinfo.cpp index e631c4e994..61ba38191a 100644 --- a/src/d_netinfo.cpp +++ b/src/d_netinfo.cpp @@ -820,7 +820,7 @@ void D_ReadUserInfoStrings (int pnum, uint8_t **stream, bool update) } // A few of these need special handling. - switch (keyname) + switch (keyname.GetIndex()) { case NAME_Gender: info->GenderChanged(value); @@ -904,7 +904,7 @@ void WriteUserInfo(FSerializer &arc, userinfo_t &info) while (it.NextPair(pair)) { - name = pair->Key; + name = pair->Key.GetChars(); name.ToLower(); switch (pair->Key.GetIndex()) { @@ -945,7 +945,7 @@ void ReadUserInfo(FSerializer &arc, userinfo_t &info, FString &skin) FBaseCVar **cvar = info.CheckKey(name); if (cvar != NULL && *cvar != NULL) { - switch (name) + switch (name.GetIndex()) { case NAME_Team: info.TeamChanged(atoi(str)); break; case NAME_Skin: skin = str; break; // Caller must call SkinChanged() once current calss is known diff --git a/src/dobjtype.cpp b/src/dobjtype.cpp index 53fe682911..247e7edd0d 100644 --- a/src/dobjtype.cpp +++ b/src/dobjtype.cpp @@ -195,7 +195,7 @@ static int cregcmp (const void *a, const void *b) NO_SANITIZE { const PClass *class1 = *(const PClass **)a; const PClass *class2 = *(const PClass **)b; - return strcmp(class1->TypeName, class2->TypeName); + return strcmp(class1->TypeName.GetChars(), class2->TypeName.GetChars()); } //========================================================================== diff --git a/src/g_level.cpp b/src/g_level.cpp index b198826d5d..04a9fae94e 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -605,7 +605,7 @@ void FLevelLocals::ChangeLevel(const char *levelname, int position, int inflags, } else { - nextlevel.Format("enDSeQ%04x", int(gameinfo.DefaultEndSequence)); + nextlevel.Format("enDSeQ%04x", gameinfo.DefaultEndSequence.GetIndex()); } } else if (strncmp(levelname, "enDSeQ", 6) != 0) diff --git a/src/g_statusbar/sbar_mugshot.cpp b/src/g_statusbar/sbar_mugshot.cpp index d494efbe8c..9fb6f4e768 100644 --- a/src/g_statusbar/sbar_mugshot.cpp +++ b/src/g_statusbar/sbar_mugshot.cpp @@ -374,7 +374,7 @@ int FMugShot::UpdateState(player_t *player, StateFlags stateflags) { full_state_name = "pain."; } - full_state_name += player->LastDamageType; + full_state_name += player->LastDamageType.GetChars(); if (SetState(full_state_name, false, true)) { bDamageFaceActive = (CurrentState != NULL); @@ -401,7 +401,7 @@ int FMugShot::UpdateState(player_t *player, StateFlags stateflags) { full_state_name = "pain."; } - full_state_name += player->LastDamageType; + full_state_name += player->LastDamageType.GetChars(); if (SetState(full_state_name)) { bOuchActive = use_ouch; @@ -443,7 +443,7 @@ int FMugShot::UpdateState(player_t *player, StateFlags stateflags) { full_state_name = "xdeath."; } - full_state_name += player->LastDamageType; + full_state_name += player->LastDamageType.GetChars(); SetState(full_state_name); bNormal = true; //Allow the face to return to alive states when the player respawns. } diff --git a/src/gamedata/a_weapons.cpp b/src/gamedata/a_weapons.cpp index fe57612226..735334275d 100644 --- a/src/gamedata/a_weapons.cpp +++ b/src/gamedata/a_weapons.cpp @@ -496,7 +496,7 @@ void FWeaponSlots::SetFromPlayer(PClassActor *type) { if (Slot[i] != NAME_None) { - Slots[i].AddWeaponList(Slot[i], false); + Slots[i].AddWeaponList(Slot[i].GetChars(), false); } } } diff --git a/src/gamedata/d_dehacked.cpp b/src/gamedata/d_dehacked.cpp index d59d743a79..a8e762420c 100644 --- a/src/gamedata/d_dehacked.cpp +++ b/src/gamedata/d_dehacked.cpp @@ -2115,7 +2115,7 @@ static int PatchCodePtrs (int dummy) { if (!symname.CompareNoCase(MBFCodePointers[i].alias)) { - symname = MBFCodePointers[i].name; + symname = MBFCodePointers[i].name.GetChars(); DPrintf(DMSG_SPAMMY, "%s --> %s\n", MBFCodePointers[i].alias, MBFCodePointers[i].name.GetChars()); ismbfcp = true; break; diff --git a/src/gamedata/decallib.cpp b/src/gamedata/decallib.cpp index 6cfffb3676..3b53409ad3 100644 --- a/src/gamedata/decallib.cpp +++ b/src/gamedata/decallib.cpp @@ -283,7 +283,7 @@ void FDecalLib::ReadAllDecals () FName v = ENamedName(intptr_t(def->DecalGenerator)); if (v.IsValidName()) { - def->DecalGenerator = ScanTreeForName (v, Root); + def->DecalGenerator = ScanTreeForName (v.GetChars(), Root); } } } @@ -809,7 +809,7 @@ void FDecalLib::AddDecal (FDecalBase *decal) // Check if this decal already exists. while (node != NULL) { - int lexx = stricmp (decal->Name, node->Name); + int lexx = stricmp (decal->Name.GetChars(), node->Name.GetChars()); if (lexx == 0) { break; @@ -910,7 +910,7 @@ FDecalBase *FDecalLib::ScanTreeForName (const char *name, FDecalBase *root) { while (root != NULL) { - int lexx = stricmp (name, root->Name); + int lexx = stricmp (name, root->Name.GetChars()); if (lexx == 0) { break; @@ -1145,7 +1145,7 @@ FDecalAnimator *FDecalLib::FindAnimator (const char *name) for (i = (int)Animators.Size ()-1; i >= 0; --i) { - if (stricmp (name, Animators[i]->Name) == 0) + if (stricmp (name, Animators[i]->Name.GetChars()) == 0) { return Animators[i]; } diff --git a/src/gamedata/fonts/v_font.cpp b/src/gamedata/fonts/v_font.cpp index 0e30ab2481..b18179321b 100644 --- a/src/gamedata/fonts/v_font.cpp +++ b/src/gamedata/fonts/v_font.cpp @@ -536,7 +536,7 @@ void V_InitFontColors () static int TranslationMapCompare (const void *a, const void *b) { - return int(((const TranslationMap *)a)->Name) - int(((const TranslationMap *)b)->Name); + return int(((const TranslationMap *)a)->Name.GetIndex()) - int(((const TranslationMap *)b)->Name.GetIndex()); } //========================================================================== diff --git a/src/gamedata/g_mapinfo.cpp b/src/gamedata/g_mapinfo.cpp index c7fc1c1726..f772397802 100644 --- a/src/gamedata/g_mapinfo.cpp +++ b/src/gamedata/g_mapinfo.cpp @@ -901,7 +901,7 @@ void FMapInfoParser::ParseNextMap(FString &mapname) FName seq = CheckEndSequence(); if (seq != NAME_None) { - mapname.Format("enDSeQ%04x", int(seq)); + mapname.Format("enDSeQ%04x", seq.GetIndex()); } } } @@ -1925,7 +1925,7 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo) sc.MustGetString(); mapname = sc.String; } - int levelindex = FindWadLevelInfo (mapname); + int levelindex = FindWadLevelInfo (mapname.GetChars()); if (levelindex == -1) { levelindex = wadlevelinfos.Reserve(1); @@ -1951,7 +1951,7 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo) } - levelinfo->MapName = mapname; + levelinfo->MapName = mapname.GetChars(); levelinfo->MapName.ToUpper(); sc.MustGetString (); if (sc.String[0] == '$') diff --git a/src/gamedata/gi.cpp b/src/gamedata/gi.cpp index 5076938c58..8179d7f913 100644 --- a/src/gamedata/gi.cpp +++ b/src/gamedata/gi.cpp @@ -456,6 +456,6 @@ void FMapInfoParser::ParseGameInfo() const char *gameinfo_t::GetFinalePage(unsigned int num) const { if (finalePages.Size() == 0) return "-NOFLAT-"; - else if (num < 1 || num > finalePages.Size()) return finalePages[0]; - else return finalePages[num-1]; + else if (num < 1 || num > finalePages.Size()) return finalePages[0].GetChars(); + else return finalePages[num-1].GetChars(); } diff --git a/src/gamedata/gi.h b/src/gamedata/gi.h index 65a9c64d2c..6118aa6209 100644 --- a/src/gamedata/gi.h +++ b/src/gamedata/gi.h @@ -36,6 +36,7 @@ #include "basics.h" #include "zstring.h" +#include "name.h" // Flags are not user configurable and only depend on the standard IWADs enum diff --git a/src/gamedata/umapinfo.cpp b/src/gamedata/umapinfo.cpp index 38046b0053..ce8d9cafe9 100644 --- a/src/gamedata/umapinfo.cpp +++ b/src/gamedata/umapinfo.cpp @@ -421,7 +421,7 @@ void CommitUMapinfo(level_info_t *defaultinfo) } if (name != NAME_None) { - levelinfo->NextMap.Format("enDSeQ%04x", int(name)); + levelinfo->NextMap.Format("enDSeQ%04x", name.GetIndex()); } } diff --git a/src/maploader/postprocessor.cpp b/src/maploader/postprocessor.cpp index 74dc576ead..c2d6051075 100644 --- a/src/maploader/postprocessor.cpp +++ b/src/maploader/postprocessor.cpp @@ -369,7 +369,7 @@ DEFINE_ACTION_FUNCTION(DLevelPostProcessor, GetThingStringArgument) const FName argument = thing < self->loader->MapThingsConverted.Size() ? self->loader->MapThingsConverted[thing].arg0str : NAME_None; - ACTION_RETURN_INT(argument); + ACTION_RETURN_INT(argument.GetIndex()); } DEFINE_ACTION_FUNCTION(DLevelPostProcessor, SetThingArgument) diff --git a/src/maploader/udmf.cpp b/src/maploader/udmf.cpp index bdc28d7ab8..dec5e69598 100644 --- a/src/maploader/udmf.cpp +++ b/src/maploader/udmf.cpp @@ -226,56 +226,56 @@ FName UDMFParserBase::ParseKey(bool checkblock, bool *isblock) // //=========================================================================== -int UDMFParserBase::CheckInt(const char *key) +int UDMFParserBase::CheckInt(FName key) { if (sc.TokenType != TK_IntConst) { - sc.ScriptMessage("Integer value expected for key '%s'", key); + sc.ScriptMessage("Integer value expected for key '%s'", key.GetChars()); } return sc.Number; } -double UDMFParserBase::CheckFloat(const char *key) +double UDMFParserBase::CheckFloat(FName key) { if (sc.TokenType != TK_IntConst && sc.TokenType != TK_FloatConst) { - sc.ScriptMessage("Floating point value expected for key '%s'", key); + sc.ScriptMessage("Floating point value expected for key '%s'", key.GetChars()); } return sc.Float; } -double UDMFParserBase::CheckCoordinate(const char *key) +double UDMFParserBase::CheckCoordinate(FName key) { if (sc.TokenType != TK_IntConst && sc.TokenType != TK_FloatConst) { - sc.ScriptMessage("Floating point value expected for key '%s'", key); + sc.ScriptMessage("Floating point value expected for key '%s'", key.GetChars()); } if (sc.Float < -32768 || sc.Float > 32768) { - sc.ScriptMessage("Value %f out of range for a coordinate '%s'. Valid range is [-32768 .. 32768]", sc.Float, key); + sc.ScriptMessage("Value %f out of range for a coordinate '%s'. Valid range is [-32768 .. 32768]", sc.Float, key.GetChars()); BadCoordinates = true; // If this happens the map must not allowed to be started. } return sc.Float; } -DAngle UDMFParserBase::CheckAngle(const char *key) +DAngle UDMFParserBase::CheckAngle(FName key) { return DAngle(CheckFloat(key)).Normalized360(); } -bool UDMFParserBase::CheckBool(const char *key) +bool UDMFParserBase::CheckBool(FName key) { if (sc.TokenType == TK_True) return true; if (sc.TokenType == TK_False) return false; - sc.ScriptMessage("Boolean value expected for key '%s'", key); + sc.ScriptMessage("Boolean value expected for key '%s'", key.GetChars()); return false; } -const char *UDMFParserBase::CheckString(const char *key) +const char *UDMFParserBase::CheckString(FName key) { if (sc.TokenType != TK_StringConst) { - sc.ScriptMessage("String value expected for key '%s'", key); + sc.ScriptMessage("String value expected for key '%s'", key.GetChars()); } return parsedString; } @@ -291,7 +291,7 @@ static int udmfcmp(const void *a, const void *b) FUDMFKey *A = (FUDMFKey*)a; FUDMFKey *B = (FUDMFKey*)b; - return int(A->Key) - int(B->Key); + return int(A->Key.GetIndex()) - int(B->Key.GetIndex()); } void FUDMFKeys::Sort() @@ -482,7 +482,7 @@ public: while (!sc.CheckToken('}')) { FName key = ParseKey(); - switch(key) + switch(key.GetIndex()) { case NAME_Id: th->thingid = CheckInt(key); @@ -530,7 +530,7 @@ public: case NAME_Arg3: case NAME_Arg4: CHECK_N(Hx | Zd | Zdt | Va) - th->args[int(key)-int(NAME_Arg0)] = CheckInt(key); + th->args[key.GetIndex() - int(NAME_Arg0)] = CheckInt(key); break; case NAME_Arg0Str: @@ -560,8 +560,8 @@ public: case NAME_Skill14: case NAME_Skill15: case NAME_Skill16: - if (CheckBool(key)) th->SkillFilter |= (1<<(int(key)-NAME_Skill1)); - else th->SkillFilter &= ~(1<<(int(key)-NAME_Skill1)); + if (CheckBool(key)) th->SkillFilter |= (1<<(key.GetIndex()-NAME_Skill1)); + else th->SkillFilter &= ~(1<<(key.GetIndex()-NAME_Skill1)); break; case NAME_Class1: @@ -581,8 +581,8 @@ public: case NAME_Class15: case NAME_Class16: CHECK_N(Hx | Zd | Zdt | Va) - if (CheckBool(key)) th->ClassFilter |= (1<<(int(key)-NAME_Class1)); - else th->ClassFilter &= ~(1<<(int(key)-NAME_Class1)); + if (CheckBool(key)) th->ClassFilter |= (1<<(key.GetIndex()-NAME_Class1)); + else th->ClassFilter &= ~(1<<(key.GetIndex()-NAME_Class1)); break; case NAME_Ambush: @@ -644,7 +644,7 @@ public: case NAME_Renderstyle: { FName style = CheckString(key); - switch (style) + switch (style.GetIndex()) { case NAME_None: th->RenderStyle = STYLE_None; @@ -760,11 +760,11 @@ public: } if (arg0str.IsNotEmpty() && (P_IsACSSpecial(th->special) || th->special == 0)) { - th->args[0] = -FName(arg0str); + th->args[0] = -FName(arg0str).GetIndex(); } if (arg1str.IsNotEmpty() && (P_IsThingSpecial(th->special) || th->special == 0)) { - th->args[1] = -FName(arg1str); + th->args[1] = -FName(arg1str).GetIndex(); } // Thing specials are only valid in namespaces with Hexen-type specials // and in ZDoomTranslated - which will use the translator on them. @@ -821,7 +821,7 @@ public: FName key = ParseKey(); // This switch contains all keys of the UDMF base spec - switch(key) + switch(key.GetIndex()) { case NAME_V1: ld->v1 = (vertex_t*)(intptr_t)CheckInt(key); // must be relocated later @@ -859,7 +859,7 @@ public: case NAME_Arg2: case NAME_Arg3: case NAME_Arg4: - ld->args[int(key)-int(NAME_Arg0)] = CheckInt(key); + ld->args[key.GetIndex()-int(NAME_Arg0)] = CheckInt(key); continue; case NAME_Arg0Str: @@ -938,7 +938,7 @@ public: } // This switch contains all keys of the UDMF base spec which only apply to Hexen format specials - if (!isTranslated) switch (key) + if (!isTranslated) switch (key.GetIndex()) { case NAME_Playercross: Flag(ld->activation, SPAC_Cross, key); @@ -985,7 +985,7 @@ public: } // This switch contains all keys which are ZDoom specific - if (namespace_bits & (Zd|Zdt|Va)) switch(key) + if (namespace_bits & (Zd|Zdt|Va)) switch(key.GetIndex()) { case NAME_Alpha: ld->setAlpha(CheckFloat(key)); @@ -1156,11 +1156,11 @@ public: } if (arg0str.IsNotEmpty() && (P_IsACSSpecial(ld->special) || ld->special == 0)) { - ld->args[0] = -FName(arg0str); + ld->args[0] = -FName(arg0str).GetIndex(); } if (arg1str.IsNotEmpty() && (P_IsThingSpecial(ld->special) || ld->special == 0)) { - ld->args[1] = -FName(arg1str); + ld->args[1] = -FName(arg1str).GetIndex(); } if ((ld->flags & ML_3DMIDTEX_IMPASS) && !(ld->flags & ML_3DMIDTEX)) // [TP] { @@ -1190,7 +1190,7 @@ public: while (!sc.CheckToken('}')) { FName key = ParseKey(); - switch(key) + switch(key.GetIndex()) { case NAME_Offsetx: @@ -1221,7 +1221,7 @@ public: break; } - if (namespace_bits & (Zd|Zdt|Va)) switch(key) + if (namespace_bits & (Zd|Zdt|Va)) switch(key.GetIndex()) { case NAME_offsetx_top: sd->SetTextureXOffset(side_t::top, CheckFloat(key)); @@ -1496,7 +1496,7 @@ public: while (!sc.CheckToken('}')) { FName key = ParseKey(); - switch(key) + switch(key.GetIndex()) { case NAME_Heightfloor: sec->SetPlaneTexZ(sector_t::floor, CheckCoordinate(key)); @@ -1536,7 +1536,7 @@ public: break; } - if (namespace_bits & (Zd|Zdt|Va)) switch(key) + if (namespace_bits & (Zd|Zdt|Va)) switch(key.GetIndex()) { case NAME_Xpanningfloor: sec->SetXOffset(sector_t::floor, CheckFloat(key)); @@ -2028,7 +2028,7 @@ public: while (!sc.CheckToken('}')) { FName key = ParseKey(); - switch (key) + switch (key.GetIndex()) { case NAME_X: x = CheckCoordinate(key); @@ -2168,7 +2168,7 @@ public: sc.MustGetStringName("="); sc.MustGetString(); namespc = sc.String; - switch(namespc) + switch(namespc.GetIndex()) { case NAME_ZDoom: namespace_bits = Zd; diff --git a/src/maploader/udmf.h b/src/maploader/udmf.h index a6f402bf1f..ed18345b54 100644 --- a/src/maploader/udmf.h +++ b/src/maploader/udmf.h @@ -15,15 +15,15 @@ protected: void Skip(); FName ParseKey(bool checkblock = false, bool *isblock = NULL); - int CheckInt(const char *key); - double CheckFloat(const char *key); - double CheckCoordinate(const char *key); - DAngle CheckAngle(const char *key); - bool CheckBool(const char *key); - const char *CheckString(const char *key); + int CheckInt(FName key); + double CheckFloat(FName key); + double CheckCoordinate(FName key); + DAngle CheckAngle(FName key); + bool CheckBool(FName key); + const char *CheckString(FName key); template - bool Flag(T &value, int mask, const char *key) + bool Flag(T &value, int mask, FName key) { if (CheckBool(key)) { diff --git a/src/maploader/usdf.cpp b/src/maploader/usdf.cpp index 6acd483fac..5ceced0db9 100644 --- a/src/maploader/usdf.cpp +++ b/src/maploader/usdf.cpp @@ -57,7 +57,7 @@ class USDFParser : public UDMFParserBase // //=========================================================================== - PClassActor *CheckActorType(const char *key) + PClassActor *CheckActorType(FName key) { PClassActor *type = nullptr; if (namespace_bits == St) @@ -77,7 +77,7 @@ class USDFParser : public UDMFParserBase return type; } - PClassActor *CheckInventoryActorType(const char *key) + PClassActor *CheckInventoryActorType(FName key) { PClassActor* const type = CheckActorType(key); return nullptr != type && type->IsDescendantOf(NAME_Inventory) ? type : nullptr; @@ -98,7 +98,7 @@ class USDFParser : public UDMFParserBase while (!sc.CheckToken('}')) { FName key = ParseKey(); - switch(key) + switch(key.GetIndex()) { case NAME_Item: check.Item = CheckInventoryActorType(key); @@ -110,7 +110,7 @@ class USDFParser : public UDMFParserBase } } - switch (type) + switch (type.GetIndex()) { case NAME_Cost: response->ItemCheck.Push(check); break; case NAME_Require: response->ItemCheckRequire.Push(check); break; @@ -147,7 +147,7 @@ class USDFParser : public UDMFParserBase FName key = ParseKey(true, &block); if (!block) { - switch(key) + switch(key.GetIndex()) { case NAME_Text: ReplyString = CheckString(key); @@ -216,7 +216,7 @@ class USDFParser : public UDMFParserBase case NAME_Arg2: case NAME_Arg3: case NAME_Arg4: - reply->Args[int(key)-int(NAME_Arg0)] = CheckInt(key); + reply->Args[key.GetIndex()-int(NAME_Arg0)] = CheckInt(key); break; @@ -224,7 +224,7 @@ class USDFParser : public UDMFParserBase } else { - switch(key) + switch(key.GetIndex()) { case NAME_Cost: case NAME_Require: @@ -288,7 +288,7 @@ class USDFParser : public UDMFParserBase while (!sc.CheckToken('}')) { FName key = ParseKey(); - switch(key) + switch(key.GetIndex()) { case NAME_Item: check.Item = CheckInventoryActorType(key); @@ -329,7 +329,7 @@ class USDFParser : public UDMFParserBase FName key = ParseKey(true, &block); if (!block) { - switch(key) + switch(key.GetIndex()) { case NAME_Pagename: if (namespace_bits != Gz) @@ -395,7 +395,7 @@ class USDFParser : public UDMFParserBase } else { - switch(key) + switch(key.GetIndex()) { case NAME_Ifitem: if (!ParseIfItem(node)) return false; @@ -437,7 +437,7 @@ class USDFParser : public UDMFParserBase FName key = ParseKey(true, &block); if (!block) { - switch(key) + switch(key.GetIndex()) { case NAME_Actor: type = CheckActorType(key); @@ -464,7 +464,7 @@ class USDFParser : public UDMFParserBase } else { - switch(key) + switch(key.GetIndex()) { case NAME_Page: if (!ParsePage()) return false; @@ -571,7 +571,7 @@ public: sc.MustGetToken('='); sc.MustGetToken(TK_StringConst); namespc = sc.String; - switch(namespc) + switch(namespc.GetIndex()) { case NAME_GZDoom: namespace_bits = Gz; diff --git a/src/menu/menu.cpp b/src/menu/menu.cpp index 2c94cffb09..df976592fd 100644 --- a/src/menu/menu.cpp +++ b/src/menu/menu.cpp @@ -146,7 +146,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DMenuDescriptor, GetDescriptor, GetMenuDescriptor) { PARAM_PROLOGUE; PARAM_NAME(name); - ACTION_RETURN_OBJECT(GetMenuDescriptor(name)); + ACTION_RETURN_OBJECT(GetMenuDescriptor(name.GetIndex())); } size_t DListMenuDescriptor::PropagateMark() @@ -418,7 +418,7 @@ EXTERN_CVAR(Int, cl_gfxlocalization) void M_SetMenu(FName menu, int param) { // some menus need some special treatment - switch (menu) + switch (menu.GetIndex()) { case NAME_Mainmenu: if (gameinfo.gametype & GAME_DoomStrifeChex) // Raven's games always used text based menus diff --git a/src/p_states.cpp b/src/p_states.cpp index 50adf53c6e..ab38a7f635 100644 --- a/src/p_states.cpp +++ b/src/p_states.cpp @@ -202,7 +202,7 @@ TArray &MakeStateNameList(const char * fname) // Handle the old names for the existing death states char *name = copystring(fname); firstpart = strtok(name, "."); - switch (firstpart) + switch (firstpart.GetIndex()) { case NAME_Burn: firstpart = NAME_Death; @@ -520,7 +520,7 @@ static int labelcmp(const void *a, const void *b) { FStateLabel *A = (FStateLabel *)a; FStateLabel *B = (FStateLabel *)b; - return ((int)A->Label - (int)B->Label); + return ((int)A->Label.GetIndex() - (int)B->Label.GetIndex()); } FStateLabels *FStateDefinitions::CreateStateLabelList(TArray & statelist) diff --git a/src/playsim/a_dynlight.cpp b/src/playsim/a_dynlight.cpp index b538a769f6..82d4d94ada 100644 --- a/src/playsim/a_dynlight.cpp +++ b/src/playsim/a_dynlight.cpp @@ -912,7 +912,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, A_AttachLight, AttachLightDirect) PARAM_FLOAT(spoti); PARAM_FLOAT(spoto); PARAM_FLOAT(spotp); - ACTION_RETURN_BOOL(AttachLightDirect(self, lightid, type, color, radius1, radius2, flags, ofs_x, ofs_y, ofs_z, parami, spoti, spoto, spotp)); + ACTION_RETURN_BOOL(AttachLightDirect(self, lightid.GetIndex(), type, color, radius1, radius2, flags, ofs_x, ofs_y, ofs_z, parami, spoti, spoto, spotp)); } //========================================================================== @@ -939,7 +939,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, A_RemoveLight, RemoveLight) { PARAM_SELF_PROLOGUE(AActor); PARAM_NAME(lightid); - ACTION_RETURN_BOOL(RemoveLight(self, lightid)); + ACTION_RETURN_BOOL(RemoveLight(self, lightid.GetIndex())); } diff --git a/src/playsim/actor.h b/src/playsim/actor.h index d7ccf45dfb..b022c5167e 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -605,6 +605,11 @@ inline AActor *GetDefaultByName (const char *name) return (AActor *)(PClass::FindClass(name)->Defaults); } +inline AActor* GetDefaultByName(FName name) +{ + return (AActor*)(PClass::FindClass(name)->Defaults); +} + inline AActor *GetDefaultByType (const PClass *type) { return (AActor *)(type->Defaults); diff --git a/src/playsim/bots/b_think.cpp b/src/playsim/bots/b_think.cpp index 4152e475d7..0d9f266474 100644 --- a/src/playsim/bots/b_think.cpp +++ b/src/playsim/bots/b_think.cpp @@ -387,8 +387,8 @@ void DBot::WhatToGet (AActor *item) else if (item->GetClass()->TypeName == NAME_Megasphere || item->IsKindOf(NAME_Health)) { // do the test with the health item that's actually given. - AActor* const testItem = NAME_Megasphere == item->GetClass()->TypeName - ? GetDefaultByName("MegasphereHealth") + AActor* const testItem = item->GetClass()->TypeName == NAME_Megasphere + ? GetDefaultByName(NAME_MegasphereHealth) : item; if (nullptr != testItem) { diff --git a/src/playsim/fragglescript/t_func.cpp b/src/playsim/fragglescript/t_func.cpp index 69b819202b..d5c05b0e12 100644 --- a/src/playsim/fragglescript/t_func.cpp +++ b/src/playsim/fragglescript/t_func.cpp @@ -2421,7 +2421,7 @@ void FParser::SF_PlayerKeys(void) if(t_argc == 2) { t_return.type = svt_int; - t_return.value.i = CheckInventory(Level->Players[playernum]->mo, keyname); + t_return.value.i = CheckInventory(Level->Players[playernum]->mo, keyname.GetChars()); return; } else diff --git a/src/playsim/fragglescript/t_variable.cpp b/src/playsim/fragglescript/t_variable.cpp index cc2a558da3..8c596832df 100644 --- a/src/playsim/fragglescript/t_variable.cpp +++ b/src/playsim/fragglescript/t_variable.cpp @@ -102,7 +102,7 @@ const char *stringvalue(const svalue_t & v) case svt_mobj: // return the class name - return (const char *)v.value.mobj->GetClass()->TypeName; + return (const char *)v.value.mobj->GetClass()->TypeName.GetChars(); case svt_fixed: { diff --git a/src/playsim/p_acs.cpp b/src/playsim/p_acs.cpp index f1ecd26e59..17ccd2dc5f 100644 --- a/src/playsim/p_acs.cpp +++ b/src/playsim/p_acs.cpp @@ -2909,7 +2909,7 @@ void FBehavior::LoadScriptsDirectory () { const char *str = (const char *)(scripts.b + 8 + scripts.dw[3 + (-Scripts[i].Number - 1)]); FName name(str); - Scripts[i].Number = -name; + Scripts[i].Number = -name.GetIndex(); } } // We need to resort scripts, because the new numbers for named scripts likely @@ -4393,13 +4393,13 @@ int DLevelScript::GetActorProperty (int tid, int property) case APROP_PainSound: return GlobalACSStrings.AddString(S_GetSoundName(actor->PainSound)); case APROP_DeathSound: return GlobalACSStrings.AddString(S_GetSoundName(actor->DeathSound)); case APROP_ActiveSound: return GlobalACSStrings.AddString(S_GetSoundName(actor->ActiveSound)); - case APROP_Species: return GlobalACSStrings.AddString(actor->GetSpecies()); + case APROP_Species: return GlobalACSStrings.AddString(actor->GetSpecies().GetChars()); case APROP_NameTag: return GlobalACSStrings.AddString(actor->GetTag()); case APROP_StencilColor:return actor->fillcolor; case APROP_Friction: return DoubleToACS(actor->Friction); case APROP_MaxStepHeight: return DoubleToACS(actor->MaxStepHeight); case APROP_MaxDropOffHeight: return DoubleToACS(actor->MaxDropOffHeight); - case APROP_DamageType: return GlobalACSStrings.AddString(actor->DamageType); + case APROP_DamageType: return GlobalACSStrings.AddString(actor->DamageType.GetChars()); default: return 0; } @@ -4470,9 +4470,9 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value) case APROP_PainSound: string = S_GetSoundName(actor->PainSound); break; case APROP_DeathSound: string = S_GetSoundName(actor->DeathSound); break; case APROP_ActiveSound: string = S_GetSoundName(actor->ActiveSound); break; - case APROP_Species: string = actor->GetSpecies(); break; + case APROP_Species: string = actor->GetSpecies().GetChars(); break; case APROP_NameTag: string = actor->GetTag(); break; - case APROP_DamageType: string = actor->DamageType; break; + case APROP_DamageType: string = actor->DamageType.GetChars(); break; } if (string == NULL) string = ""; return (!stricmp(string, Level->Behaviors.LookupString(value))); @@ -5262,7 +5262,7 @@ int DLevelScript::SwapActorTeleFog(AActor *activator, int tid) VMCall(func, ¶ms[0], params.Size(), &ret, 1); if (rettype == TypeName) { - retval = GlobalACSStrings.AddString(FName(ENamedName(retval))); + retval = GlobalACSStrings.AddString(FName(ENamedName(retval)).GetChars()); } else if (rettype == TypeSound) { @@ -5744,7 +5744,7 @@ int DLevelScript::CallFunction(int argCount, int funcIndex, int32_t *args) case ACSF_ACS_NamedExecuteWithResult: case ACSF_ACS_NamedExecuteAlways: { - int scriptnum = -FName(Level->Behaviors.LookupString(args[0])); + int scriptnum = -FName(Level->Behaviors.LookupString(args[0])).GetIndex(); int arg1 = argCount > 1 ? args[1] : 0; int arg2 = argCount > 2 ? args[2] : 0; int arg3 = argCount > 3 ? args[3] : 0; @@ -6609,7 +6609,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) auto a = Level->SingleActorFromTID(args[0], activator); if (a != nullptr) { - return GlobalACSStrings.AddString(Terrains[a->floorterrain].Name); + return GlobalACSStrings.AddString(Terrains[a->floorterrain].Name.GetChars()); } else { @@ -6619,7 +6619,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) } case ACSF_StrArg: - return -FName(Level->Behaviors.LookupString(args[0])); + return -FName(Level->Behaviors.LookupString(args[0])).GetIndex(); case ACSF_Floor: return args[0] & ~0xffff; @@ -8322,7 +8322,7 @@ scriptwait: } case PCD_SCRIPTWAITNAMED: - statedata = -FName(Level->Behaviors.LookupString(STACK(1))); + statedata = -FName(Level->Behaviors.LookupString(STACK(1))).GetIndex(); sp--; goto scriptwait; @@ -8969,7 +8969,7 @@ scriptwait: if (specnum >= -ACSF_ACS_NamedExecuteAlways && specnum <= -ACSF_ACS_NamedExecute) { specnum = NamedACSToNormalACS[-specnum - ACSF_ACS_NamedExecute]; - arg0 = -FName(Level->Behaviors.LookupString(arg0)); + arg0 = -FName(Level->Behaviors.LookupString(arg0)).GetIndex(); } auto itr = Level->GetLineIdIterator(STACK(7)); @@ -8998,7 +8998,7 @@ scriptwait: if (specnum >= -ACSF_ACS_NamedExecuteAlways && specnum <= -ACSF_ACS_NamedExecute) { specnum = NamedACSToNormalACS[-specnum - ACSF_ACS_NamedExecute]; - arg0 = -FName(Level->Behaviors.LookupString(arg0)); + arg0 = -FName(Level->Behaviors.LookupString(arg0)).GetIndex(); } if (STACK(7) != 0) diff --git a/src/playsim/p_actionfunctions.cpp b/src/playsim/p_actionfunctions.cpp index aba724cd63..78dce58526 100644 --- a/src/playsim/p_actionfunctions.cpp +++ b/src/playsim/p_actionfunctions.cpp @@ -715,13 +715,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_PlaySoundEx) if (!looping) { - S_Sound (self, int(channel) - NAME_Auto, 0, soundid, 1, attenuation); + S_Sound (self, channel.GetIndex() - NAME_Auto, 0, soundid, 1, attenuation); } else { - if (!S_IsActorPlayingSomething (self, int(channel) - NAME_Auto, soundid)) + if (!S_IsActorPlayingSomething (self, channel.GetIndex() - NAME_Auto, soundid)) { - S_Sound (self, (int(channel) - NAME_Auto), CHANF_LOOP, soundid, 1, attenuation); + S_Sound (self, (channel.GetIndex() - NAME_Auto), CHANF_LOOP, soundid, 1, attenuation); } } return 0; @@ -734,7 +734,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_StopSoundEx) if (channel > NAME_Auto && channel <= NAME_SoundSlot7) { - S_StopSound (self, int(channel) - NAME_Auto); + S_StopSound (self, channel.GetIndex() - NAME_Auto); } return 0; } @@ -1302,7 +1302,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Print) if (fontname != NAME_None) { - font = V_GetFont(fontname); + font = V_GetFont(fontname.GetChars()); } if (time > 0) { @@ -1334,7 +1334,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_PrintBold) if (text[0] == '$') text = GStrings(&text[1]); if (fontname != NAME_None) { - font = V_GetFont(fontname); + font = V_GetFont(fontname.GetChars()); } if (time > 0) { diff --git a/src/playsim/p_enemy.cpp b/src/playsim/p_enemy.cpp index 88e0f37acb..7089c74e25 100644 --- a/src/playsim/p_enemy.cpp +++ b/src/playsim/p_enemy.cpp @@ -3010,13 +3010,13 @@ DEFINE_ACTION_FUNCTION(AActor, A_Pain) { FString pain_sound = pain_amount; pain_sound += '-'; - pain_sound += self->player->LastDamageType; + pain_sound += self->player->LastDamageType.GetChars(); sfx_id = pain_sound; if (sfx_id == 0) { // Try again without a specific pain amount. pain_sound = "*pain-"; - pain_sound += self->player->LastDamageType; + pain_sound += self->player->LastDamageType.GetChars(); sfx_id = pain_sound; } } diff --git a/src/playsim/p_interaction.cpp b/src/playsim/p_interaction.cpp index f6dadb2105..8263790812 100644 --- a/src/playsim/p_interaction.cpp +++ b/src/playsim/p_interaction.cpp @@ -220,7 +220,7 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgf if (attacker == nullptr && obit.IsNotEmpty()) messagename = obit; else { - switch (mod) + switch (mod.GetIndex()) { case NAME_Suicide: messagename = "$OB_SUICIDE"; break; case NAME_Falling: messagename = "$OB_FALLING"; break; diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index 7208305ddb..80b430917c 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -4012,7 +4012,7 @@ void AActor::Tick () // Check for poison damage, but only once per PoisonPeriod tics (or once per second if none). if (PoisonDurationReceived && (Level->time % (PoisonPeriodReceived ? PoisonPeriodReceived : TICRATE) == 0)) { - P_DamageMobj(this, NULL, Poisoner, PoisonDamageReceived, PoisonDamageTypeReceived ? PoisonDamageTypeReceived : (FName)NAME_Poison, 0); + P_DamageMobj(this, NULL, Poisoner, PoisonDamageReceived, PoisonDamageTypeReceived != NAME_None ? PoisonDamageTypeReceived : (FName)NAME_Poison, 0); --PoisonDurationReceived; @@ -5536,7 +5536,7 @@ AActor *FLevelLocals::SpawnMapThing (FMapThing *mthing, int position) { if (mthing->arg0str != NAME_None) { - PalEntry color = V_GetColor(nullptr, mthing->arg0str); + PalEntry color = V_GetColor(nullptr, mthing->arg0str.GetChars()); mobj->args[0] = color.r; mobj->args[1] = color.g; mobj->args[2] = color.b; @@ -7262,7 +7262,7 @@ int AActor::GetModifiedDamage(FName damagetype, int damage, bool passive, AActor { IFVIRTUALPTRNAME(inv, NAME_Inventory, ModifyDamage) { - VMValue params[8] = { (DObject*)inv, damage, int(damagetype), &damage, passive, inflictor, source, flags }; + VMValue params[8] = { (DObject*)inv, damage, damagetype.GetIndex(), &damage, passive, inflictor, source, flags }; VMCall(func, params, 8, nullptr, 0); } inv = inv->Inventory; diff --git a/src/playsim/p_user.cpp b/src/playsim/p_user.cpp index bfc59d9bef..ad5ae3f70f 100644 --- a/src/playsim/p_user.cpp +++ b/src/playsim/p_user.cpp @@ -227,7 +227,7 @@ void SetupPlayerClasses () for (unsigned i = 0; i < gameinfo.PlayerClasses.Size(); i++) { PClassActor *cls = PClass::FindActor(gameinfo.PlayerClasses[i]); - if (ValidatePlayerClass(cls, gameinfo.PlayerClasses[i])) + if (ValidatePlayerClass(cls, gameinfo.PlayerClasses[i].GetChars())) { newclass.Flags = 0; newclass.Type = cls; @@ -912,27 +912,27 @@ DEFINE_ACTION_FUNCTION(AActor, A_PlayerScream) if (!sound && self->special1<10) { // Wimpy death sound - sound = S_FindSkinnedSoundEx (self, "*wimpydeath", self->player->LastDamageType); + sound = S_FindSkinnedSoundEx (self, "*wimpydeath", self->player->LastDamageType.GetChars()); } if (!sound && self->health <= -50) { if (self->health > -100) { // Crazy death sound - sound = S_FindSkinnedSoundEx (self, "*crazydeath", self->player->LastDamageType); + sound = S_FindSkinnedSoundEx (self, "*crazydeath", self->player->LastDamageType.GetChars()); } if (!sound) { // Extreme death sound - sound = S_FindSkinnedSoundEx (self, "*xdeath", self->player->LastDamageType); + sound = S_FindSkinnedSoundEx (self, "*xdeath", self->player->LastDamageType.GetChars()); if (!sound) { - sound = S_FindSkinnedSoundEx (self, "*gibbed", self->player->LastDamageType); + sound = S_FindSkinnedSoundEx (self, "*gibbed", self->player->LastDamageType.GetChars()); chan = CHAN_BODY; } } } if (!sound) { // Normal death sound - sound = S_FindSkinnedSoundEx (self, "*death", self->player->LastDamageType); + sound = S_FindSkinnedSoundEx (self, "*death", self->player->LastDamageType.GetChars()); } if (chan != CHAN_VOICE) diff --git a/src/r_data/r_translate.cpp b/src/r_data/r_translate.cpp index cf06d4dc54..c5b6a4ef68 100644 --- a/src/r_data/r_translate.cpp +++ b/src/r_data/r_translate.cpp @@ -708,7 +708,7 @@ static TMap customTranslationMap; int R_FindCustomTranslation(FName name) { - switch (name) + switch (name.GetIndex()) { case NAME_Ice: // Ice is a special case which will remain in its original slot. @@ -738,7 +738,7 @@ int R_FindCustomTranslation(FName name) return TRANSLATION(TRANSLATION_Players, name.GetIndex() - NAME_Player1); } - int *t = customTranslationMap.CheckKey(FName(name, true)); + int *t = customTranslationMap.CheckKey(name); return (t != nullptr)? *t : -1; } diff --git a/src/r_data/sprites.cpp b/src/r_data/sprites.cpp index 2bab762776..f13f65423c 100644 --- a/src/r_data/sprites.cpp +++ b/src/r_data/sprites.cpp @@ -1014,7 +1014,7 @@ void R_InitSprites () Skins[i].Name = "Base"; auto face = basetype->NameVar(NAME_Face); - Skins[i].Face = face == NAME_None? FName("STF") : face; + Skins[i].Face = face == NAME_None? "STF" : face.GetChars(); Skins[i].range0start = basetype->IntVar(NAME_ColorRangeStart); Skins[i].range0end = basetype->IntVar(NAME_ColorRangeEnd); Skins[i].Scale = basetype->Scale; diff --git a/src/scripting/backend/codegen.cpp b/src/scripting/backend/codegen.cpp index 993e9d469e..569ae00b67 100644 --- a/src/scripting/backend/codegen.cpp +++ b/src/scripting/backend/codegen.cpp @@ -6164,7 +6164,7 @@ FxExpression *FxIdentifier::Resolve(FCompileContext& ctx) } // and line specials - if (newex == nullptr && (num = P_FindLineSpecial(Identifier, nullptr, nullptr))) + if (newex == nullptr && (num = P_FindLineSpecial(Identifier.GetChars(), nullptr, nullptr))) { ScriptPosition.Message(MSG_DEBUGLOG, "Resolving name '%s' as line special %d\n", Identifier.GetChars(), num); newex = new FxConstant(num, ScriptPosition); @@ -6371,7 +6371,7 @@ FxExpression *FxMemberIdentifier::Resolve(FCompileContext& ctx) // Thanks to the messed up search logic of the type system, which doesn't allow any search by type name for the basic types at all, // we have to do this manually, though and check for all types that may have values attached explicitly. // (What's the point of attached fields to types if you cannot even search for the types...???) - switch (id) + switch (id.GetIndex()) { default: type = nullptr; @@ -7674,7 +7674,7 @@ FxFunctionCall::FxFunctionCall(FName methodname, FName rngname, FArgumentList &a ArgList = std::move(args); if (rngname != NAME_None) { - switch (MethodName) + switch (MethodName.GetIndex()) { case NAME_Random: case NAME_FRandom: @@ -7870,7 +7870,7 @@ FxExpression *FxFunctionCall::Resolve(FCompileContext& ctx) // Note that for all builtins the used arguments have to be nulled in the ArgList so that they won't get deleted before they get used. FxExpression *func = nullptr; - switch (MethodName) + switch (MethodName.GetIndex()) { case NAME_Color: if (ArgList.Size() == 3 || ArgList.Size() == 4) @@ -8215,7 +8215,7 @@ FxExpression *FxMemberFunctionCall::Resolve(FCompileContext& ctx) // No need to create a dedicated node here, all builtins map directly to trivial operations. Self->ValueType = TypeSInt32; // all builtins treat the texture index as integer. FxExpression *x; - switch (MethodName) + switch (MethodName.GetIndex()) { case NAME_IsValid: x = new FxCompareRel('>', Self, new FxConstant(0, ScriptPosition)); @@ -8741,7 +8741,7 @@ ExpEmit FxActionSpecialCall::Emit(VMFunctionBuilder *build) { assert(argex->ValueType == TypeName); assert(argex->isConstant()); - emitters.AddParameterIntConst(-static_cast(argex)->GetValue().GetName()); + emitters.AddParameterIntConst(-static_cast(argex)->GetValue().GetName().GetIndex()); } else { @@ -10195,7 +10195,7 @@ FxExpression *FxCaseStatement::Resolve(FCompileContext &ctx) } else { - CaseValue = static_cast(Condition)->GetValue().GetName(); + CaseValue = static_cast(Condition)->GetValue().GetName().GetIndex(); } } return this; @@ -10999,7 +10999,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DObject, BuiltinNameToClass, NativeNameToClass) PARAM_NAME(clsname); PARAM_CLASS(desttype, DObject); - ACTION_RETURN_POINTER(NativeNameToClass(clsname, desttype)); + ACTION_RETURN_POINTER(NativeNameToClass(clsname.GetIndex(), desttype)); } ExpEmit FxClassTypeCast::Emit(VMFunctionBuilder *build) diff --git a/src/scripting/backend/codegen.h b/src/scripting/backend/codegen.h index 4588f2447b..2ab7f8104d 100644 --- a/src/scripting/backend/codegen.h +++ b/src/scripting/backend/codegen.h @@ -463,7 +463,7 @@ public: FxConstant(FName val, const FScriptPosition &pos) : FxExpression(EFX_Constant, pos) { ValueType = value.Type = TypeName; - value.Int = val; + value.Int = val.GetIndex(); isresolved = true; } diff --git a/src/scripting/backend/vmbuilder.cpp b/src/scripting/backend/vmbuilder.cpp index 8a6800d46b..78d9499d17 100644 --- a/src/scripting/backend/vmbuilder.cpp +++ b/src/scripting/backend/vmbuilder.cpp @@ -872,7 +872,7 @@ void FFunctionBuildList::Build() // Emit code try { - sfunc->SourceFileName = item.Code->ScriptPosition.FileName; // remember the file name for printing error messages if something goes wrong in the VM. + sfunc->SourceFileName = item.Code->ScriptPosition.FileName.GetChars(); // remember the file name for printing error messages if something goes wrong in the VM. buildit.BeginStatement(item.Code); item.Code->Emit(&buildit); buildit.EndStatement(); diff --git a/src/scripting/decorate/olddecorations.cpp b/src/scripting/decorate/olddecorations.cpp index 533a39e1a6..f0749048cd 100644 --- a/src/scripting/decorate/olddecorations.cpp +++ b/src/scripting/decorate/olddecorations.cpp @@ -113,7 +113,7 @@ void ParseOldDecoration(FScanner &sc, EDefinitionType def, PNamespace *ns) bag.fromDecorate = true; bag.Version = { 2, 0, 0 }; #ifdef _DEBUG - bag.ClassName = type->TypeName; + bag.ClassName = type->TypeName.GetChars(); #endif sc.MustGetStringName("{"); diff --git a/src/scripting/decorate/thingdef_exp.cpp b/src/scripting/decorate/thingdef_exp.cpp index 9b78a5f28d..8030680f31 100644 --- a/src/scripting/decorate/thingdef_exp.cpp +++ b/src/scripting/decorate/thingdef_exp.cpp @@ -486,7 +486,7 @@ static FxExpression *ParseExpression0 (FScanner &sc, PClassActor *cls) FName identifier = FName(sc.String); PFunction *func; - switch (identifier) + switch (identifier.GetIndex()) { case NAME_Random: case NAME_FRandom: @@ -519,7 +519,7 @@ static FxExpression *ParseExpression0 (FScanner &sc, PClassActor *cls) } if (sc.CheckToken('(')) { - switch (identifier) + switch (identifier.GetIndex()) { case NAME_Min: case NAME_Max: diff --git a/src/scripting/decorate/thingdef_parse.cpp b/src/scripting/decorate/thingdef_parse.cpp index a762c89810..ca0a2e44a8 100644 --- a/src/scripting/decorate/thingdef_parse.cpp +++ b/src/scripting/decorate/thingdef_parse.cpp @@ -1124,7 +1124,7 @@ static PClassActor *ParseActorHeader(FScanner &sc, Baggage *bag) bag->Info = info; bag->Lumpnum = sc.LumpNum; #ifdef _DEBUG - bag->ClassName = typeName; + bag->ClassName = typeName.GetChars(); #endif return info; } diff --git a/src/scripting/decorate/thingdef_states.cpp b/src/scripting/decorate/thingdef_states.cpp index a16e62b774..9443854034 100644 --- a/src/scripting/decorate/thingdef_states.cpp +++ b/src/scripting/decorate/thingdef_states.cpp @@ -703,7 +703,7 @@ void ParseFunctionParameters(FScanner &sc, PClassActor *cls, TArrayDecalGenerator = (FDecalBase *)intptr_t(int(FName(str))); + defaults->DecalGenerator = (FDecalBase *)(intptr_t)FName(str).GetIndex(); } //========================================================================== diff --git a/src/scripting/types.cpp b/src/scripting/types.cpp index aee0b3b0aa..726621716c 100644 --- a/src/scripting/types.cpp +++ b/src/scripting/types.cpp @@ -422,7 +422,7 @@ bool PContainerType::IsMatch(intptr_t id1, intptr_t id2) const void PContainerType::GetTypeIDs(intptr_t &id1, intptr_t &id2) const { id1 = (intptr_t)Outer; - id2 = TypeName; + id2 = TypeName.GetIndex(); } /* PInt *******************************************************************/ @@ -1612,11 +1612,11 @@ PEnum *NewEnum(FName name, PTypeBase *outer) { size_t bucket; if (outer == nullptr) outer = Namespaces.GlobalNamespace; - PType *etype = TypeTable.FindType(NAME_Enum, (intptr_t)outer, (intptr_t)name, &bucket); + PType *etype = TypeTable.FindType(NAME_Enum, (intptr_t)outer, name.GetIndex(), &bucket); if (etype == nullptr) { etype = new PEnum(name, outer); - TypeTable.AddType(etype, NAME_Enum, (intptr_t)outer, (intptr_t)name, bucket); + TypeTable.AddType(etype, NAME_Enum, (intptr_t)outer, name.GetIndex(), bucket); } return static_cast(etype); } @@ -2298,11 +2298,11 @@ PStruct *NewStruct(FName name, PTypeBase *outer, bool native) { size_t bucket; if (outer == nullptr) outer = Namespaces.GlobalNamespace; - PType *stype = TypeTable.FindType(NAME_Struct, (intptr_t)outer, (intptr_t)name, &bucket); + PType *stype = TypeTable.FindType(NAME_Struct, (intptr_t)outer, name.GetIndex(), &bucket); if (stype == nullptr) { stype = new PStruct(name, outer, native); - TypeTable.AddType(stype, NAME_Struct, (intptr_t)outer, (intptr_t)name, bucket); + TypeTable.AddType(stype, NAME_Struct, (intptr_t)outer, name.GetIndex(), bucket); } return static_cast(stype); } @@ -2425,11 +2425,11 @@ PField *PClassType::AddNativeField(FName name, PType *type, size_t address, uint PClassType *NewClassType(PClass *cls) { size_t bucket; - PType *ptype = TypeTable.FindType(NAME_Object, 0, (intptr_t)cls->TypeName, &bucket); + PType *ptype = TypeTable.FindType(NAME_Object, 0, cls->TypeName.GetIndex(), &bucket); if (ptype == nullptr) { ptype = new PClassType(cls); - TypeTable.AddType(ptype, NAME_Object, 0, (intptr_t)cls->TypeName, bucket); + TypeTable.AddType(ptype, NAME_Object, 0, cls->TypeName.GetIndex(), bucket); } return static_cast(ptype); } @@ -2507,7 +2507,7 @@ void FTypeTable::AddType(PType *type, FName type_name) size_t FTypeTable::Hash(FName p1, intptr_t p2, intptr_t p3) { - size_t i1 = (size_t)p1; + size_t i1 = (size_t)p1.GetIndex(); // Swap the high and low halves of i1. The compiler should be smart enough // to transform this into a ROR or ROL. diff --git a/src/scripting/vm/jit_move.cpp b/src/scripting/vm/jit_move.cpp index f9383eabab..b575399c74 100644 --- a/src/scripting/vm/jit_move.cpp +++ b/src/scripting/vm/jit_move.cpp @@ -46,7 +46,7 @@ static void CastV32S(FString *a, double b, double b1, double b2) { a->Format("(% static void CastP2S(FString *a, void *b) { if (b == nullptr) *a = "null"; else a->Format("%p", b); } static int CastS2I(FString *b) { return (int)b->ToLong(); } static double CastS2F(FString *b) { return b->ToDouble(); } -static int CastS2N(FString *b) { return b->Len() == 0 ? FName(NAME_None) : FName(*b); } +static int CastS2N(FString *b) { return b->Len() == 0 ? NAME_None : FName(*b).GetIndex(); } static void CastN2S(FString *a, int b) { FName name = FName(ENamedName(b)); *a = name.IsValidName() ? name.GetChars() : ""; } static int CastS2Co(FString *b) { return V_GetColor(nullptr, *b); } static void CastCo2S(FString *a, int b) { PalEntry c(b); a->Format("%02x %02x %02x", c.r, c.g, c.b); } diff --git a/src/scripting/vm/vm.h b/src/scripting/vm/vm.h index 8337bd4561..a2f002f040 100644 --- a/src/scripting/vm/vm.h +++ b/src/scripting/vm/vm.h @@ -42,6 +42,7 @@ #include "cmdlib.h" #include "engineerrors.h" #include "memarena.h" +#include "name.h" #include "scripting/backend/scopebarrier.h" class DObject; diff --git a/src/scripting/vm/vmexec.h b/src/scripting/vm/vmexec.h index 08a398f9e9..26622b3e1e 100644 --- a/src/scripting/vm/vmexec.h +++ b/src/scripting/vm/vmexec.h @@ -1809,7 +1809,7 @@ static void DoCast(const VMRegisters ®, const VMFrame *f, int a, int b, int c case CAST_S2N: ASSERTD(a); ASSERTS(b); - reg.d[a] = reg.s[b].Len() == 0? FName(NAME_None) : FName(reg.s[b]); + reg.d[a] = reg.s[b].Len() == 0? NAME_None : FName(reg.s[b]).GetIndex(); break; case CAST_N2S: diff --git a/src/scripting/vmthunks_actors.cpp b/src/scripting/vmthunks_actors.cpp index b2943410f9..e20d9a056b 100644 --- a/src/scripting/vmthunks_actors.cpp +++ b/src/scripting/vmthunks_actors.cpp @@ -893,13 +893,13 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, isTeammate, isTeammate) static int GetSpecies(AActor *self) { - return self->GetSpecies(); + return self->GetSpecies().GetIndex(); } DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetSpecies, GetSpecies) { PARAM_SELF_PROLOGUE(AActor); - ACTION_RETURN_INT(self->GetSpecies()); + ACTION_RETURN_INT(GetSpecies(self)); } static int isFriend(AActor *self, AActor *other) diff --git a/src/scripting/zscript/zcc_compile.cpp b/src/scripting/zscript/zcc_compile.cpp index 26b4b73ca9..bba4e7a198 100644 --- a/src/scripting/zscript/zcc_compile.cpp +++ b/src/scripting/zscript/zcc_compile.cpp @@ -779,7 +779,7 @@ void ZCCCompiler::CreateClassTypes() do { if (build.IsNotEmpty()) build += '.'; - build += FName(p->Id); + build += FName(p->Id).GetChars(); p = static_cast(p->SiblingNext); } while (p != ParentName); Error(c->cls, "Qualified name '%s' for base class not supported in '%s'", build.GetChars(), FName(c->NodeName()).GetChars()); @@ -2391,13 +2391,13 @@ void ZCCCompiler::ProcessDefaultProperty(PClassActor *cls, ZCC_PropertyStmt *pro } // a one-name property - propname = FName(namenode->Id); + propname = FName(namenode->Id).GetChars(); } else if (namenode->SiblingNext->SiblingNext == namenode) { // a two-name property - propname << FName(namenode->Id) << "." << FName(static_cast(namenode->SiblingNext)->Id); + propname << FName(namenode->Id).GetChars() << "." << FName(static_cast(namenode->SiblingNext)->Id).GetChars(); } else { @@ -2541,7 +2541,7 @@ void ZCCCompiler::InitDefaults() Baggage bag; #ifdef _DEBUG - bag.ClassName = cls->TypeName; + bag.ClassName = cls->TypeName.GetChars(); #endif bag.Version = mVersion; bag.Namespace = OutNamespace; @@ -3283,7 +3283,7 @@ void ZCCCompiler::CompileStates() case AST_StateLabel: { auto sl = static_cast(st); - statename = FName(sl->Label); + statename = FName(sl->Label).GetChars(); statedef.AddStateLabel(statename); break; } @@ -3372,12 +3372,12 @@ void ZCCCompiler::CompileStates() statename = ""; if (sg->Qualifier != nullptr) { - statename << FName(sg->Qualifier->Id) << "::"; + statename << FName(sg->Qualifier->Id).GetChars() << "::"; } auto part = sg->Label; do { - statename << FName(part->Id) << '.'; + statename << FName(part->Id).GetChars() << '.'; part = static_cast(part->SiblingNext); } while (part != sg->Label); statename.Truncate(statename.Len() - 1); // remove the last '.' in the label name diff --git a/src/scripting/zscript/zcc_parser.cpp b/src/scripting/zscript/zcc_parser.cpp index 0f9a06f422..4d2e91b3eb 100644 --- a/src/scripting/zscript/zcc_parser.cpp +++ b/src/scripting/zscript/zcc_parser.cpp @@ -297,12 +297,12 @@ static void ParseSingleFile(FScanner *pSC, const char *filename, int lump, void case TK_None: // 'NONE' is a token for SBARINFO but not here. case TK_Identifier: - value.Int = FName(sc.String); + value.Int = FName(sc.String).GetIndex(); tokentype = ZCC_IDENTIFIER; break; case TK_NonWhitespace: - value.Int = FName(sc.String); + value.Int = FName(sc.String).GetIndex(); tokentype = ZCC_NWS; break; diff --git a/src/serializer.cpp b/src/serializer.cpp index d734034923..1aa4e14fdd 100644 --- a/src/serializer.cpp +++ b/src/serializer.cpp @@ -658,7 +658,7 @@ FSerializer &FSerializer::Args(const char *key, int *args, int *defargs, int spe } else if (i == 0 && aval.IsString()) { - args[i] = -FName(UnicodeToString(aval.GetString())); + args[i] = -FName(UnicodeToString(aval.GetString())).GetIndex(); } else { @@ -710,7 +710,7 @@ FSerializer &FSerializer::ScriptNum(const char *key, int &num) } else if (val->IsString()) { - num = -FName(UnicodeToString(val->GetString())); + num = -FName(UnicodeToString(val->GetString())).GetIndex(); } else { @@ -2159,7 +2159,7 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, FFont *&fon { FName n = NAME_None; arc(key, n); - font = n == NAME_None? nullptr : V_GetFont(n); + font = n == NAME_None? nullptr : V_GetFont(n.GetChars()); return arc; } diff --git a/src/sound/s_advsound.cpp b/src/sound/s_advsound.cpp index 8fbd7b86d9..88a2609d65 100644 --- a/src/sound/s_advsound.cpp +++ b/src/sound/s_advsound.cpp @@ -1605,11 +1605,11 @@ static void S_RestorePlayerSounds() FSavedPlayerSoundInfo * spi = &SavedPlayerSounds[i]; if (spi->alias) { - S_AddPlayerSoundExisting(spi->pclass, spi->gender, spi->refid, spi->lumpnum); + S_AddPlayerSoundExisting(spi->pclass.GetChars(), spi->gender, spi->refid, spi->lumpnum); } else { - S_AddPlayerSound(spi->pclass, spi->gender, spi->refid, spi->lumpnum); + S_AddPlayerSound(spi->pclass.GetChars(), spi->gender, spi->refid, spi->lumpnum); } } } diff --git a/src/sound/s_sndseq.cpp b/src/sound/s_sndseq.cpp index 4ed82903ab..f17d7e03d1 100644 --- a/src/sound/s_sndseq.cpp +++ b/src/sound/s_sndseq.cpp @@ -429,7 +429,7 @@ void DSeqNode::AddChoice (int seqnum, seqtype_t type) DEFINE_ACTION_FUNCTION(DSeqNode, AddChoice) { PARAM_SELF_PROLOGUE(DSeqNode); - PARAM_NAME(seq); + PARAM_INT(seq); PARAM_INT(mode); self->AddChoice(seq, seqtype_t(mode)); return 0; @@ -510,7 +510,7 @@ static void AssignHexenTranslations (void) { for (seq = 0; seq < Sequences.Size(); seq++) { - if (Sequences[seq] != NULL && HexenSequences[i].Name == Sequences[seq]->SeqName) + if (Sequences[seq] != NULL && Sequences[seq]->SeqName == HexenSequences[i].Name) break; } if (seq == Sequences.Size()) @@ -642,7 +642,7 @@ void S_ParseSndSeq (int levellump) { ScriptTemp.Push (sc.Number); sc.MustGetString(); - ScriptTemp.Push (FName(sc.String)); + ScriptTemp.Push (FName(sc.String).GetIndex()); } else { diff --git a/src/utility/name.h b/src/utility/name.h index ecc9c36bfd..482e4f66fb 100644 --- a/src/utility/name.h +++ b/src/utility/name.h @@ -35,6 +35,7 @@ #define NAME_H #include "tarray.h" +#include "zstring.h" enum ENamedName { @@ -52,19 +53,17 @@ public: FName (const char *text) { Index = NameData.FindName (text, false); } FName (const char *text, bool noCreate) { Index = NameData.FindName (text, noCreate); } FName (const char *text, size_t textlen, bool noCreate) { Index = NameData.FindName (text, textlen, noCreate); } - FName (const FString &text); - FName (const FString &text, bool noCreate); + FName(const FString& text) { Index = NameData.FindName(text.GetChars(), text.Len(), false); } + FName(const FString& text, bool noCreate) { Index = NameData.FindName(text.GetChars(), text.Len(), noCreate); } FName (const FName &other) = default; FName (ENamedName index) { Index = index; } // ~FName () {} // Names can be added but never removed. int GetIndex() const { return Index; } - operator int() const { return Index; } const char *GetChars() const { return NameData.NameArray[Index].Text; } - operator const char *() const { return NameData.NameArray[Index].Text; } FName &operator = (const char *text) { Index = NameData.FindName (text, false); return *this; } - FName &operator = (const FString &text); + FName& operator = (const FString& text) { Index = NameData.FindName(text.GetChars(), text.Len(), false); return *this; } FName &operator = (const FName &other) = default; FName &operator = (ENamedName index) { Index = index; return *this; } diff --git a/src/utility/namedef.h b/src/utility/namedef.h index 9aa0e4cc52..9f38bd135c 100644 --- a/src/utility/namedef.h +++ b/src/utility/namedef.h @@ -122,6 +122,7 @@ xx(Sorcerer2) // Bots check this xx(Megasphere) +xx(MegasphereHealth) // Standard player classes xx(DoomPlayer) diff --git a/src/utility/zstring.h b/src/utility/zstring.h index 4b636ac77d..23795d41a2 100644 --- a/src/utility/zstring.h +++ b/src/utility/zstring.h @@ -39,7 +39,6 @@ #include #include #include "tarray.h" -#include "name.h" #ifdef __GNUC__ #define PRINTFISH(x) __attribute__((format(printf, 2, x))) @@ -195,14 +194,12 @@ public: FString &operator += (const FString &tail); FString &operator += (const char *tail); FString &operator += (char tail); - FString &operator += (const FName &name) { return *this += name.GetChars(); } FString &AppendCStrPart (const char *tail, size_t tailLen); FString &CopyCStrPart(const char *tail, size_t tailLen); FString &operator << (const FString &tail) { return *this += tail; } FString &operator << (const char *tail) { return *this += tail; } FString &operator << (char tail) { return *this += tail; } - FString &operator << (const FName &name) { return *this += name.GetChars(); } const char &Front() const { assert(IsNotEmpty()); return Chars[0]; } const char &Back() const { assert(IsNotEmpty()); return Chars[Len() - 1]; } @@ -412,13 +409,6 @@ public: bool operator <= (const char *) const = delete; bool operator >= (const char *) const = delete; - bool operator == (FName) const = delete; - bool operator != (FName) const = delete; - bool operator < (FName) const = delete; - bool operator > (FName) const = delete; - bool operator <= (FName) const = delete; - bool operator >= (FName) const = delete; - private: }; @@ -430,13 +420,6 @@ bool operator > (const char *, const FString &) = delete; bool operator <= (const char *, const FString &) = delete; bool operator >= (const char *, const FString &) = delete; -bool operator == (FName, const FString &) = delete; -bool operator != (FName, const FString &) = delete; -bool operator < (FName, const FString &) = delete; -bool operator > (FName, const FString &) = delete; -bool operator <= (FName, const FString &) = delete; -bool operator >= (FName, const FString &) = delete; - class FStringf : public FString { public: @@ -477,12 +460,6 @@ namespace StringFormat #undef PRINTFISH -// FName inline implementations that take FString parameters - -inline FName::FName(const FString &text) { Index = NameData.FindName (text.GetChars(), text.Len(), false); } -inline FName::FName(const FString &text, bool noCreate) { Index = NameData.FindName (text.GetChars(), text.Len(), noCreate); } -inline FName &FName::operator = (const FString &text) { Index = NameData.FindName (text.GetChars(), text.Len(), false); return *this; } - // Hash FStrings on their contents. (used by TMap) #include "superfasthash.h"