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:
Marco Antonio J. Costa
2026-07-23 19:29:55 -03:00
committed by majcosta
co-authored by Claude Opus 4.8
parent 5e2982c509
commit 70b11ee120
8 changed files with 38 additions and 38 deletions
+15 -15
View File
@@ -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;