mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
make narrowing conversions in braced initialisers explicit
A braced initialiser does not allow a narrowing conversion unless the value
is a constant expression the compiler can prove fits. Every site here holds a
runtime value: WORLD_COLS is the global guiWorldCols, the laptop screen
coordinates are built from iScreenWidthOffset, the sector limits come from the
externalised options. MSVC accepts all of it silently; clang rejects it, and
it is ill-formed.
Nothing about the generated code changes. MSVC was already performing these
conversions; the casts only say so out loud, at the 73 places where it was
happening implicitly.
The invariant: each site is wrapped in a static_cast to the element type the
initialiser already had, and nothing else is touched. No type is widened, no
expression is reassociated, no value is clamped or checked. static_cast rather
than a C-style cast so that a later reader can grep for the narrowings, and so
that none of these can quietly become a reinterpret_cast if a type changes.
Verification:
# every changed line differs only by inserted casts and their parentheses
git show HEAD -U0 | grep '^[+-][^+-]' |
sed -E 's/static_cast<[A-Za-z0-9_]+>//g; s/[()]//g; s/^[+-]//' |
sort | uniq -c | awk '$1 % 2' # no output
git show HEAD -U0 | grep -c '^+[^+]' # 38 lines, 73 casts
ninja -C build parse # narrowing class gone: 129 -> 91 sites
ninja -C build -k 0 # Release, four applications, green
ninja -C build-debug -k 0 # Debug, four applications, green
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
committed by
majcosta
co-authored by
Claude Opus 4.8
parent
5e2982c509
commit
70b11ee120
@@ -7746,9 +7746,9 @@ BOOLEAN LoadTacticalStatusFromSavedGame( HWFILE hFile )
|
||||
for (int idx = OUR_TEAM; idx <= CIV_TEAM; ++idx) {
|
||||
cntFromFile[ idx ] = gTacticalStatus.Team[ idx ].bLastID - gTacticalStatus.Team[ idx ].bFirstID + 1;
|
||||
}
|
||||
int cntFromIni[] = {gGameExternalOptions.ubGameMaximumNumberOfPlayerMercs + gGameExternalOptions.ubGameMaximumNumberOfPlayerVehicles,
|
||||
gGameExternalOptions.ubGameMaximumNumberOfEnemies, gGameExternalOptions.ubGameMaximumNumberOfCreatures,
|
||||
gGameExternalOptions.ubGameMaximumNumberOfRebels, gGameExternalOptions.ubGameMaximumNumberOfCivilians};
|
||||
int cntFromIni[] = {static_cast<int>(gGameExternalOptions.ubGameMaximumNumberOfPlayerMercs + gGameExternalOptions.ubGameMaximumNumberOfPlayerVehicles),
|
||||
static_cast<int>(gGameExternalOptions.ubGameMaximumNumberOfEnemies), static_cast<int>(gGameExternalOptions.ubGameMaximumNumberOfCreatures),
|
||||
static_cast<int>(gGameExternalOptions.ubGameMaximumNumberOfRebels), static_cast<int>(gGameExternalOptions.ubGameMaximumNumberOfCivilians)};
|
||||
|
||||
CHAR16 *errMsgTxt[] = {L"Mercenary / Vehicle", L"Enemy", L"Creature", L"Militia", L"Civilian"};
|
||||
errMsgTxt[0] = Additional113Text[ERROR_MAX_MERCSVEHICLES];
|
||||
|
||||
+15
-15
@@ -108,21 +108,21 @@
|
||||
#define AIM_SORT_SORT_BY_HEIGHT 81
|
||||
|
||||
UINT16 AimSortCheckBoxLoc[]={
|
||||
(AIM_SORT_SORT_BY_X + 9), (AIM_SORT_SORT_BY_Y + 34),
|
||||
(AIM_SORT_SORT_BY_X + 9), (AIM_SORT_SORT_BY_Y + 47),
|
||||
(AIM_SORT_SORT_BY_X + 9), (AIM_SORT_SORT_BY_Y + 60),
|
||||
(AIM_SORT_SORT_BY_X + 105), (AIM_SORT_SORT_BY_Y + 34),
|
||||
(AIM_SORT_SORT_BY_X + 105), (AIM_SORT_SORT_BY_Y + 47),
|
||||
(AIM_SORT_SORT_BY_X + 105), (AIM_SORT_SORT_BY_Y + 60),
|
||||
(AIM_SORT_SORT_BY_X + 201), (AIM_SORT_SORT_BY_Y + 34),
|
||||
(AIM_SORT_SORT_BY_X + 201), (AIM_SORT_SORT_BY_Y + 47),
|
||||
(AIM_SORT_SORT_BY_X + 201), (AIM_SORT_SORT_BY_Y + 60),
|
||||
(AIM_SORT_SORT_BY_X + 297), (AIM_SORT_SORT_BY_Y + 34),
|
||||
(AIM_SORT_SORT_BY_X + 297), (AIM_SORT_SORT_BY_Y + 47),
|
||||
(AIM_SORT_SORT_BY_X + 297), (AIM_SORT_SORT_BY_Y + 60),
|
||||
(AIM_SORT_SORT_BY_X + 9), (AIM_SORT_SORT_BY_Y + 21),
|
||||
(AIM_SORT_SORT_BY_X + 372), (AIM_SORT_SORT_BY_Y + 4),
|
||||
(AIM_SORT_SORT_BY_X + 372), (AIM_SORT_SORT_BY_Y + 17)};
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 9), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 34),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 9), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 47),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 9), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 60),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 105), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 34),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 105), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 47),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 105), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 60),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 201), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 34),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 201), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 47),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 201), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 60),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 297), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 34),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 297), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 47),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 297), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 60),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 9), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 21),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 372), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 4),
|
||||
static_cast<UINT16>(AIM_SORT_SORT_BY_X + 372), static_cast<UINT16>(AIM_SORT_SORT_BY_Y + 17)};
|
||||
|
||||
UINT8 gubCurrentSortMode;
|
||||
UINT8 gubOldSortMode;
|
||||
|
||||
+5
-5
@@ -250,11 +250,11 @@ BOOLEAN EnterBobbyR()
|
||||
}
|
||||
//End Dealtar's Airport Externalization.
|
||||
// an array of mouse regions for the bobbies signs. Top Left corner, bottom right corner
|
||||
UINT16 usMouseRegionPosArray[] = {BOBBIES_USED_SIGN_X, BOBBIES_USED_SIGN_Y, BOBBIES_USED_SIGN_X+BOBBIES_USED_SIGN_WIDTH, BOBBIES_USED_SIGN_Y+BOBBIES_USED_SIGN_HEIGHT,
|
||||
BOBBIES_MISC_SIGN_X, BOBBIES_MISC_SIGN_Y, BOBBIES_MISC_SIGN_X+BOBBIES_MISC_SIGN_WIDTH, BOBBIES_MISC_SIGN_Y+BOBBIES_MISC_SIGN_HEIGHT,
|
||||
BOBBIES_GUNS_SIGN_X, BOBBIES_GUNS_SIGN_Y, BOBBIES_GUNS_SIGN_X+BOBBIES_GUNS_SIGN_WIDTH, BOBBIES_GUNS_SIGN_Y+BOBBIES_GUNS_SIGN_HEIGHT,
|
||||
BOBBIES_AMMO_SIGN_X, BOBBIES_AMMO_SIGN_Y, BOBBIES_AMMO_SIGN_X+BOBBIES_AMMO_SIGN_WIDTH, BOBBIES_AMMO_SIGN_Y+BOBBIES_AMMO_SIGN_HEIGHT,
|
||||
BOBBIES_ARMOUR_SIGN_X, BOBBIES_ARMOUR_SIGN_Y, BOBBIES_ARMOUR_SIGN_X+BOBBIES_ARMOUR_SIGN_WIDTH, BOBBIES_ARMOUR_SIGN_Y+BOBBIES_ARMOUR_SIGN_HEIGHT};
|
||||
UINT16 usMouseRegionPosArray[] = {static_cast<UINT16>(BOBBIES_USED_SIGN_X), static_cast<UINT16>(BOBBIES_USED_SIGN_Y), static_cast<UINT16>(BOBBIES_USED_SIGN_X+BOBBIES_USED_SIGN_WIDTH), static_cast<UINT16>(BOBBIES_USED_SIGN_Y+BOBBIES_USED_SIGN_HEIGHT),
|
||||
static_cast<UINT16>(BOBBIES_MISC_SIGN_X), static_cast<UINT16>(BOBBIES_MISC_SIGN_Y), static_cast<UINT16>(BOBBIES_MISC_SIGN_X+BOBBIES_MISC_SIGN_WIDTH), static_cast<UINT16>(BOBBIES_MISC_SIGN_Y+BOBBIES_MISC_SIGN_HEIGHT),
|
||||
static_cast<UINT16>(BOBBIES_GUNS_SIGN_X), static_cast<UINT16>(BOBBIES_GUNS_SIGN_Y), static_cast<UINT16>(BOBBIES_GUNS_SIGN_X+BOBBIES_GUNS_SIGN_WIDTH), static_cast<UINT16>(BOBBIES_GUNS_SIGN_Y+BOBBIES_GUNS_SIGN_HEIGHT),
|
||||
static_cast<UINT16>(BOBBIES_AMMO_SIGN_X), static_cast<UINT16>(BOBBIES_AMMO_SIGN_Y), static_cast<UINT16>(BOBBIES_AMMO_SIGN_X+BOBBIES_AMMO_SIGN_WIDTH), static_cast<UINT16>(BOBBIES_AMMO_SIGN_Y+BOBBIES_AMMO_SIGN_HEIGHT),
|
||||
static_cast<UINT16>(BOBBIES_ARMOUR_SIGN_X), static_cast<UINT16>(BOBBIES_ARMOUR_SIGN_Y), static_cast<UINT16>(BOBBIES_ARMOUR_SIGN_X+BOBBIES_ARMOUR_SIGN_WIDTH), static_cast<UINT16>(BOBBIES_ARMOUR_SIGN_Y+BOBBIES_ARMOUR_SIGN_HEIGHT)};
|
||||
|
||||
InitBobbyRWoodBackground();
|
||||
|
||||
|
||||
@@ -6934,22 +6934,22 @@ void HandlePlayerTeamQuotesWhenEnteringSector( INT16 sSectorX, INT16 sSectorY, I
|
||||
ENTER_SECTOR_PLAYER_QUOTE PlayerSectorDescQuote[ NUM_VALID_SECTORS ] =
|
||||
{
|
||||
//SEC_H9-0
|
||||
{ SECTOR( gGameUBOptions.SectorGuardPostX, gGameUBOptions.SectorGuardPostY ), gGameUBOptions.SectorGuardPostZ, QUOTE_HATED_1_ON_TEAM },
|
||||
{ SECTOR( gGameUBOptions.SectorGuardPostX, gGameUBOptions.SectorGuardPostY ), static_cast<INT8>(gGameUBOptions.SectorGuardPostZ), QUOTE_HATED_1_ON_TEAM },
|
||||
|
||||
//SEC_I9-0
|
||||
{ SECTOR( gGameUBOptions.I9SectorPlayerQuoteX, gGameUBOptions.I9SectorPlayerQuoteY ), gGameUBOptions.I9SectorPlayerQuoteZ, QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM },
|
||||
{ SECTOR( gGameUBOptions.I9SectorPlayerQuoteX, gGameUBOptions.I9SectorPlayerQuoteY ), static_cast<INT8>(gGameUBOptions.I9SectorPlayerQuoteZ), QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM },
|
||||
|
||||
//SEC_H10-0
|
||||
{ SECTOR( gGameUBOptions.H10SectorPlayerQuoteX, gGameUBOptions.H10SectorPlayerQuoteY ), gGameUBOptions.H10SectorPlayerQuoteZ, QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM },
|
||||
{ SECTOR( gGameUBOptions.H10SectorPlayerQuoteX, gGameUBOptions.H10SectorPlayerQuoteY ), static_cast<INT8>(gGameUBOptions.H10SectorPlayerQuoteZ), QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM },
|
||||
|
||||
//SEC_I10-0
|
||||
{ SECTOR( gGameUBOptions.FristSectorTownX, gGameUBOptions.FristSectorTownY ), gGameUBOptions.FristSectorTownZ, QUOTE_HATED_2_ON_TEAM },
|
||||
{ SECTOR( gGameUBOptions.FristSectorTownX, gGameUBOptions.FristSectorTownY ), static_cast<INT8>(gGameUBOptions.FristSectorTownZ), QUOTE_HATED_2_ON_TEAM },
|
||||
|
||||
//SEC_J13-0
|
||||
{ SECTOR( gGameUBOptions.SectorFanX, gGameUBOptions.SectorFanY ), gGameUBOptions.SectorFanZ, QUOTE_ENTER_SECTOR_WITH_FAN_1 },
|
||||
{ SECTOR( gGameUBOptions.SectorFanX, gGameUBOptions.SectorFanY ), static_cast<INT8>(gGameUBOptions.SectorFanZ), QUOTE_ENTER_SECTOR_WITH_FAN_1 },
|
||||
|
||||
//SEC_J14-1
|
||||
{ SECTOR( gGameUBOptions.SectorGuardPostX, gGameUBOptions.SectorGuardPostY ), gGameUBOptions.ExitForFanToPowerGenSectorZ, 0 },
|
||||
{ SECTOR( gGameUBOptions.SectorGuardPostX, gGameUBOptions.SectorGuardPostY ), static_cast<INT8>(gGameUBOptions.ExitForFanToPowerGenSectorZ), 0 },
|
||||
};
|
||||
|
||||
//loop through all the sectors that have the quotes
|
||||
|
||||
@@ -1704,7 +1704,7 @@ BOOLEAN gfCalcTranslucency = FALSE;
|
||||
|
||||
INT16 gsFullTileDirections[MAX_FULLTILE_DIRECTIONS] =
|
||||
{
|
||||
-1, -WORLD_COLS - 1, -WORLD_COLS
|
||||
-1, static_cast<INT16>(-WORLD_COLS - 1), static_cast<INT16>(-WORLD_COLS)
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -1137,7 +1137,7 @@ BOOLEAN DestNotSpokenFor(SOLDIERTYPE *pSoldier, INT32 sGridNo)
|
||||
INT32 FindAdjacentSpotBeside(SOLDIERTYPE *pSoldier, INT32 sGridNo)
|
||||
{
|
||||
INT32 cnt;
|
||||
INT16 mods[4] = {-1,-WORLD_COLS,1,WORLD_COLS};
|
||||
INT16 mods[4] = {-1,static_cast<INT16>(-WORLD_COLS),1,static_cast<INT16>(WORLD_COLS)};
|
||||
INT32 sTempGridNo = NOWHERE, sCheapestDest = MAX_MAP_POS;
|
||||
INT16 sCheapestCost=500, sMovementCost;
|
||||
|
||||
|
||||
@@ -16,14 +16,14 @@ UINT32 guiForceRefreshMousePositionCalculation = 0;
|
||||
// GLOBALS
|
||||
INT16 DirIncrementer[8] =
|
||||
{
|
||||
-WORLD_COLS, //N
|
||||
1-WORLD_COLS, //NE
|
||||
static_cast<INT16>(-WORLD_COLS), //N
|
||||
static_cast<INT16>(1-WORLD_COLS), //NE
|
||||
1, //E
|
||||
1+WORLD_COLS, //SE
|
||||
WORLD_COLS, //S
|
||||
WORLD_COLS-1, //SW
|
||||
static_cast<INT16>(1+WORLD_COLS), //SE
|
||||
static_cast<INT16>(WORLD_COLS), //S
|
||||
static_cast<INT16>(WORLD_COLS-1), //SW
|
||||
-1, //W
|
||||
-WORLD_COLS-1 //NW
|
||||
static_cast<INT16>(-WORLD_COLS-1) //NW
|
||||
};
|
||||
|
||||
// Opposite directions
|
||||
|
||||
+1
-1
@@ -1946,7 +1946,7 @@ void RefreshScreen(void *DummyVariable)
|
||||
try
|
||||
{
|
||||
vfs::COpenWriteFile wfile(FileName,true,true);
|
||||
char head[] = {0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, LOBYTE(SCREEN_WIDTH), HIBYTE(SCREEN_WIDTH), LOBYTE(SCREEN_HEIGHT), HIBYTE(SCREEN_HEIGHT), 0x10, 0};
|
||||
char head[] = {0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, static_cast<char>(LOBYTE(SCREEN_WIDTH)), static_cast<char>(HIBYTE(SCREEN_WIDTH)), static_cast<char>(LOBYTE(SCREEN_HEIGHT)), static_cast<char>(HIBYTE(SCREEN_HEIGHT)), 0x10, 0};
|
||||
SGP_TRYCATCH_RETHROW(wfile->write(head,18), L"");
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user