diff --git a/.github/workflows/converted-ratchet.yml b/.github/workflows/converted-ratchet.yml index 05b963a020..8ac8aed69c 100644 --- a/.github/workflows/converted-ratchet.yml +++ b/.github/workflows/converted-ratchet.yml @@ -52,6 +52,13 @@ on: - "tools/tiers.py" - "tools/tiers_ratchet.py" - "tools/delaunder.py" + # The checker resolves a GONE path through the TU manifest before it calls that + # path a deletion, so the manifest reader and the manifest itself are inputs to + # the verdict now. A promotion PR trips `src/**` anyway (it deletes N files and + # adds one), but a PR that only re-labels an entry `"status": "promoted"` would + # not, and that alone changes what this gate says about an existing baseline. + - "tools/tu_manifest.py" + - "config/tu_manifest.d/**" - "config/converted-baseline.json" - ".github/workflows/converted-ratchet.yml" workflow_dispatch: @@ -77,6 +84,12 @@ jobs: # moving under a gate that touched no Python is indistinguishable from a regression. with: python-version: "3.12" + - name: Classifier unit tests + # The criteria decide a published percentage, so the two readings that were + # measurably wrong once are pinned in BOTH directions: MMIO must not score as a + # codegen trick, a volatile match hack still must, a TU promotion must read as a + # MOVE, and a move into a file that fails a criterion must still fail the gate. + run: python -m unittest tools.test_tiers -v - name: Current CONVERTED state # Report only, no exit-code meaning: prints the tier percentage and names anything # that backslid, so the log says what happened before the gate says whether it passed. diff --git a/config/converted-baseline.json b/config/converted-baseline.json index 96a9868fe1..800a7bd1c2 100644 --- a/config/converted-baseline.json +++ b/config/converted-baseline.json @@ -7,8 +7,10 @@ "no_codegen_trick", "no_mangled_refs" ], - "count": 1958, + "count": 2567, "converted": [ + "src/ARMMathLoadState.c", + "src/ARMMathSaveState.c", "src/ARMProcessorMode.c", "src/ARMRestoreContext.c", "src/ARMSaveContext.c", @@ -36,20 +38,26 @@ "src/CpuSet.c", "src/Crate_SetState.cpp", "src/CrossVec3.c", + "src/DMASyncHalfTransfer.c", + "src/DMASyncWordTransfer.c", "src/DeathTable_ClearBit.c", "src/DeathTable_GetBit.c", "src/DeathTable_SetBit.c", "src/DecIfAbove0_Byte.c", "src/DecIfAbove0_Short.c", "src/DecompressLZ16.c", + "src/DisableVramBanks.c", "src/Div.c", "src/DotVec3.c", + "src/Enable3dEngines.c", "src/EndKuppaScript.cpp", "src/EnterBigBoosHaunt.c", "src/ExitLevel.c", "src/FS_ReadFile.c", "src/FlyGuy_ChangeState.cpp", "src/FreeGfxSlotsById.c", + "src/Geometry_MatrixMultiply3x3.c", + "src/GetActorDebugName.c", "src/GetAngleToCamera.c", "src/GetCRC16.c", "src/GetControllerMode.c", @@ -92,6 +100,7 @@ "src/KingBobOmb_SetState.cpp", "src/LZ77UnCompReadByCallbackWrite16bit.c", "src/LZ77UnCompReadNormalWrite8bit.c", + "src/LenVec3.c", "src/LoadArchive.c", "src/LoadCompressedFileAt.c", "src/LoadFile.c", @@ -130,12 +139,14 @@ "src/MultiStore32Bytes.c", "src/MultiStore_Int.c", "src/NoOpDestructor.c", + "src/NormalizeVec3.c", "src/NormalizeVec3IfNonZero.c", "src/NullDestructor_0203d47c.c", "src/NumCoins.c", "src/NumRedCoins.c", "src/NumStars.c", "src/NumVsStarsObtained.c", + "src/OSReadROMArea.c", "src/OS_GetInitArenaLo.c", "src/ObjectMessageIDToActualMessageID.c", "src/OpenCannon.c", @@ -207,6 +218,7 @@ "src/Vec3_MulScalarInPlace.c", "src/Vec3_RotateYAndTranslate.c", "src/Vec3_Sub.c", + "src/Vram__Map.c", "src/WM_GetSystemWork.c", "src/WM_SetCallbackTable.c", "src/WaitByLoop.c", @@ -240,6 +252,11 @@ "src/_ZN10BowserTail6RenderEv.cpp", "src/_ZN10BowserTailD0Ev.cpp", "src/_ZN10BowserTailD1Ev.cpp", + "src/_ZN10BrickBlock11GetSpawnPosER7Vector3RS_.cpp", + "src/_ZN10BrickBlock16CleanupResourcesEv.cpp", + "src/_ZN10BrickBlock17SpawnMegaMushroomEv.cpp", + "src/_ZN10BrickBlock18SpawnOneUpMushroomEv.cpp", + "src/_ZN10BrickBlockD0Ev.cpp", "src/_ZN10BrickBlockD1Ev.cpp", "src/_ZN10BulletBill16OnAimedAtWithEggEv.cpp", "src/_ZN10BulletBill6RenderEv.cpp", @@ -254,6 +271,8 @@ "src/_ZN10CheepCheep6RenderEv.cpp", "src/_ZN10CheepCheepD0Ev.cpp", "src/_ZN10CheepCheepD1Ev.cpp", + "src/_ZN10ChillBully14UpdateRunStateEv.cpp", + "src/_ZN10ChillBully16UpdateDeathStateEv.cpp", "src/_ZN10ChillBully8BehaviorEv.cpp", "src/_ZN10ChillBullyD0Ev.cpp", "src/_ZN10ChillBullyD1Ev.cpp", @@ -262,6 +281,7 @@ "src/_ZN10DonutBlock6RenderEv.cpp", "src/_ZN10DonutBlockD0Ev.cpp", "src/_ZN10DonutBlockD1Ev.cpp", + "src/_ZN10FaderColorD2Ev.cpp", "src/_ZN10HootTheOwl16CleanupResourcesEv.cpp", "src/_ZN10HootTheOwl16OnPendingDestroyEv.cpp", "src/_ZN10HootTheOwl6RenderEv.cpp", @@ -291,6 +311,7 @@ "src/_ZN10LavaSeesawD0Ev.cpp", "src/_ZN10LavaSeesawD1Ev.cpp", "src/_ZN10ModelAnim24CopyERKS_Pcj.cpp", + "src/_ZN10ModelAnim2C1Ev.cpp", "src/_ZN10ModelAnim2D0Ev.cpp", "src/_ZN10ModelAnim2D1Ev.cpp", "src/_ZN10MrBlizzard16CleanupResourcesEv.cpp", @@ -298,6 +319,8 @@ "src/_ZN10MrBlizzard16OnPendingDestroyEv.cpp", "src/_ZN10MrBlizzardD0Ev.cpp", "src/_ZN10MrBlizzardD1Ev.cpp", + "src/_ZN10PyramidTag8BehaviorEv.cpp", + "src/_ZN10PyramidTagD0Ev.cpp", "src/_ZN10PyramidTagD1Ev.cpp", "src/_ZN10PyramidTop16CleanupResourcesEv.cpp", "src/_ZN10PyramidTop6RenderEv.cpp", @@ -321,18 +344,25 @@ "src/_ZN10ShutterHmc16CleanupResourcesEv.cpp", "src/_ZN10ShutterHmcD0Ev.cpp", "src/_ZN10ShutterHmcD1Ev.cpp", + "src/_ZN10SlidingBox11UpdateModelEv.cpp", "src/_ZN10SlidingBox16CleanupResourcesEv.cpp", "src/_ZN10SlidingBox6RenderEv.cpp", + "src/_ZN10SlidingBoxD0Ev.cpp", + "src/_ZN10SlidingBoxD1Ev.cpp", "src/_ZN10SlidingIce15OnHitByMegaCharER6Player.cpp", "src/_ZN10SlidingIce16CleanupResourcesEv.cpp", "src/_ZN10SlidingIceD0Ev.cpp", "src/_ZN10SlidingIceD1Ev.cpp", "src/_ZN10StarMarker16CleanupResourcesEv.cpp", "src/_ZN10StarMarker6RenderEv.cpp", + "src/_ZN10StarMarkerD0Ev.cpp", "src/_ZN10StarMarkerD1Ev.cpp", + "src/_ZN10StarSwitch16CleanupResourcesEv.cpp", + "src/_ZN10StarSwitch6RenderEv.cpp", "src/_ZN10StarSwitchD0Ev.cpp", "src/_ZN10StarSwitchD1Ev.cpp", "src/_ZN10dBgActor_c21UpdateModelPosAndRotYEv.cpp", + "src/_ZN10dBgActor_cC2Ev.cpp", "src/_ZN10dBgActor_cD0Ev.cpp", "src/_ZN10dBgActor_cD1Ev.cpp", "src/_ZN10dBgCh_Actr13SetGroundFlagEv.cpp", @@ -343,29 +373,62 @@ "src/_ZN10dBgCh_Actr19ClearAllGroundFlagsEv.cpp", "src/_ZN10dBgCh_Actr19StartDetectingWaterEv.cpp", "src/_ZN10dBgCh_Actr22ClearJustHitGroundFlagEv.cpp", + "src/_ZN10dBgCh_ActrC1Ev.cpp", + "src/_ZN10dBgCh_ActrD0Ev.cpp", + "src/_ZN10dBgCh_ActrD1Ev.cpp", + "src/_ZN10dBgW_KcMbg10DetectClsnER9dBgCh_Gnd.cpp", + "src/_ZN10dBgW_KcMbg10DetectClsnER9dBgCh_Lin.cpp", "src/_ZN10dBgW_KcMbg11GetVelocityER7Vector3.cpp", "src/_ZN10dBgW_KcMbg12TransformPosERK7Vector3RS0_.cpp", "src/_ZN10dBgW_KcMbg14GetAngularVelYEv.cpp", "src/_ZN10dBgW_KcMbg17GetTriangleOriginEsR7Vector3.cpp", "src/_ZN10dBgW_KcMbg9GetNormalEsR7Vector3.cpp", "src/_ZN10dBgW_KcMbgC1Ev.cpp", + "src/_ZN10dBgW_KcMbgC2Ev.cpp", "src/_ZN10dBgW_KcMbgD0Ev.cpp", "src/_ZN10dBgW_KcMbgD1Ev.cpp", + "src/_ZN10dBgW_KcMbgD2Ev.cpp", + "src/_ZN10dCapIcon_cC1Ev.cpp", + "src/_ZN10dCapIcon_cD0Ev.cpp", + "src/_ZN10dCapIcon_cD1Ev.cpp", "src/_ZN10dCcAcPos_c21SetPosRelativeToActorERK7Vector3.cpp", "src/_ZN10dCcAcPos_c6GetPosEv.cpp", + "src/_ZN10dCcAcPos_cC1Ev.cpp", "src/_ZN10dCcAcPos_cD0Ev.cpp", "src/_ZN10dCcAcPos_cD1Ev.cpp", + "src/_ZN10dFdDummy_c14SetForwardTimeEj.cpp", + "src/_ZN10dFdDummy_c15SetBackwardTimeEj.cpp", + "src/_ZN10dFdDummy_cD0Ev.cpp", "src/_ZN10dFdDummy_cD1Ev.cpp", + "src/_ZN10dMgPsOpt_c11TouchIcon_cC1Ev.cpp", + "src/_ZN10dMgPsOpt_c11TouchIcon_cD1Ev.cpp", + "src/_ZN10dMgPsOpt_cC1Ev.cpp", + "src/_ZN10dMgPsOpt_cD1Ev.cpp", + "src/_ZN10dMgState_c6RenderEv.cpp", + "src/_ZN10dMgState_c8BehaviorEv.cpp", + "src/_ZN10dMgState_c8SetStateEi.cpp", + "src/_ZN10dScEntry_c15graphCallback_cC1Ev.cpp", "src/_ZN10dScEntry_c16OnPendingDestroyEv.cpp", "src/_ZN10dScEntry_c6RenderEv.cpp", + "src/_ZN10dScEntry_c6icon_cC1Ev.cpp", + "src/_ZN10dScEntry_c6icon_cD1Ev.cpp", + "src/_ZN10dScEntry_cD0Ev.cpp", + "src/_ZN10dScEntry_cD1Ev.cpp", "src/_ZN10dScMgBSC_c6RenderEv.cpp", "src/_ZN10dScMgBSC_cD0Ev.cpp", "src/_ZN10dScMgBSC_cD1Ev.cpp", "src/_ZN10dScTitle_c16OnPendingDestroyEv.cpp", + "src/_ZN10dScTitle_cD0Ev.cpp", "src/_ZN10dScTitle_cD1Ev.cpp", "src/_ZN10daPgDfdr_c16OnPendingDestroyEv.cpp", "src/_ZN10daPgDfdr_cD0Ev.cpp", "src/_ZN10daPgDfdr_cD1Ev.cpp", + "src/_ZN10daPgMthr_c16CleanupResourcesEv.cpp", + "src/_ZN10daPgMthr_c16OnPendingDestroyEv.cpp", + "src/_ZN10daPgMthr_c6RenderEv.cpp", + "src/_ZN10daPgMthr_c8BehaviorEv.cpp", + "src/_ZN10daPgMthr_cD0Ev.cpp", + "src/_ZN10daPgMthr_cD1Ev.cpp", "src/_ZN11BabyPenguin13OnTurnIntoEggER6Player.cpp", "src/_ZN11BabyPenguin13OnYoshiTryEatEv.cpp", "src/_ZN11BabyPenguin16CleanupResourcesEv.cpp", @@ -382,6 +445,8 @@ "src/_ZN11BobOmbBuddyD1Ev.cpp", "src/_ZN11CastleWater16CleanupResourcesEv.cpp", "src/_ZN11CastleWater8BehaviorEv.cpp", + "src/_ZN11CastleWaterD0Ev.cpp", + "src/_ZN11CastleWaterD1Ev.cpp", "src/_ZN11ChiefChilly16CleanupResourcesEv.cpp", "src/_ZN11ChiefChilly16OnAimedAtWithEggEv.cpp", "src/_ZN11ChiefChilly16OnPendingDestroyEv.cpp", @@ -405,16 +470,24 @@ "src/_ZN11DiamondLiftD1Ev.cpp", "src/_ZN11FallBlockWf13InitResourcesEv.cpp", "src/_ZN11FallBlockWf16CleanupResourcesEv.cpp", + "src/_ZN11FallBlockWfD0Ev.cpp", "src/_ZN11FallBlockWfD1Ev.cpp", "src/_ZN11MirrorLuigi16OnPendingDestroyEv.cpp", + "src/_ZN11MirrorLuigiD0Ev.cpp", + "src/_ZN11MirrorLuigiD1Ev.cpp", "src/_ZN11PowerFlower13OnYoshiTryEatEv.cpp", + "src/_ZN11PowerFlower6RenderEv.cpp", + "src/_ZN11PowerFlowerD0Ev.cpp", "src/_ZN11PowerFlowerD1Ev.cpp", + "src/_ZN11PyramidLiftD0Ev.cpp", + "src/_ZN11PyramidLiftD1Ev.cpp", "src/_ZN11PyramidStep16CleanupResourcesEv.cpp", "src/_ZN11PyramidStep6RenderEv.cpp", "src/_ZN11PyramidStepD0Ev.cpp", "src/_ZN11PyramidStepD1Ev.cpp", "src/_ZN11RickshawBdw13InitResourcesEv.cpp", "src/_ZN11RickshawBdw16CleanupResourcesEv.cpp", + "src/_ZN11RickshawBdwD0Ev.cpp", "src/_ZN11RickshawBdwD1Ev.cpp", "src/_ZN11RollingRock16CleanupResourcesEv.cpp", "src/_ZN11RollingRock16OnAimedAtWithEggEv.cpp", @@ -426,14 +499,29 @@ "src/_ZN11ShadowModel8CleanAllEv.cpp", "src/_ZN11ShadowModel9RenderAllEv.cpp", "src/_ZN11ShadowModelC1Ev.cpp", + "src/_ZN11ShadowModelD0Ev.cpp", "src/_ZN11ShadowModelD1Ev.cpp", + "src/_ZN11SnowmanBody13CallStateInitEv.cpp", + "src/_ZN11SnowmanBody16CleanupResourcesEv.cpp", "src/_ZN11SnowmanBody16OnPendingDestroyEv.cpp", + "src/_ZN11SnowmanBody17CallStateBehaviorEv.cpp", "src/_ZN11SnowmanBody6RenderEv.cpp", + "src/_ZN11SnowmanBody6State0Ev.cpp", "src/_ZN11SnowmanBody8BehaviorEv.cpp", + "src/_ZN11SnowmanBody8SetStateEi.cpp", + "src/_ZN11SnowmanBodyD0Ev.cpp", "src/_ZN11SnowmanBodyD1Ev.cpp", + "src/_ZN11SnowmanHead10InitState1Ev.cpp", + "src/_ZN11SnowmanHead10InitState2Ev.cpp", + "src/_ZN11SnowmanHead13CallStateInitEv.cpp", "src/_ZN11SnowmanHead16OnPendingDestroyEv.cpp", + "src/_ZN11SnowmanHead17CallStateBehaviorEv.cpp", + "src/_ZN11SnowmanHead6RenderEv.cpp", "src/_ZN11SnowmanHead8BehaviorEv.cpp", + "src/_ZN11SnowmanHead8SetStateEi.cpp", + "src/_ZN11SnowmanHeadD0Ev.cpp", "src/_ZN11SnowmanHeadD1Ev.cpp", + "src/_ZN11SoundObjectD0Ev.cpp", "src/_ZN11SoundObjectD1Ev.cpp", "src/_ZN11VirtualDoor13InitResourcesEv.cpp", "src/_ZN11VirtualDoor16CleanupResourcesEv.cpp", @@ -441,19 +529,34 @@ "src/_ZN11VirtualDoor6RenderEv.cpp", "src/_ZN11VirtualDoorD0Ev.cpp", "src/_ZN11VirtualDoorD1Ev.cpp", + "src/_ZN11VolcanoFire11ChangeStateEPNS_5StateE.cpp", + "src/_ZN11VolcanoFireD0Ev.cpp", "src/_ZN11VolcanoFireD1Ev.cpp", "src/_ZN11VolcanoRing16CleanupResourcesEv.cpp", "src/_ZN11VolcanoRing6RenderEv.cpp", + "src/_ZN11VolcanoRingD0Ev.cpp", "src/_ZN11VolcanoRingD1Ev.cpp", + "src/_ZN11WingFeather6RenderEv.cpp", + "src/_ZN11WingFeatherD0Ev.cpp", "src/_ZN11WingFeatherD1Ev.cpp", "src/_ZN11dCapEnemy_c14RenderCapModelEPK7Vector3.cpp", "src/_ZN11dCapEnemy_cC2Ev.cpp", + "src/_ZN11dCapEnemy_cD0Ev.cpp", "src/_ZN11dCapEnemy_cD1Ev.cpp", + "src/_ZN11dCapEnemy_cD2Ev.cpp", + "src/_ZN11dScMgBase_c15graphCallback_c14GraphCallback0Ev.cpp", + "src/_ZN11dScMgBase_c15graphCallback_c14GraphCallback1Ev.cpp", + "src/_ZN11dScMgBase_c15graphCallback_c14GraphCallback2Ev.cpp", + "src/_ZN11dScMgBase_c15graphCallback_c14GraphCallback3Ev.cpp", "src/_ZN11dScMgBase_c16OnPendingDestroyEv.cpp", "src/_ZN11dScMgBase_c18AfterInitResourcesEj.cpp", "src/_ZN11dScMgBase_c6RenderEv.cpp", "src/_ZN11dScMgBase_c8BehaviorEv.cpp", + "src/_ZN11dScMgBase_cD0Ev.cpp", + "src/_ZN11dScMgBase_cD1Ev.cpp", + "src/_ZN11dScMgBase_cD2Ev.cpp", "src/_ZN11dScMgCard_c16CleanupResourcesEv.cpp", + "src/_ZN11dScMgCard_c8BehaviorEv.cpp", "src/_ZN11dScMgCoin_c6RenderEv.cpp", "src/_ZN11dScMgCoin_cD0Ev.cpp", "src/_ZN11dScMgCoin_cD1Ev.cpp", @@ -461,26 +564,41 @@ "src/_ZN11dScMgJump_cD0Ev.cpp", "src/_ZN11dScMgJump_cD1Ev.cpp", "src/_ZN11dScMiniGm_c16OnPendingDestroyEv.cpp", + "src/_ZN11dScMiniGm_cD0Ev.cpp", "src/_ZN11dScMiniGm_cD1Ev.cpp", "src/_ZN11daBgSnwmn_c16OnPendingDestroyEv.cpp", + "src/_ZN11daBgSnwmn_c8BehaviorEv.cpp", + "src/_ZN11daBgSnwmn_cD0Ev.cpp", "src/_ZN11daBgSnwmn_cD1Ev.cpp", + "src/_ZN11daDsnBase_cD0Ev.cpp", + "src/_ZN11daDsnBase_cD1Ev.cpp", + "src/_ZN11fLiNdBaPr_cD1Ev.cpp", "src/_ZN12EnemySpawner16CleanupResourcesEv.cpp", "src/_ZN12EnemySpawnerD0Ev.cpp", "src/_ZN12EnemySpawnerD1Ev.cpp", "src/_ZN12FallBlockBfs13InitResourcesEv.cpp", "src/_ZN12FallBlockBfs16CleanupResourcesEv.cpp", + "src/_ZN12FallBlockBfsD0Ev.cpp", "src/_ZN12FallBlockBfsD1Ev.cpp", + "src/_ZN12FlamethrowerD0Ev.cpp", + "src/_ZN12FlamethrowerD1Ev.cpp", "src/_ZN12FortressWall16CleanupResourcesEv.cpp", "src/_ZN12FortressWall24OnHitByCannonBlastedCharER8dActor_c.cpp", + "src/_ZN12FortressWall6RenderEv.cpp", "src/_ZN12FortressWallD0Ev.cpp", "src/_ZN12FortressWallD1Ev.cpp", + "src/_ZN12HauntedChair18ApproachStateValueEPsS0_isis.cpp", "src/_ZN12HauntedChair6RenderEv.cpp", + "src/_ZN12HauntedChairD0Ev.cpp", "src/_ZN12HauntedChairD1Ev.cpp", "src/_ZN12HealingHeart6RenderEv.cpp", + "src/_ZN12HealingHeartD0Ev.cpp", "src/_ZN12HealingHeartD1Ev.cpp", "src/_ZN12MetalNetLift6RenderEv.cpp", "src/_ZN12MetalNetLiftD0Ev.cpp", "src/_ZN12MetalNetLiftD1Ev.cpp", + "src/_ZN12OamAnimationC1Ev.cpp", + "src/_ZN12OamAnimationD1Ev.cpp", "src/_ZN12PiranhaPlant16CleanupResourcesEv.cpp", "src/_ZN12PiranhaPlant16OnAimedAtWithEggEv.cpp", "src/_ZN12PiranhaPlant16OnPendingDestroyEv.cpp", @@ -489,19 +607,32 @@ "src/_ZN12PiranhaPlantD1Ev.cpp", "src/_ZN12SwitchPillar15OnGroundPoundedER8dActor_c.cpp", "src/_ZN12SwitchPillar6RenderEv.cpp", + "src/_ZN12SwitchPillarD0Ev.cpp", "src/_ZN12SwitchPillarD1Ev.cpp", + "src/_ZN12WaterDiamond10SetWaterIDEv.cpp", + "src/_ZN12WaterDiamond16CleanupResourcesEv.cpp", + "src/_ZN12WaterDiamond19CheckClsnWithPlayerEv.cpp", + "src/_ZN12WaterDiamond20UpdateModelTransformEv.cpp", "src/_ZN12WaterDiamond6RenderEv.cpp", + "src/_ZN12WaterDiamondD0Ev.cpp", "src/_ZN12WaterDiamondD1Ev.cpp", "src/_ZN12WaterSuction16CleanupResourcesEv.cpp", "src/_ZN12WaterSuction16OnPendingDestroyEv.cpp", "src/_ZN12WaterSuction6RenderEv.cpp", "src/_ZN12WaterSuctionD0Ev.cpp", "src/_ZN12WaterSuctionD1Ev.cpp", + "src/_ZN12WorkElevatorD0Ev.cpp", + "src/_ZN12WorkElevatorD1Ev.cpp", + "src/_ZN12dBgCh_SphCrrD0Ev.cpp", + "src/_ZN12dBgCh_SphCrrD1Ev.cpp", + "src/_ZN12dEnemyBase_cC2Ev.cpp", "src/_ZN12dEnemyBase_cD0Ev.cpp", "src/_ZN12dEnemyBase_cD1Ev.cpp", + "src/_ZN12dEnemyBase_cD2Ev.cpp", "src/_ZN12dScMg3DEsp_c16CleanupResourcesEv.cpp", "src/_ZN12dScMgAmida_c5Unk36Ev.cpp", "src/_ZN12dScMgJump2_c16CleanupResourcesEv.cpp", + "src/_ZN12dScMgLuigi_c21AfterCleanupResourcesEj.cpp", "src/_ZN12dScMgLuigi_c6RenderEv.cpp", "src/_ZN12dScMgLuigi_c8BehaviorEv.cpp", "src/_ZN12dScMgLuigi_cD0Ev.cpp", @@ -511,17 +642,26 @@ "src/_ZN12dScMgPanel_cD1Ev.cpp", "src/_ZN12dScMgSlot1_c15OnHitByMegaCharER6Player.cpp", "src/_ZN12dScMgSlot1_c19OnHitFromUnderneathER8dActor_c.cpp", + "src/_ZN12dScMgSlot1_cD0Ev.cpp", + "src/_ZN12dScMgSlot1_cD1Ev.cpp", "src/_ZN12dScMgSound_c6RenderEv.cpp", "src/_ZN12dScMgSound_cD0Ev.cpp", "src/_ZN12dScMgSound_cD1Ev.cpp", "src/_ZN12dScStarSel_c16CleanupResourcesEv.cpp", "src/_ZN12dScStarSel_c16OnPendingDestroyEv.cpp", + "src/_ZN12dScStarSel_cD0Ev.cpp", + "src/_ZN12dScStarSel_cD1Ev.cpp", "src/_ZN12daBakubaku_c16OnAimedAtWithEggEv.cpp", "src/_ZN12daBakubaku_c16OnPendingDestroyEv.cpp", "src/_ZN12daBakubaku_c6RenderEv.cpp", + "src/_ZN12daBakubaku_cD0Ev.cpp", "src/_ZN12daBakubaku_cD1Ev.cpp", "src/_ZN12daDossyCap_c13OnYoshiTryEatEv.cpp", "src/_ZN12daDossyCap_c6RenderEv.cpp", + "src/_ZN12daDossyCap_cD0Ev.cpp", + "src/_ZN12daDossyCap_cD1Ev.cpp", + "src/_ZN12daObjAbuku_cD0Ev.cpp", + "src/_ZN12daObjAbuku_cD1Ev.cpp", "src/_ZN13BasementWater16CleanupResourcesEv.cpp", "src/_ZN13BasementWaterD0Ev.cpp", "src/_ZN13BasementWaterD1Ev.cpp", @@ -530,6 +670,8 @@ "src/_ZN13BigBrickBlock15OnGroundPoundedER8dActor_c.cpp", "src/_ZN13BigBrickBlock15OnHitByMegaCharER6Player.cpp", "src/_ZN13BigBrickBlock16CleanupResourcesEv.cpp", + "src/_ZN13BigBrickBlock16HasNonzeroAngleXEv.cpp", + "src/_ZN13BigBrickBlock17NotifyLinkedActorEv.cpp", "src/_ZN13BigBrickBlock8OnKickedER8dActor_c.cpp", "src/_ZN13BigBrickBlockD0Ev.cpp", "src/_ZN13BigBrickBlockD1Ev.cpp", @@ -537,6 +679,9 @@ "src/_ZN13BowserShutter8BehaviorEv.cpp", "src/_ZN13BowserShutterD0Ev.cpp", "src/_ZN13BowserShutterD1Ev.cpp", + "src/_ZN13CLPS_BlockRefC1Ev.cpp", + "src/_ZN13CLPS_BlockRefD1Ev.cpp", + "src/_ZN13CLPS_BlockRefaSER10CLPS_Block.cpp", "src/_ZN13ExpandingHeap10VGetNodeIDEv.cpp", "src/_ZN13ExpandingHeap10VSetNodeIDEj.cpp", "src/_ZN13ExpandingHeap11VDeallocateEPv.cpp", @@ -549,16 +694,21 @@ "src/_ZN13ExpandingHeap7VIntactEv.cpp", "src/_ZN13ExpandingHeap7VRescueEv.cpp", "src/_ZN13ExpandingHeap7VSizeofEPv.cpp", + "src/_ZN13ExpandingHeap8VDestroyEv.cpp", "src/_ZN13ExpandingHeap9VAllocateEji.cpp", + "src/_ZN13ExpandingHeapC1EPvjP4HeapP22ExpandingHeapAllocator.cpp", "src/_ZN13ExpandingHeapD0Ev.cpp", + "src/_ZN13ExpandingHeapD1Ev.cpp", "src/_ZN13FortressTower16CleanupResourcesEv.cpp", "src/_ZN13FortressTower6RenderEv.cpp", "src/_ZN13FortressTowerD0Ev.cpp", "src/_ZN13FortressTowerD1Ev.cpp", + "src/_ZN13HeapAllocator7DestroyEv.cpp", "src/_ZN13InvisiblePole16CleanupResourcesEv.cpp", "src/_ZN13InvisiblePole16OnPendingDestroyEv.cpp", "src/_ZN13InvisiblePole6RenderEv.cpp", "src/_ZN13InvisiblePole8BehaviorEv.cpp", + "src/_ZN13InvisiblePoleD0Ev.cpp", "src/_ZN13InvisiblePoleD1Ev.cpp", "src/_ZN13KoopaTheQuick6RenderEv.cpp", "src/_ZN13KoopaTheQuickD0Ev.cpp", @@ -567,68 +717,110 @@ "src/_ZN13MontyMoleRock6RenderEv.cpp", "src/_ZN13MontyMoleRockD0Ev.cpp", "src/_ZN13MontyMoleRockD1Ev.cpp", - "src/_ZN10daPgMthr_c16OnPendingDestroyEv.cpp", - "src/_ZN10daPgMthr_c6RenderEv.cpp", - "src/_ZN10daPgMthr_cD1Ev.cpp", "src/_ZN13OneUpMushroom13OnTurnIntoEggER6Player.cpp", "src/_ZN13OneUpMushroom13OnYoshiTryEatEv.cpp", "src/_ZN13OneUpMushroom16OnPendingDestroyEv.cpp", + "src/_ZN13OneUpMushroomD0Ev.cpp", "src/_ZN13OneUpMushroomD1Ev.cpp", + "src/_ZN13PeachPainting13InitResourcesEv.cpp", + "src/_ZN13PeachPainting16CleanupResourcesEv.cpp", + "src/_ZN13PeachPainting20UpdateModelTransformEv.cpp", "src/_ZN13PeachPainting6RenderEv.cpp", + "src/_ZN13PeachPaintingD0Ev.cpp", "src/_ZN13PeachPaintingD1Ev.cpp", "src/_ZN13PoleBillboard13InitResourcesEv.cpp", "src/_ZN13PoleBillboard6RenderEv.cpp", + "src/_ZN13PoleBillboardD0Ev.cpp", "src/_ZN13PoleBillboardD1Ev.cpp", + "src/_ZN13PrincessPeach13CallStateInitEv.cpp", "src/_ZN13PrincessPeach16CleanupResourcesEv.cpp", "src/_ZN13PrincessPeach16OnPendingDestroyEv.cpp", + "src/_ZN13PrincessPeach17CallStateBehaviorEv.cpp", "src/_ZN13PrincessPeach6RenderEv.cpp", + "src/_ZN13PrincessPeach6State2Ev.cpp", + "src/_ZN13PrincessPeach8SetStateEi.cpp", + "src/_ZN13PrincessPeachD0Ev.cpp", "src/_ZN13PrincessPeachD1Ev.cpp", + "src/_ZN13QuestionBlock11OnAttacked1ER8dActor_c.cpp", + "src/_ZN13QuestionBlock15OnGroundPoundedER8dActor_c.cpp", + "src/_ZN13QuestionBlock15OnHitByMegaCharER6Player.cpp", + "src/_ZN13QuestionBlock19OnHitFromUnderneathER8dActor_c.cpp", + "src/_ZN13QuestionBlock6RenderEv.cpp", + "src/_ZN13QuestionBlock8OnKickedER8dActor_c.cpp", "src/_ZN13QuestionBlockD0Ev.cpp", "src/_ZN13QuestionBlockD1Ev.cpp", + "src/_ZN13RacingPenguin16CleanupResourcesEv.cpp", "src/_ZN13RacingPenguin16OnPendingDestroyEv.cpp", + "src/_ZN13RacingPenguin6RenderEv.cpp", + "src/_ZN13RacingPenguin8BehaviorEv.cpp", + "src/_ZN13RacingPenguinD0Ev.cpp", "src/_ZN13RacingPenguinD1Ev.cpp", "src/_ZN13RollingLogLll13InitResourcesEv.cpp", "src/_ZN13RollingLogLll16CleanupResourcesEv.cpp", + "src/_ZN13RollingLogLllD0Ev.cpp", "src/_ZN13RollingLogLllD1Ev.cpp", "src/_ZN13RollingLogTtm13InitResourcesEv.cpp", "src/_ZN13RollingLogTtm16CleanupResourcesEv.cpp", "src/_ZN13RollingLogTtm8BehaviorEv.cpp", + "src/_ZN13RollingLogTtmD0Ev.cpp", "src/_ZN13RollingLogTtmD1Ev.cpp", "src/_ZN13SharedFilePtr19ReallocateModelFileEv.cpp", "src/_ZN13SharedFilePtr7ReleaseEv.cpp", "src/_ZN13SharedFilePtr9ConstructEj.cpp", "src/_ZN13SnowmanBreath16OnPendingDestroyEv.cpp", + "src/_ZN13SnowmanBreath6RenderEv.cpp", + "src/_ZN13SnowmanBreathD0Ev.cpp", + "src/_ZN13SnowmanBreathD1Ev.cpp", "src/_ZN13TTC_MovingBar16CleanupResourcesEv.cpp", "src/_ZN13TTC_MovingBar6RenderEv.cpp", "src/_ZN13TTC_MovingBarD0Ev.cpp", "src/_ZN13TTC_MovingBarD1Ev.cpp", + "src/_ZN13TreasureChest10InitState0Ev.cpp", + "src/_ZN13TreasureChest10InitState1Ev.cpp", + "src/_ZN13TreasureChest10InitState2Ev.cpp", "src/_ZN13TreasureChest16CleanupResourcesEv.cpp", + "src/_ZN13TreasureChest17CallStateBehaviorEv.cpp", + "src/_ZN13TreasureChest20UpdateModelTransformEv.cpp", "src/_ZN13TreasureChest6RenderEv.cpp", + "src/_ZN13TreasureChest6State0Ev.cpp", + "src/_ZN13TreasureChest6State2Ev.cpp", + "src/_ZN13TreasureChest8BehaviorEv.cpp", + "src/_ZN13TreasureChest8SetStateEi.cpp", + "src/_ZN13TreasureChestD0Ev.cpp", "src/_ZN13TreasureChestD1Ev.cpp", "src/_ZN13UpDownLiftBbh16CleanupResourcesEv.cpp", "src/_ZN13UpDownLiftBbh6RenderEv.cpp", + "src/_ZN13UpDownLiftBbhD0Ev.cpp", + "src/_ZN13UpDownLiftBbhD1Ev.cpp", "src/_ZN13WaterfallMist13InitResourcesEv.cpp", "src/_ZN13WaterfallMistD0Ev.cpp", "src/_ZN13WaterfallMistD1Ev.cpp", "src/_ZN13dScGameOver_c16CleanupResourcesEv.cpp", "src/_ZN13dScGameOver_c16OnPendingDestroyEv.cpp", + "src/_ZN13dScGameOver_cD0Ev.cpp", "src/_ZN13dScGameOver_cD1Ev.cpp", "src/_ZN13dScMgMCarlo_c6RenderEv.cpp", "src/_ZN13dScMgMemory_c6RenderEv.cpp", "src/_ZN13dScMgTeresa_c6RenderEv.cpp", "src/_ZN13dScMgTeresa_cD0Ev.cpp", "src/_ZN13dScMgTeresa_cD1Ev.cpp", + "src/_ZN13daObjDorifu_c16CleanupResourcesEP20daObjDorifuResources.cpp", "src/_ZN13daObjDorifu_c6RenderEv.cpp", "src/_ZN13daObjDorifu_cD0Ev.cpp", "src/_ZN13daObjDorifu_cD1Ev.cpp", "src/_ZN13daObjEmmLog_c6RenderEv.cpp", "src/_ZN13daObjEmmLog_cD0Ev.cpp", "src/_ZN13daObjEmmLog_cD1Ev.cpp", + "src/_ZN13daObjHmBskt_c6RenderEv.cpp", + "src/_ZN13daObjHmBskt_cD0Ev.cpp", + "src/_ZN13daObjHmBskt_cD1Ev.cpp", "src/_ZN13daObjKuruma_c6RenderEv.cpp", "src/_ZN13daObjKuruma_cD0Ev.cpp", "src/_ZN13daObjKuruma_cD1Ev.cpp", "src/_ZN13daObjMaruta_c15OnHitByMegaCharER6Player.cpp", "src/_ZN13daObjMaruta_c6RenderEv.cpp", + "src/_ZN13daObjMaruta_cD0Ev.cpp", + "src/_ZN13daObjMaruta_cD1Ev.cpp", "src/_ZN13daObjSwdoor_c6RenderEv.cpp", "src/_ZN13daObjSwdoor_cD0Ev.cpp", "src/_ZN13daObjSwdoor_cD1Ev.cpp", @@ -641,10 +833,16 @@ "src/_ZN14BlendModelAnim6RenderEPK7Vector3.cpp", "src/_ZN14BlendModelAnim7AdvanceEv.cpp", "src/_ZN14BlendModelAnim9DoSetFileEPcii.cpp", + "src/_ZN14BlueCoinSwitch6RenderEv.cpp", "src/_ZN14BlueCoinSwitchD0Ev.cpp", "src/_ZN14BlueCoinSwitchD1Ev.cpp", + "src/_ZN14CutsceneObject16CleanupResourcesEv.cpp", "src/_ZN14CutsceneObject16OnPendingDestroyEv.cpp", + "src/_ZN14CutsceneObjectD0Ev.cpp", "src/_ZN14CutsceneObjectD1Ev.cpp", + "src/_ZN14DorriePlatformC1Ev.cpp", + "src/_ZN14DorriePlatformD1Ev.cpp", + "src/_ZN14EnemySwitchTagD0Ev.cpp", "src/_ZN14EnemySwitchTagD1Ev.cpp", "src/_ZN14KnockDownPlank11OnAttacked2ER8dActor_c.cpp", "src/_ZN14KnockDownPlank15OnHitByMegaCharER6Player.cpp", @@ -653,6 +851,13 @@ "src/_ZN14KnockDownPlank8OnKickedER8dActor_c.cpp", "src/_ZN14KnockDownPlankD0Ev.cpp", "src/_ZN14KnockDownPlankD1Ev.cpp", + "src/_ZN14QuestionSwitch10HandleClsnER8dActor_c.cpp", + "src/_ZN14QuestionSwitch15OnGroundPoundedER8dActor_c.cpp", + "src/_ZN14QuestionSwitch15UpdateClsnStateEv.cpp", + "src/_ZN14QuestionSwitch16CleanupResourcesEv.cpp", + "src/_ZN14QuestionSwitch17AfterClsnCallbackEP4dBgWP8dActor_cS3_.cpp", + "src/_ZN14QuestionSwitch19UpdateClsnTransformEv.cpp", + "src/_ZN14QuestionSwitch20UpdateModelTransformEv.cpp", "src/_ZN14QuestionSwitch6RenderEv.cpp", "src/_ZN14QuestionSwitchD0Ev.cpp", "src/_ZN14QuestionSwitchD1Ev.cpp", @@ -671,7 +876,13 @@ "src/_ZN14UnchainedChomp16CleanupResourcesEv.cpp", "src/_ZN14UnchainedChomp16OnAimedAtWithEggEv.cpp", "src/_ZN14UnchainedChomp16OnPendingDestroyEv.cpp", + "src/_ZN14UnchainedChomp6RenderEv.cpp", + "src/_ZN14UnchainedChompD0Ev.cpp", "src/_ZN14UnchainedChompD1Ev.cpp", + "src/_ZN14UnknownVsEntryD0Ev.cpp", + "src/_ZN14UnknownVsEntryD1Ev.cpp", + "src/_ZN14dBgW_KcMbgSclY10DetectClsnER9dBgCh_Gnd.cpp", + "src/_ZN14dBgW_KcMbgSclY10DetectClsnER9dBgCh_Lin.cpp", "src/_ZN14dBgW_KcMbgSclY9GetNormalEsR7Vector3.cpp", "src/_ZN14dBgW_KcMbgSclYC1Ev.cpp", "src/_ZN14dBgW_KcMbgSclYD0Ev.cpp", @@ -687,6 +898,11 @@ "src/_ZN14dScMgD3DBase_cD1Ev.cpp", "src/_ZN14dScMgMCarlo2_c16CleanupResourcesEv.cpp", "src/_ZN14dScMgMemory2_c6RenderEv.cpp", + "src/_ZN14daObjC1_Trap_c16CleanupResourcesEv.cpp", + "src/_ZN14daObjC1_Trap_c6RenderEv.cpp", + "src/_ZN14daObjC1_Trap_c8BehaviorEv.cpp", + "src/_ZN14daObjC1_Trap_cD0Ev.cpp", + "src/_ZN14daObjC1_Trap_cD1Ev.cpp", "src/_ZN14daObjUkiyuka_c6RenderEv.cpp", "src/_ZN14daObjUkiyuka_cD0Ev.cpp", "src/_ZN14daObjUkiyuka_cD1Ev.cpp", @@ -694,10 +910,15 @@ "src/_ZN15BookShotSpawnerD0Ev.cpp", "src/_ZN15BookShotSpawnerD1Ev.cpp", "src/_ZN15ChainChompFence16CleanupResourcesEv.cpp", + "src/_ZN15ChainChompFence6RenderEv.cpp", "src/_ZN15ChainChompFenceD0Ev.cpp", "src/_ZN15ChainChompFenceD1Ev.cpp", + "src/_ZN15FaderBrightnessD2Ev.cpp", "src/_ZN15FireSeaElevator6RenderEv.cpp", + "src/_ZN15FireSeaElevatorD0Ev.cpp", "src/_ZN15FireSeaElevatorD1Ev.cpp", + "src/_ZN15IceSlideManager13InitResourcesEv.cpp", + "src/_ZN15IceSlideManagerD0Ev.cpp", "src/_ZN15IceSlideManagerD1Ev.cpp", "src/_ZN15MaterialChanger6UpdateER15ModelComponents.cpp", "src/_ZN15MaterialChanger7PrepareER8BMD_FileR8BMA_File.cpp", @@ -706,8 +927,13 @@ "src/_ZN15MaterialChangerD1Ev.cpp", "src/_ZN15ModelComponents11UpdateBonesEP8BCA_Filei.cpp", "src/_ZN15ModelComponents21UpdateVertsUsingBonesEv.cpp", + "src/_ZN15ModelComponents6RenderEP9Matrix4x3P7Vector3.cpp", "src/_ZN15PowerStarCreate8BehaviorEv.cpp", + "src/_ZN15PowerStarCreateD0Ev.cpp", "src/_ZN15PowerStarCreateD1Ev.cpp", + "src/_ZN15RecRoomCupboard16CleanupResourcesEv.cpp", + "src/_ZN15RecRoomCupboardD0Ev.cpp", + "src/_ZN15RecRoomCupboardD1Ev.cpp", "src/_ZN15RollingIronBall16OnAimedAtWithEggEv.cpp", "src/_ZN15RollingIronBall6RenderEv.cpp", "src/_ZN15RollingIronBall8BehaviorEv.cpp", @@ -715,6 +941,7 @@ "src/_ZN15RollingIronBallD1Ev.cpp", "src/_ZN15RotatingFirebar16CleanupResourcesEv.cpp", "src/_ZN15RotatingFirebar6RenderEv.cpp", + "src/_ZN15RotatingFirebarD0Ev.cpp", "src/_ZN15RotatingFirebarD1Ev.cpp", "src/_ZN15TextureSequence6UpdateER15ModelComponents.cpp", "src/_ZN15TextureSequence7PrepareER8BMD_FileR8BTP_File.cpp", @@ -722,10 +949,18 @@ "src/_ZN15TextureSequenceC1Ev.cpp", "src/_ZN15TextureSequenceD0Ev.cpp", "src/_ZN15TextureSequenceD1Ev.cpp", + "src/_ZN15TtcRotatingCube11UpdateModelEv.cpp", + "src/_ZN15TtcRotatingCube16CleanupResourcesEv.cpp", + "src/_ZN15TtcRotatingCube6RenderEv.cpp", + "src/_ZN15TtcRotatingCubeD0Ev.cpp", + "src/_ZN15TtcRotatingCubeD1Ev.cpp", "src/_ZN15TtcRotatingGear16CleanupResourcesEv.cpp", "src/_ZN15TtcRotatingGear6RenderEv.cpp", "src/_ZN15TtcRotatingGearD0Ev.cpp", "src/_ZN15TtcRotatingGearD1Ev.cpp", + "src/_ZN15UnknownVsPlayerC1Ev.cpp", + "src/_ZN15UnknownVsPlayerD1Ev.cpp", + "src/_ZN15dMg3DEspModel_cD1Ev.cpp", "src/_ZN15dScMgCurling2_c6RenderEv.cpp", "src/_ZN15dScMgCurling2_cD0Ev.cpp", "src/_ZN15dScMgCurling2_cD1Ev.cpp", @@ -739,23 +974,33 @@ "src/_ZN15daObjGuragura_cD0Ev.cpp", "src/_ZN15daObjGuragura_cD1Ev.cpp", "src/_ZN15daObjMarioCap_c16CleanupResourcesEv.cpp", + "src/_ZN15daObjMarioCap_cD0Ev.cpp", "src/_ZN15daObjMarioCap_cD1Ev.cpp", "src/_ZN15daObjRcCarpet_c6RenderEv.cpp", + "src/_ZN15daObjRcCarpet_cD0Ev.cpp", + "src/_ZN15daObjRcCarpet_cD1Ev.cpp", "src/_ZN16BowserShockwaves16CleanupResourcesEv.cpp", "src/_ZN16BowserShockwaves6RenderEv.cpp", "src/_ZN16BowserShockwavesD0Ev.cpp", "src/_ZN16BowserShockwavesD1Ev.cpp", "src/_ZN16FloatingFloorBfs13InitResourcesEv.cpp", "src/_ZN16FloatingFloorBfs16CleanupResourcesEv.cpp", + "src/_ZN16FloatingFloorBfsD0Ev.cpp", "src/_ZN16FloatingFloorBfsD1Ev.cpp", "src/_ZN16RotatingCogSmall16CleanupResourcesEv.cpp", "src/_ZN16RotatingCogSmall6RenderEv.cpp", "src/_ZN16RotatingCogSmallD0Ev.cpp", "src/_ZN16RotatingCogSmallD1Ev.cpp", + "src/_ZN16SpinningPlatform11UpdateModelEv.cpp", "src/_ZN16SpinningPlatform16CleanupResourcesEv.cpp", "src/_ZN16SpinningPlatform6RenderEv.cpp", + "src/_ZN16SpinningPlatformD0Ev.cpp", + "src/_ZN16SpinningPlatformD1Ev.cpp", "src/_ZN16SwingingPlatform6RenderEv.cpp", + "src/_ZN16SwingingPlatformD0Ev.cpp", "src/_ZN16SwingingPlatformD1Ev.cpp", + "src/_ZN16dMgJump3DMario_cC1Ev.cpp", + "src/_ZN16dMgJump3DMario_cD1Ev.cpp", "src/_ZN16dScMgPachinko2_c6RenderEv.cpp", "src/_ZN16dScMgPachinko2_cD0Ev.cpp", "src/_ZN16dScMgPachinko2_cD1Ev.cpp", @@ -765,30 +1010,59 @@ "src/_ZN16daObjCtMecha03_c6RenderEv.cpp", "src/_ZN16daObjCtMecha03_cD0Ev.cpp", "src/_ZN16daObjCtMecha03_cD1Ev.cpp", + "src/_ZN16daObjCtMecha04_c15MoveActorOnBeltER8dActor_c.cpp", + "src/_ZN16daObjCtMecha04_c16CleanupResourcesEv.cpp", + "src/_ZN16daObjCtMecha04_c17AfterClsnCallbackEP4dBgWP8dActor_cS3_.cpp", + "src/_ZN16daObjCtMecha04_c6RenderEv.cpp", + "src/_ZN16daObjCtMecha04_cD0Ev.cpp", + "src/_ZN16daObjCtMecha04_cD1Ev.cpp", "src/_ZN16daObjCtMecha05_c6RenderEv.cpp", "src/_ZN16daObjCtMecha05_cD0Ev.cpp", "src/_ZN16daObjCtMecha05_cD1Ev.cpp", "src/_ZN16daObjFallBlock_c15OnHitByMegaCharER6Player.cpp", "src/_ZN16daObjFallBlock_c6RenderEv.cpp", + "src/_ZN16daObjFallBlock_cD0Ev.cpp", + "src/_ZN16daObjFallBlock_cD1Ev.cpp", "src/_ZN16daObjKaitendai_c6RenderEv.cpp", "src/_ZN16daObjKaitendai_cD0Ev.cpp", "src/_ZN16daObjKaitendai_cD1Ev.cpp", + "src/_ZN16daObjKinokoTag_c16CleanupResourcesEv.cpp", + "src/_ZN16daObjKinokoTag_c17SpawnMegaMushroomEv.cpp", + "src/_ZN16daObjKinokoTag_c20TrySpawnMegaMushroomEv.cpp", + "src/_ZN16daObjKinokoTag_c8BehaviorEv.cpp", + "src/_ZN16daObjKinokoTag_cD0Ev.cpp", + "src/_ZN16daObjKinokoTag_cD1Ev.cpp", + "src/_ZN16daObjPushblock_c15OnHitByMegaCharER6Player.cpp", + "src/_ZN16daObjPushblock_c6RenderEv.cpp", + "src/_ZN16daObjPushblock_cD0Ev.cpp", + "src/_ZN16daObjPushblock_cD1Ev.cpp", "src/_ZN16daObjRc_Dorifu_c13InitResourcesEv.cpp", "src/_ZN16daObjRc_Dorifu_c16CleanupResourcesEv.cpp", + "src/_ZN16daObjRc_Dorifu_cD0Ev.cpp", "src/_ZN16daObjRc_Dorifu_cD1Ev.cpp", "src/_ZN17BigMovingIceBlock6RenderEv.cpp", + "src/_ZN17BigMovingIceBlockD0Ev.cpp", + "src/_ZN17BigMovingIceBlockD1Ev.cpp", "src/_ZN17BowserPuzzlePiece16CleanupResourcesEv.cpp", "src/_ZN17BowserPuzzlePiece6RenderEv.cpp", + "src/_ZN17BowserPuzzlePieceD0Ev.cpp", + "src/_ZN17BowserPuzzlePieceD1Ev.cpp", "src/_ZN17BowserSkyPlatform6RenderEv.cpp", + "src/_ZN17BowserSkyPlatformD0Ev.cpp", "src/_ZN17BowserSkyPlatformD1Ev.cpp", "src/_ZN17ExtendingPlatform16CleanupResourcesEv.cpp", "src/_ZN17ExtendingPlatform16OnPendingDestroyEv.cpp", + "src/_ZN17ExtendingPlatform20UpdateModelTransformEv.cpp", + "src/_ZN17ExtendingPlatform23UpdateColliderTransformEv.cpp", "src/_ZN17ExtendingPlatform6RenderEv.cpp", + "src/_ZN17ExtendingPlatformD0Ev.cpp", "src/_ZN17ExtendingPlatformD1Ev.cpp", "src/_ZN17SlidingPlatformWf16CleanupResourcesEv.cpp", "src/_ZN17SlidingPlatformWf6RenderEv.cpp", "src/_ZN17SlidingPlatformWfD0Ev.cpp", "src/_ZN17SlidingPlatformWfD1Ev.cpp", + "src/_ZN17dMg3DEspAnimSet_cC1Ev.cpp", + "src/_ZN17dMg3DEspAnimSet_cD1Ev.cpp", "src/_ZN17dScMgTrampoline_c16CleanupResourcesEv.cpp", "src/_ZN17dScMgTrampoline_c8BehaviorEv.cpp", "src/_ZN17dScMgTrampoline_cD0Ev.cpp", @@ -799,32 +1073,44 @@ "src/_ZN17daObjFloatBoard_cD1Ev.cpp", "src/_ZN17daObjKm1_Dorifu_c13InitResourcesEv.cpp", "src/_ZN17daObjKm1_Dorifu_c16CleanupResourcesEv.cpp", + "src/_ZN17daObjKm1_Dorifu_cD0Ev.cpp", "src/_ZN17daObjKm1_Dorifu_cD1Ev.cpp", "src/_ZN17daObjKm3_Kuruma_c13InitResourcesEv.cpp", "src/_ZN17daObjKm3_Kuruma_c16CleanupResourcesEv.cpp", + "src/_ZN17daObjKm3_Kuruma_cD0Ev.cpp", "src/_ZN17daObjKm3_Kuruma_cD1Ev.cpp", "src/_ZN17daObjKurumajiku_c6RenderEv.cpp", "src/_ZN17daObjKurumajiku_cD0Ev.cpp", "src/_ZN17daObjKurumajiku_cD1Ev.cpp", + "src/_ZN17daObjWlPolelift_c16CleanupResourcesEv.cpp", "src/_ZN17daObjWlPolelift_c6RenderEv.cpp", + "src/_ZN17daObjWlPolelift_c8BehaviorEv.cpp", + "src/_ZN17daObjWlPolelift_cD0Ev.cpp", "src/_ZN17daObjWlPolelift_cD1Ev.cpp", "src/_ZN18BowserFireSeaArena16CleanupResourcesEv.cpp", "src/_ZN18BowserFireSeaArena6RenderEv.cpp", "src/_ZN18BowserFireSeaArenaD0Ev.cpp", "src/_ZN18BowserFireSeaArenaD1Ev.cpp", + "src/_ZN18NestedHeapIterator4InitEP13HeapAllocator.cpp", "src/_ZN18NestedHeapIterator4NextEP13HeapAllocator.cpp", + "src/_ZN18NestedHeapIterator5AddAtEP13HeapAllocatorS1_.cpp", "src/_ZN18NestedHeapIterator6RemoveEP13HeapAllocator.cpp", "src/_ZN18NestedHeapIterator8PreviousEP13HeapAllocator.cpp", + "src/_ZN18NestedHeapIteratorC1Ej.cpp", "src/_ZN18PoppingLavaBubbles13InitResourcesEv.cpp", + "src/_ZN18PoppingLavaBubblesD0Ev.cpp", "src/_ZN18PoppingLavaBubblesD1Ev.cpp", "src/_ZN18RickshawPlatformBs13InitResourcesEv.cpp", "src/_ZN18RickshawPlatformBs16CleanupResourcesEv.cpp", + "src/_ZN18RickshawPlatformBsD0Ev.cpp", "src/_ZN18RickshawPlatformBsD1Ev.cpp", "src/_ZN18RotatingPlatformRr13InitResourcesEv.cpp", "src/_ZN18RotatingPlatformRr16CleanupResourcesEv.cpp", + "src/_ZN18RotatingPlatformRrD0Ev.cpp", "src/_ZN18RotatingPlatformRrD1Ev.cpp", "src/_ZN18RotatingPlatformWf13InitResourcesEv.cpp", "src/_ZN18RotatingPlatformWf16CleanupResourcesEv.cpp", + "src/_ZN18RotatingPlatformWfD0Ev.cpp", "src/_ZN18RotatingPlatformWfD1Ev.cpp", "src/_ZN18SolidHeapAllocator5ResetEj.cpp", "src/_ZN18TextureTransformer6UpdateER15ModelComponents.cpp", @@ -834,9 +1120,11 @@ "src/_ZN18TextureTransformerD1Ev.cpp", "src/_ZN18TiltingPlatformBfs13InitResourcesEv.cpp", "src/_ZN18TiltingPlatformBfs16CleanupResourcesEv.cpp", + "src/_ZN18TiltingPlatformBfsD0Ev.cpp", "src/_ZN18TiltingPlatformBfsD1Ev.cpp", "src/_ZN18TiltingPlatformLll13InitResourcesEv.cpp", "src/_ZN18TiltingPlatformLll16CleanupResourcesEv.cpp", + "src/_ZN18TiltingPlatformLllD0Ev.cpp", "src/_ZN18TiltingPlatformLllD1Ev.cpp", "src/_ZN18dScMgTrampoline2_c16CleanupResourcesEv.cpp", "src/_ZN18dScMgTrampoline2_cD0Ev.cpp", @@ -846,6 +1134,7 @@ "src/_ZN19AmbientSoundEffects6RenderEv.cpp", "src/_ZN19AmbientSoundEffectsD0Ev.cpp", "src/_ZN19AmbientSoundEffectsD1Ev.cpp", + "src/_ZN19BowserPuzzleManagerD0Ev.cpp", "src/_ZN19BowserPuzzleManagerD1Ev.cpp", "src/_ZN19FirePiranhaPlantBig13OnTurnIntoEggER6Player.cpp", "src/_ZN19FirePiranhaPlantBig16CleanupResourcesEv.cpp", @@ -863,75 +1152,123 @@ "src/_ZN19OrangeBallBillboardD1Ev.cpp", "src/_ZN19RickshawPlatformBdw13InitResourcesEv.cpp", "src/_ZN19RickshawPlatformBdw16CleanupResourcesEv.cpp", + "src/_ZN19RickshawPlatformBdwD0Ev.cpp", "src/_ZN19RickshawPlatformBdwD1Ev.cpp", "src/_ZN19RotatingPlatformLll13InitResourcesEv.cpp", "src/_ZN19RotatingPlatformLll16CleanupResourcesEv.cpp", + "src/_ZN19RotatingPlatformLllD0Ev.cpp", "src/_ZN19RotatingPlatformLllD1Ev.cpp", "src/_ZN19RotatingPlatformWdw13InitResourcesEv.cpp", "src/_ZN19RotatingPlatformWdw16CleanupResourcesEv.cpp", + "src/_ZN19RotatingPlatformWdwD0Ev.cpp", "src/_ZN19RotatingPlatformWdwD1Ev.cpp", + "src/_ZN19cMgSmartball_ball_c6UpdateEv.cpp", + "src/_ZN19cMgSmartball_slot_c12SaveSnapshotEv.cpp", + "src/_ZN19cMgSmartball_slot_c14RestoreInitialEv.cpp", "src/_ZN19dScMgSingle3DBase_c12BeforeRenderEv.cpp", "src/_ZN19dScMgSingle3DBase_c14BeforeBehaviorEv.cpp", "src/_ZN19dScMgSingle3DBase_c18AfterInitResourcesEj.cpp", + "src/_ZN19dScMgSingle3DBase_c21AfterCleanupResourcesEj.cpp", "src/_ZN19dScMgSingle3DBase_cD0Ev.cpp", "src/_ZN19dScMgSingle3DBase_cD1Ev.cpp", "src/_ZN20SwitchActivatedPlank16CleanupResourcesEv.cpp", "src/_ZN20SwitchActivatedPlank6RenderEv.cpp", - "src/_ZN16daObjCtMecha04_c16CleanupResourcesEv.cpp", + "src/_ZN20SwitchActivatedPlankD0Ev.cpp", + "src/_ZN20SwitchActivatedPlankD1Ev.cpp", "src/_ZN20cMgSmartball_dokan_c14RestoreInitialEv.cpp", "src/_ZN20daObjCannonShutter_c16CleanupResourcesEv.cpp", + "src/_ZN20daObjCannonShutter_c6RenderEv.cpp", "src/_ZN20daObjCannonShutter_cD0Ev.cpp", "src/_ZN20daObjCannonShutter_cD1Ev.cpp", "src/_ZN20daObjFl_Fall_Block_c13InitResourcesEv.cpp", "src/_ZN20daObjFl_Fall_Block_c16CleanupResourcesEv.cpp", + "src/_ZN20daObjFl_Fall_Block_cD0Ev.cpp", "src/_ZN20daObjFl_Fall_Block_cD1Ev.cpp", "src/_ZN20daObjKm3_Kaitendai_c13InitResourcesEv.cpp", "src/_ZN20daObjKm3_Kaitendai_c16CleanupResourcesEv.cpp", + "src/_ZN20daObjKm3_Kaitendai_cD0Ev.cpp", "src/_ZN20daObjKm3_Kaitendai_cD1Ev.cpp", "src/_ZN21ArmedRotatingPlatform16CleanupResourcesEv.cpp", "src/_ZN21ArmedRotatingPlatform6RenderEv.cpp", "src/_ZN21ArmedRotatingPlatformD0Ev.cpp", "src/_ZN21ArmedRotatingPlatformD1Ev.cpp", + "src/_ZN21ClockPaintingPendulum13InitResourcesEv.cpp", + "src/_ZN21ClockPaintingPendulum16CleanupResourcesEv.cpp", "src/_ZN21ClockPaintingPendulum6RenderEv.cpp", + "src/_ZN21ClockPaintingPendulum8BehaviorEv.cpp", + "src/_ZN21ClockPaintingPendulumD0Ev.cpp", "src/_ZN21ClockPaintingPendulumD1Ev.cpp", "src/_ZN21FloatingFloorLllSmall16CleanupResourcesEv.cpp", + "src/_ZN21FloatingFloorLllSmallD0Ev.cpp", "src/_ZN21FloatingFloorLllSmallD1Ev.cpp", - "src/_ZN16daObjKinokoTag_c8BehaviorEv.cpp", - "src/_ZN16daObjKinokoTag_cD1Ev.cpp", + "src/_ZN21SnowmanBreathParticle14UpdatePositionEv.cpp", + "src/_ZN21SnowmanBreathParticle8BehaviorEv.cpp", + "src/_ZN21SnowmanBreathParticle8TrySpawnER6Player.cpp", + "src/_ZN21SnowmanBreathParticleD1Ev.cpp", + "src/_ZN21cMgSmartball_kinoko_c14RestoreInitialEv.cpp", "src/_ZN21cMgSmartball_object_c12SaveSnapshotEv.cpp", "src/_ZN21cMgSmartball_object_c14RestoreInitialEv.cpp", "src/_ZN21cMgSmartball_object_c6UpdateEv.cpp", + "src/_ZN21cMgSmartball_spring_c14RestoreInitialEv.cpp", + "src/_ZN21cMgSmartball_spring_c6UpdateEv.cpp", "src/_ZN21daObjKm3_Kurumajiku_c13InitResourcesEv.cpp", "src/_ZN21daObjKm3_Kurumajiku_c16CleanupResourcesEv.cpp", + "src/_ZN21daObjKm3_Kurumajiku_cD0Ev.cpp", "src/_ZN21daObjKm3_Kurumajiku_cD1Ev.cpp", + "src/_ZN22ClockPaintingHandShort13InitResourcesEv.cpp", "src/_ZN22ClockPaintingHandShort16CleanupResourcesEv.cpp", "src/_ZN22ClockPaintingHandShort6RenderEv.cpp", + "src/_ZN22ClockPaintingHandShort8BehaviorEv.cpp", + "src/_ZN22ClockPaintingHandShortD0Ev.cpp", "src/_ZN22ClockPaintingHandShortD1Ev.cpp", "src/_ZN22ExpandingHeapAllocator10UnlinkNodeEP10MemoryNodeS1_.cpp", "src/_ZN22ExpandingHeapAllocator14SizeofInternalEPv.cpp", "src/_ZN22ExpandingHeapAllocator16InvokeDeallocateEPvPS_j.cpp", + "src/_ZN22ExpandingHeapAllocator8FreeNodeEP10MemoryNodePNS0_6TargetE.cpp", "src/_ZN22ExpandingHeapAllocator9GetNodeIDEv.cpp", "src/_ZN22RotatingUpDownPlatform16CleanupResourcesEv.cpp", "src/_ZN22RotatingUpDownPlatform6RenderEv.cpp", + "src/_ZN22RotatingUpDownPlatformD0Ev.cpp", + "src/_ZN22RotatingUpDownPlatformD1Ev.cpp", "src/_ZN23FloatOnWaterPlatformJrb13InitResourcesEv.cpp", + "src/_ZN23FloatOnWaterPlatformJrbD0Ev.cpp", "src/_ZN23FloatOnWaterPlatformJrbD1Ev.cpp", "src/_ZN25RotatingUpDownPlatformUtm16CleanupResourcesEv.cpp", "src/_ZN25RotatingUpDownPlatformUtm6RenderEv.cpp", "src/_ZN25RotatingUpDownPlatformUtmD0Ev.cpp", "src/_ZN25RotatingUpDownPlatformUtmD1Ev.cpp", + "src/_ZN25SlideDecorationSilverStar13InitResourcesEv.cpp", "src/_ZN25SlideDecorationSilverStar16CleanupResourcesEv.cpp", "src/_ZN25SlideDecorationSilverStar6RenderEv.cpp", + "src/_ZN25SlideDecorationSilverStarD0Ev.cpp", "src/_ZN25SlideDecorationSilverStarD1Ev.cpp", + "src/_ZN29FloatOnWaterPlatformWdwSquareD0Ev.cpp", "src/_ZN29FloatOnWaterPlatformWdwSquareD1Ev.cpp", + "src/_ZN2G212GetBG0ScrPtrEv.cpp", + "src/_ZN2G212GetBG1ScrPtrEv.cpp", + "src/_ZN2G212GetBG2ScrPtrEv.cpp", + "src/_ZN2G212GetBG3ScrPtrEv.cpp", + "src/_ZN2G213GetBG2CharPtrEv.cpp", "src/_ZN2GX11LoadBG0CharEPKvjj.cpp", "src/_ZN2GX11LoadBG1CharEPKvjj.cpp", "src/_ZN2GX11LoadOBJPlttEPKvjj.cpp", "src/_ZN2GX11LoadTexPlttEPKvjj.cpp", "src/_ZN2GX12BeginLoadTexEv.cpp", + "src/_ZN2GX12SetBankForBGEt.cpp", + "src/_ZN2GX13SetBankForOBJEt.cpp", + "src/_ZN2GX13SetBankForTexEt.cpp", "src/_ZN2GX15DisableAllBanksEv.cpp", + "src/_ZN2GX15SetBankForSubBGEt.cpp", + "src/_ZN2GX15SetGraphicsModeEiii.cpp", "src/_ZN2GX16BeginLoadTexPlttEv.cpp", + "src/_ZN2GX16SetBankForSubOBJEt.cpp", + "src/_ZN2GX17SetBankForTexPlttEt.cpp", + "src/_ZN2GX22SetBankForSubBGExtPlttEt.cpp", + "src/_ZN2GX23SetBankForSubOBJExtPlttEt.cpp", + "src/_ZN2GX6DispOnEv.cpp", "src/_ZN2GX7LoadOBJEPKvjj.cpp", "src/_ZN2GX7LoadTexEPKvjj.cpp", + "src/_ZN32FloatOnWaterPlatformWdwRectangleD0Ev.cpp", "src/_ZN32FloatOnWaterPlatformWdwRectangleD1Ev.cpp", "src/_ZN3Amp16CleanupResourcesEv.cpp", "src/_ZN3Amp16OnPendingDestroyEv.cpp", @@ -939,38 +1276,62 @@ "src/_ZN3Amp8BehaviorEv.cpp", "src/_ZN3AmpD0Ev.cpp", "src/_ZN3AmpD1Ev.cpp", + "src/_ZN3G2S12GetBG0ScrPtrEv.cpp", + "src/_ZN3G2S12GetBG1ScrPtrEv.cpp", + "src/_ZN3G2S12GetBG2ScrPtrEv.cpp", + "src/_ZN3G2S12GetBG3ScrPtrEv.cpp", + "src/_ZN3G2S13GetBG0CharPtrEv.cpp", + "src/_ZN3G2S13GetBG1CharPtrEv.cpp", + "src/_ZN3G2S13GetBG2CharPtrEv.cpp", + "src/_ZN3G2S13GetBG3CharPtrEv.cpp", + "src/_ZN3G2x12SetBGyAffineEPVtP9Matrix2x2iiii.cpp", + "src/_ZN3G2x13SetBlendAlphaEPVttttj.cpp", + "src/_ZN3G2x18SetBlendBrightnessEPVtts.cpp", "src/_ZN3G3X11SetFogTableEPv.cpp", + "src/_ZN3G3X13SetClearColorEtiiib.cpp", + "src/_ZN3G3X6SetFogEbiii.cpp", + "src/_ZN3G3i7LookAt_EPK7Vector3S2_S2_bP9Matrix4x3.cpp", "src/_ZN3GXS10LoadBGPlttEPKvjj.cpp", "src/_ZN3GXS11LoadOBJPlttEPKvjj.cpp", "src/_ZN3GXS13LoadBGExtPlttEPKvjj.cpp", "src/_ZN3GXS14LoadOBJExtPlttEPKvjj.cpp", "src/_ZN3GXS18BeginLoadBGExtPlttEv.cpp", "src/_ZN3GXS19BeginLoadOBJExtPlttEv.cpp", + "src/_ZN3HUD13InitResourcesEv.cpp", "src/_ZN3HUD16CleanupResourcesEv.cpp", "src/_ZN3HUD16OnPendingDestroyEv.cpp", "src/_ZN3HUD19RenderCameraButtonsEv.cpp", + "src/_ZN3HUDD0Ev.cpp", "src/_ZN3HUDD1Ev.cpp", "src/_ZN3IRQ10DisableAllEv.cpp", + "src/_ZN3IRQ10EnableIRQsEj.cpp", "src/_ZN3IRQ10RestoreAllEj.cpp", + "src/_ZN3IRQ11DisableIRQsEj.cpp", "src/_ZN3IRQ11Dma0HandlerEv.cpp", "src/_ZN3IRQ11Dma1HandlerEv.cpp", "src/_ZN3IRQ11Dma2HandlerEv.cpp", "src/_ZN3IRQ11Dma3HandlerEv.cpp", "src/_ZN3IRQ12EmptyHandlerEv.cpp", "src/_ZN3IRQ13GetIRQHandlerEj.cpp", + "src/_ZN3IRQ13SetIRQHandlerEjPFvvE.cpp", "src/_ZN3IRQ13VBlankHandlerEv.cpp", + "src/_ZN3IRQ15ClearInterruptsEj.cpp", "src/_ZN3IRQ19Tim0OverflowHandlerEv.cpp", "src/_ZN3IRQ19Tim1OverflowHandlerEv.cpp", "src/_ZN3IRQ19Tim2OverflowHandlerEv.cpp", "src/_ZN3IRQ19Tim3OverflowHandlerEv.cpp", + "src/_ZN3IRQ21GameCardIREQMCHandlerEv.cpp", "src/_ZN3IRQ6EnableEv.cpp", "src/_ZN3IRQ7DisableEv.cpp", "src/_ZN3IRQ7RestoreEj.cpp", + "src/_ZN3IRQ7SetIRQsEj.cpp", "src/_ZN3Key13OnTurnIntoEggER6Player.cpp", "src/_ZN3Key13OnYoshiTryEatEv.cpp", "src/_ZN3KeyD0Ev.cpp", "src/_ZN3KeyD1Ev.cpp", + "src/_ZN3MrI16CleanupResourcesEv.cpp", "src/_ZN3MrI16OnPendingDestroyEv.cpp", + "src/_ZN3MrID0Ev.cpp", "src/_ZN3MrID1Ev.cpp", "src/_ZN3OAM11GetObjWidthEii.cpp", "src/_ZN3OAM12EnableSubOAMEv.cpp", @@ -979,6 +1340,13 @@ "src/_ZN3OAM4LoadEv.cpp", "src/_ZN3OAM6RenderEbP7OamAttriiii5Fix12IiES3_ii.cpp", "src/_ZN3OAM6RenderEbP7OamAttriiiiP9Matrix2x2.cpp", + "src/_ZN3abi17__class_type_infoD0Ev.cpp", + "src/_ZN3abi17__class_type_infoD1Ev.cpp", + "src/_ZN3abi17__class_type_infoD2Ev.cpp", + "src/_ZN3abi20__si_class_type_infoD0Ev.cpp", + "src/_ZN3abi20__si_class_type_infoD1Ev.cpp", + "src/_ZN3abi21__vmi_class_type_infoD0Ev.cpp", + "src/_ZN3abi21__vmi_class_type_infoD1Ev.cpp", "src/_ZN4Bird16CleanupResourcesEv.cpp", "src/_ZN4Bird16OnPendingDestroyEv.cpp", "src/_ZN4Bird6RenderEv.cpp", @@ -1002,21 +1370,33 @@ "src/_ZN4CP159EnableMPUEv.cpp", "src/_ZN4Clam16CleanupResourcesEv.cpp", "src/_ZN4Clam6RenderEv.cpp", + "src/_ZN4ClamD0Ev.cpp", "src/_ZN4ClamD1Ev.cpp", "src/_ZN4Coin13OnTurnIntoEggER6Player.cpp", "src/_ZN4Coin13OnYoshiTryEatEv.cpp", "src/_ZN4CoinD0Ev.cpp", "src/_ZN4CoinD1Ev.cpp", + "src/_ZN4Door16CleanupResourcesEv.cpp", "src/_ZN4Door16OnPendingDestroyEv.cpp", + "src/_ZN4Door6RenderEv.cpp", + "src/_ZN4Door8BehaviorEv.cpp", + "src/_ZN4DoorD0Ev.cpp", "src/_ZN4DoorD1Ev.cpp", "src/_ZN4Exit13InitResourcesEv.cpp", "src/_ZN4Exit16CleanupResourcesEv.cpp", "src/_ZN4Exit16OnPendingDestroyEv.cpp", "src/_ZN4Exit6RenderEv.cpp", + "src/_ZN4ExitD0Ev.cpp", "src/_ZN4ExitD1Ev.cpp", + "src/_ZN4Fish16CleanupResourcesEv.cpp", "src/_ZN4Fish16OnPendingDestroyEv.cpp", + "src/_ZN4Fish6RenderEv.cpp", + "src/_ZN4FishD0Ev.cpp", "src/_ZN4FishD1Ev.cpp", + "src/_ZN4Flag16CleanupResourcesEv.cpp", "src/_ZN4Flag6RenderEv.cpp", + "src/_ZN4Flag8BehaviorEv.cpp", + "src/_ZN4FlagD0Ev.cpp", "src/_ZN4FlagD1Ev.cpp", "src/_ZN4Heap10DeallocateEPv.cpp", "src/_ZN4Heap10ReallocateEPvj.cpp", @@ -1040,20 +1420,36 @@ "src/_ZN4Heap8_DestroyEv.cpp", "src/_ZN4Heap9SetNodeIDEj.cpp", "src/_ZN4Heap9_AllocateEji.cpp", + "src/_ZN4HeapC2EPvjPS_.cpp", + "src/_ZN4HeapD0Ev.cpp", + "src/_ZN4HeapD1Ev.cpp", + "src/_ZN4HeapD2Ev.cpp", + "src/_ZN4Toad12GetMessageIDEv.cpp", + "src/_ZN4Toad16CleanupResourcesEv.cpp", "src/_ZN4Toad6RenderEv.cpp", + "src/_ZN4Toad8RunStateEv.cpp", + "src/_ZN4Toad8SetStateEi.cpp", + "src/_ZN4ToadD0Ev.cpp", "src/_ZN4ToadD1Ev.cpp", - "src/_ZN14daObjC1_Trap_c6RenderEv.cpp", - "src/_ZN14daObjC1_Trap_cD0Ev.cpp", - "src/_ZN14daObjC1_Trap_cD1Ev.cpp", "src/_ZN4Tree16OnPendingDestroyEv.cpp", + "src/_ZN4TreeD0Ev.cpp", + "src/_ZN4TreeD1Ev.cpp", + "src/_ZN4View6RenderEv.cpp", + "src/_ZN4ViewD0Ev.cpp", + "src/_ZN4ViewD1Ev.cpp", "src/_ZN4Warp16CleanupResourcesEv.cpp", "src/_ZN4Warp16OnPendingDestroyEv.cpp", "src/_ZN4Warp6RenderEv.cpp", "src/_ZN4Warp8BehaviorEv.cpp", "src/_ZN4WarpD0Ev.cpp", "src/_ZN4WarpD1Ev.cpp", + "src/_ZN4cstd11fdiv_resultEv.cpp", + "src/_ZN4cstd11ldiv_resultEv.cpp", "src/_ZN4cstd14__builtin_trapEv.cpp", "src/_ZN4cstd3absEi.cpp", + "src/_ZN4cstd3divEii.cpp", + "src/_ZN4cstd3modEii.cpp", + "src/_ZN4cstd4sqrtEy.cpp", "src/_ZN4cstd6strchrEPKcc.cpp", "src/_ZN4cstd6strcmpEPKcS1_.cpp", "src/_ZN4cstd6strlenEPKc.cpp", @@ -1074,20 +1470,32 @@ "src/_ZN4dBgW7DisableEv.cpp", "src/_ZN4dBgW9IsEnabledEv.cpp", "src/_ZN4dBgWC2Ev.cpp", + "src/_ZN4dBgWD0Ev.cpp", + "src/_ZN4dBgWD1Ev.cpp", + "src/_ZN4dBgWD2Ev.cpp", + "src/_ZN5Bully12PlayHitSoundEv.cpp", "src/_ZN5Bully13InitResourcesEv.cpp", + "src/_ZN5Bully13PlayStepSoundEv.cpp", + "src/_ZN5Bully14PlayDeathSoundEv.cpp", + "src/_ZN5Bully14UpdateRunStateEv.cpp", + "src/_ZN5Bully17PlayShellHitSoundEv.cpp", + "src/_ZN5BullyD0Ev.cpp", "src/_ZN5BullyD1Ev.cpp", "src/_ZN5Cloud16CleanupResourcesEv.cpp", "src/_ZN5Cloud6RenderEv.cpp", "src/_ZN5Cloud8BehaviorEv.cpp", "src/_ZN5CloudD0Ev.cpp", "src/_ZN5CloudD1Ev.cpp", + "src/_ZN5Crate13OnYoshiTryEatEv.cpp", "src/_ZN5Crate15OnGroundPoundedER8dActor_c.cpp", "src/_ZN5Crate16CleanupResourcesEv.cpp", + "src/_ZN5Crate6RenderEv.cpp", "src/_ZN5CrateD0Ev.cpp", "src/_ZN5CrateD1Ev.cpp", "src/_ZN5Event6GetBitEj.cpp", "src/_ZN5Event6SetBitEj.cpp", "src/_ZN5Event8ClearBitEj.cpp", + "src/_ZN5FaderD2Ev.cpp", "src/_ZN5Koopa16OnPendingDestroyEv.cpp", "src/_ZN5KoopaD0Ev.cpp", "src/_ZN5KoopaD1Ev.cpp", @@ -1103,7 +1511,10 @@ "src/_ZN5Model6RenderEPK7Vector3.cpp", "src/_ZN5Model8LoadFileER13SharedFilePtr.cpp", "src/_ZN5ModelC1Ev.cpp", + "src/_ZN5ModelC2Ev.cpp", + "src/_ZN5ModelD0Ev.cpp", "src/_ZN5ModelD1Ev.cpp", + "src/_ZN5ModelD2Ev.cpp", "src/_ZN5Pokey13OnTurnIntoEggER6Player.cpp", "src/_ZN5Pokey13OnYoshiTryEatEv.cpp", "src/_ZN5Pokey16CleanupResourcesEv.cpp", @@ -1140,6 +1551,7 @@ "src/_ZN5Spiny13OnYoshiTryEatEv.cpp", "src/_ZN5Spiny16OnAimedAtWithEggEv.cpp", "src/_ZN5Spiny16OnPendingDestroyEv.cpp", + "src/_ZN5Spiny6RenderEv.cpp", "src/_ZN5SpinyD0Ev.cpp", "src/_ZN5SpinyD1Ev.cpp", "src/_ZN5Stage11GetSkyboxIDEv.cpp", @@ -1154,6 +1566,7 @@ "src/_ZN5StageD1Ev.cpp", "src/_ZN5Stump15OnHitByMegaCharER6Player.cpp", "src/_ZN5Stump6RenderEv.cpp", + "src/_ZN5StumpD0Ev.cpp", "src/_ZN5StumpD1Ev.cpp", "src/_ZN5Swoop13OnYoshiTryEatEv.cpp", "src/_ZN5Swoop16CleanupResourcesEv.cpp", @@ -1161,6 +1574,10 @@ "src/_ZN5Swoop16OnPendingDestroyEv.cpp", "src/_ZN5SwoopD0Ev.cpp", "src/_ZN5SwoopD1Ev.cpp", + "src/_ZN5Timer10ResetTimerEv.cpp", + "src/_ZN5Timer10StartTimerEv.cpp", + "src/_ZN5Timer7GetTimeEv.cpp", + "src/_ZN5Timer9StopTimerEv.cpp", "src/_ZN5Ukiki13OnTurnIntoEggER6Player.cpp", "src/_ZN5Ukiki13OnYoshiTryEatEv.cpp", "src/_ZN5Ukiki16OnPendingDestroyEv.cpp", @@ -1175,12 +1592,47 @@ "src/_ZN5Whomp25OnAimedAtWithEggReturnVecEv.cpp", "src/_ZN5WhompD0Ev.cpp", "src/_ZN5WhompD1Ev.cpp", + "src/_ZN5dBgCh18StopDetectingWaterEv.cpp", + "src/_ZN5dBgCh19StartDetectingToxicEv.cpp", + "src/_ZN5dBgCh19StartDetectingWaterEv.cpp", "src/_ZN5dBgCh21ShouldPassThroughImplEPvRK4CLPSRKS_b.cpp", + "src/_ZN5dBgCh21StopDetectingOrdinaryEv.cpp", + "src/_ZN5dBgChD0Ev.cpp", + "src/_ZN5dBgChD1Ev.cpp", + "src/_ZN5dBgChD2Ev.cpp", "src/_ZN5dBgPcC1Ev.cpp", + "src/_ZN5dBgPcC2Ev.cpp", "src/_ZN5dBgPcD1Ev.cpp", + "src/_ZN5dBgPcD2Ev.cpp", "src/_ZN5dBgPiC1Ev.cpp", + "src/_ZN5dBgPiC2Ev.cpp", + "src/_ZN5dBgPiD0Ev.cpp", "src/_ZN5dBgPiD1Ev.cpp", + "src/_ZN5dBgPiD2Ev.cpp", "src/_ZN5dCc_c5ClearEv.cpp", + "src/_ZN5dCc_c6UnlinkEv.cpp", + "src/_ZN5dCc_cC2Ev.cpp", + "src/_ZN5dCc_cD0Ev.cpp", + "src/_ZN5dCc_cD1Ev.cpp", + "src/_ZN5dCc_cD2Ev.cpp", + "src/_ZN5dPa_c7level_c10callback_c14SpawnParticlesERN8Particle6SystemE.cpp", + "src/_ZN5dPa_c7level_c10callback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c15scaleCallback_c14SpawnParticlesERN8Particle6SystemE.cpp", + "src/_ZN5dPa_c7level_c15scaleCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c15scaleCallback_cC1Ev.cpp", + "src/_ZN5dPa_c7level_c16simpleCallback_c14SpawnParticlesERN8Particle6SystemE.cpp", + "src/_ZN5dPa_c7level_c16simpleCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c16simpleCallback_cC1Ev.cpp", + "src/_ZN5dPa_c7level_c16simpleCallback_cC2Ev.cpp", + "src/_ZN5dPa_c7level_c18fitWaterCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c20checkWaterCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c20checkYoganCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c20edStarKiraCallback_c14SpawnParticlesERN8Particle6SystemE.cpp", + "src/_ZN5dPa_c7level_c20edStarKiraCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c20edStarKiraCallback_cC1Ev.cpp", + "src/_ZN5dPa_c7level_c23cleanParticleCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN5dPa_c7level_c24fitWaterSimpleCallback_c8OnUpdateERN8Particle6SystemEb.cpp", + "src/_ZN6BobOmb13OnYoshiTryEatEv.cpp", "src/_ZN6BobOmb16CleanupResourcesEv.cpp", "src/_ZN6BobOmb16OnAimedAtWithEggEv.cpp", "src/_ZN6BobOmb6RenderEv.cpp", @@ -1188,6 +1640,7 @@ "src/_ZN6BobOmbD1Ev.cpp", "src/_ZN6Bowser16CleanupResourcesEv.cpp", "src/_ZN6Bowser16OnPendingDestroyEv.cpp", + "src/_ZN6Bowser8BehaviorEv.cpp", "src/_ZN6BowserD0Ev.cpp", "src/_ZN6BowserD1Ev.cpp", "src/_ZN6Bullet16CleanupResourcesEv.cpp", @@ -1200,10 +1653,21 @@ "src/_ZN6Camera6SetPosERK7Vector3.cpp", "src/_ZN6Camera9SetFlag_3Ev.cpp", "src/_ZN6Camera9SetLookAtERK7Vector3.cpp", + "src/_ZN6CameraD0Ev.cpp", + "src/_ZN6CameraD1Ev.cpp", + "src/_ZN6Cannon16CleanupResourcesEv.cpp", + "src/_ZN6Cannon6RenderEv.cpp", + "src/_ZN6Cannon8BehaviorEv.cpp", + "src/_ZN6CannonD0Ev.cpp", "src/_ZN6CannonD1Ev.cpp", "src/_ZN6Coffin16CleanupResourcesEv.cpp", "src/_ZN6Coffin6RenderEv.cpp", + "src/_ZN6CoffinD0Ev.cpp", + "src/_ZN6CoffinD1Ev.cpp", "src/_ZN6Dorrie6RenderEv.cpp", + "src/_ZN6DorrieD0Ev.cpp", + "src/_ZN6DorrieD1Ev.cpp", + "src/_ZN6Eyerok16CleanupResourcesEv.cpp", "src/_ZN6Eyerok16OnAimedAtWithEggEv.cpp", "src/_ZN6Eyerok16OnPendingDestroyEv.cpp", "src/_ZN6EyerokD0Ev.cpp", @@ -1243,6 +1707,7 @@ "src/_ZN6Memory8AllocateEji.cpp", "src/_ZN6Memory8AllocateEjiP4Heap.cpp", "src/_ZN6Number16CleanupResourcesEv.cpp", + "src/_ZN6NumberD0Ev.cpp", "src/_ZN6NumberD1Ev.cpp", "src/_ZN6Player11OpenBigDoorEv.cpp", "src/_ZN6Player12St_Null_InitEv.cpp", @@ -1255,6 +1720,7 @@ "src/_ZN6Player15St_Hurt_CleanupEv.cpp", "src/_ZN6Player15St_Null_CleanupEv.cpp", "src/_ZN6Player15St_Spin_CleanupEv.cpp", + "src/_ZN6Player15St_Swim_CleanupEv.cpp", "src/_ZN6Player16OnPendingDestroyEv.cpp", "src/_ZN6Player16St_Climb_CleanupEv.cpp", "src/_ZN6Player16St_DebugFly_InitEv.cpp", @@ -1281,13 +1747,17 @@ "src/_ZN6Player7TryGrabER8dActor_c.cpp", "src/_ZN6Player9GetHealthEv.cpp", "src/_ZN6Player9IsOnShellEv.cpp", + "src/_ZN6PlayerD0Ev.cpp", "src/_ZN6PlayerD1Ev.cpp", + "src/_ZN6Rabbit13OnYoshiTryEatEv.cpp", "src/_ZN6Rabbit16CleanupResourcesEv.cpp", "src/_ZN6Rabbit16OnPendingDestroyEv.cpp", "src/_ZN6RabbitD0Ev.cpp", "src/_ZN6RabbitD1Ev.cpp", "src/_ZN6ShipUp16CleanupResourcesEv.cpp", "src/_ZN6ShipUp6RenderEv.cpp", + "src/_ZN6ShipUpD0Ev.cpp", + "src/_ZN6ShipUpD1Ev.cpp", "src/_ZN6Snufit13OnYoshiTryEatEv.cpp", "src/_ZN6Snufit16CleanupResourcesEv.cpp", "src/_ZN6Snufit16OnAimedAtWithEggEv.cpp", @@ -1301,10 +1771,15 @@ "src/_ZN6ThwompD1Ev.cpp", "src/_ZN6ToxBox16CleanupResourcesEv.cpp", "src/_ZN6ToxBox6RenderEv.cpp", + "src/_ZN6ToxBoxD0Ev.cpp", + "src/_ZN6ToxBoxD1Ev.cpp", "src/_ZN7Chuckya16OnAimedAtWithEggEv.cpp", "src/_ZN7Chuckya16OnPendingDestroyEv.cpp", "src/_ZN7ChuckyaD0Ev.cpp", "src/_ZN7ChuckyaD1Ev.cpp", + "src/_ZN7ClipperC1Ev.cpp", + "src/_ZN7ClipperD0Ev.cpp", + "src/_ZN7ClipperD1Ev.cpp", "src/_ZN7HeaveHo16CleanupResourcesEv.cpp", "src/_ZN7HeaveHo16OnPendingDestroyEv.cpp", "src/_ZN7HeaveHo6RenderEv.cpp", @@ -1318,8 +1793,11 @@ "src/_ZN7Minimap16CleanupResourcesEv.cpp", "src/_ZN7Minimap16OnPendingDestroyEv.cpp", "src/_ZN7Minimap19UpdateLevelSpecificEv.cpp", + "src/_ZN7MinimapD0Ev.cpp", "src/_ZN7MinimapD1Ev.cpp", + "src/_ZN7PathPtr6FromIDEj.cpp", "src/_ZN7Seaweed6RenderEv.cpp", + "src/_ZN7SeaweedD0Ev.cpp", "src/_ZN7SeaweedD1Ev.cpp", "src/_ZN7Skeeter13OnYoshiTryEatEv.cpp", "src/_ZN7Skeeter16OnAimedAtWithEggEv.cpp", @@ -1329,30 +1807,47 @@ "src/_ZN7SkeeterD1Ev.cpp", "src/_ZN7SkiLift15OnHitByMegaCharER6Player.cpp", "src/_ZN7SkiLift6RenderEv.cpp", + "src/_ZN7SkiLiftD0Ev.cpp", "src/_ZN7SkiLiftD1Ev.cpp", + "src/_ZN7Tornado6RenderEv.cpp", + "src/_ZN7TornadoD0Ev.cpp", "src/_ZN7TornadoD1Ev.cpp", "src/_ZN7Vector3D1Ev.cpp", "src/_ZN7Wiggler16CleanupResourcesEv.cpp", "src/_ZN7WigglerD0Ev.cpp", "src/_ZN7WigglerD1Ev.cpp", "src/_ZN7dBase_c18AfterInitResourcesEj.cpp", + "src/_ZN7dBase_c5SpawnEjP7fBase_cii.cpp", + "src/_ZN7dBase_cD0Ev.cpp", "src/_ZN7dBase_cD1Ev.cpp", "src/_ZN7dBgW_Kc14GetSurfaceInfoEsR11SurfaceInfo.cpp", "src/_ZN7dBgW_Kc17GetTriangleOriginEsR7Vector3.cpp", "src/_ZN7dBgW_Kc8LoadFileER13SharedFilePtr.cpp", "src/_ZN7dBgW_Kc9GetNormalEsR7Vector3.cpp", "src/_ZN7dBgW_KcC1Ev.cpp", + "src/_ZN7dBgW_KcC2Ev.cpp", + "src/_ZN7dBgW_KcD0Ev.cpp", "src/_ZN7dBgW_KcD1Ev.cpp", + "src/_ZN7dBgW_KcD2Ev.cpp", "src/_ZN7dCcAc_c10GetOwnerIDEv.cpp", + "src/_ZN7dCcAc_cC1Ev.cpp", + "src/_ZN7dCcAc_cC2Ev.cpp", "src/_ZN7dCcAc_cD0Ev.cpp", "src/_ZN7dCcAc_cD1Ev.cpp", + "src/_ZN7dCcAc_cD2Ev.cpp", + "src/_ZN7dScMB_c15graphCallback_c14GraphCallback0Ev.cpp", + "src/_ZN7dScMB_c15graphCallback_c14GraphCallback2Ev.cpp", "src/_ZN7dScMB_c16CleanupResourcesEv.cpp", "src/_ZN7dScMB_c6RenderEv.cpp", + "src/_ZN7dScMB_cD0Ev.cpp", "src/_ZN7dScMB_cD1Ev.cpp", "src/_ZN7dWipe_c10SetToStartEv.cpp", + "src/_ZN7dWipe_c20IsBetweenStartAndEndEv.cpp", "src/_ZN7dWipe_c7IsAtEndEv.cpp", "src/_ZN7dWipe_c8SetToEndEv.cpp", "src/_ZN7dWipe_c9IsAtStartEv.cpp", + "src/_ZN7dWipe_cD0Ev.cpp", + "src/_ZN7dWipe_cD1Ev.cpp", "src/_ZN7daDgr_c16CleanupResourcesEv.cpp", "src/_ZN7daDgr_c6RenderEv.cpp", "src/_ZN7daDgr_cD0Ev.cpp", @@ -1361,9 +1856,19 @@ "src/_ZN7daDkk_cD0Ev.cpp", "src/_ZN7daDkk_cD1Ev.cpp", "src/_ZN7daKrb_c16OnPendingDestroyEv.cpp", + "src/_ZN7daKrb_cD0Ev.cpp", + "src/_ZN7daKrb_cD1Ev.cpp", + "src/_ZN7daOts_c12PlayHitSoundEv.cpp", + "src/_ZN7daOts_c13PlayStepSoundEv.cpp", + "src/_ZN7daOts_c14PlayDeathSoundEv.cpp", + "src/_ZN7daOts_c14UpdateRunStateEv.cpp", "src/_ZN7daOts_c16CleanupResourcesEv.cpp", "src/_ZN7daOts_c16OnAimedAtWithEggEv.cpp", + "src/_ZN7daOts_c16UpdateDeathStateEv.cpp", + "src/_ZN7daOts_c17PlayShellHitSoundEv.cpp", "src/_ZN7daOts_c6RenderEv.cpp", + "src/_ZN7daOts_cD0Ev.cpp", + "src/_ZN7daOts_cD1Ev.cpp", "src/_ZN7fBase_c11AfterRenderEj.cpp", "src/_ZN7fBase_c12BeforeRenderEv.cpp", "src/_ZN7fBase_c13AfterBehaviorEj.cpp", @@ -1374,11 +1879,18 @@ "src/_ZN7fBase_c18MarkForDestructionEv.cpp", "src/_ZN7fBase_c19BeforeInitResourcesEv.cpp", "src/_ZN7fBase_c21AfterCleanupResourcesEj.cpp", + "src/_ZN7fBase_c22BeforeCleanupResourcesEv.cpp", "src/_ZN7fBase_c6RenderEv.cpp", "src/_ZN7fBase_c8BehaviorEv.cpp", + "src/_ZN7fBase_cD0Ev.cpp", + "src/_ZN7fBase_cD1Ev.cpp", + "src/_ZN7fBase_cD2Ev.cpp", + "src/_ZN8BigBully14UpdateRunStateEv.cpp", "src/_ZN8BigBully6RenderEv.cpp", + "src/_ZN8BigBullyD0Ev.cpp", "src/_ZN8BigBullyD1Ev.cpp", "src/_ZN8BookShot16CleanupResourcesEv.cpp", + "src/_ZN8BookShotD0Ev.cpp", "src/_ZN8BookShotD1Ev.cpp", "src/_ZN8CageLift6RenderEv.cpp", "src/_ZN8CageLiftD0Ev.cpp", @@ -1391,6 +1903,7 @@ "src/_ZN8FireballD0Ev.cpp", "src/_ZN8FireballD1Ev.cpp", "src/_ZN8Goomboss16CleanupResourcesEv.cpp", + "src/_ZN8GoombossD0Ev.cpp", "src/_ZN8GoombossD1Ev.cpp", "src/_ZN8IceBlock16CleanupResourcesEv.cpp", "src/_ZN8IceBlock6RenderEv.cpp", @@ -1416,6 +1929,8 @@ "src/_ZN8Moneybag13OnYoshiTryEatEv.cpp", "src/_ZN8Moneybag16OnAimedAtWithEggEv.cpp", "src/_ZN8Moneybag16OnPendingDestroyEv.cpp", + "src/_ZN8Moneybag6RenderEv.cpp", + "src/_ZN8MoneybagD0Ev.cpp", "src/_ZN8MoneybagD1Ev.cpp", "src/_ZN8MugenBgm16CleanupResourcesEv.cpp", "src/_ZN8MugenBgm16OnPendingDestroyEv.cpp", @@ -1427,8 +1942,26 @@ "src/_ZN8Painting8BehaviorEv.cpp", "src/_ZN8PaintingD0Ev.cpp", "src/_ZN8PaintingD1Ev.cpp", - "src/_ZN5dPa_c7level_c16simpleCallback_c14SpawnParticlesERN8Particle6SystemE.cpp", + "src/_ZN8Particle10LimitPlane4FuncERNS_10EffectDataEPcR7Vector3.cpp", + "src/_ZN8Particle10SysTracker6UpdateEv.cpp", + "src/_ZN8Particle10SysTracker8Contents4LinkERNS1_5EntryE.cpp", + "src/_ZN8Particle10SysTracker8Contents5ClearEv.cpp", + "src/_ZN8Particle10SysTracker8Contents5Entry5ResetEv.cpp", + "src/_ZN8Particle10SysTracker8Contents6UnlinkERNS1_5EntryE.cpp", + "src/_ZN8Particle10SysTracker8Contents6UpdateEv.cpp", + "src/_ZN8Particle10SysTrackerC1Ev.cpp", + "src/_ZN8Particle12Acceleration4FuncERNS_10EffectDataEPcR7Vector3.cpp", + "src/_ZN8Particle14RadiusConverge4FuncERNS_10EffectDataEPcR7Vector3.cpp", "src/_ZN8Particle17CheckLavaCallback14SpawnParticlesERNS_6SystemE.cpp", + "src/_ZN8Particle19SetSelfDestructFlagEj.cpp", + "src/_ZN8Particle4Turn4FuncERNS_10EffectDataEPcR7Vector3.cpp", + "src/_ZN8Particle6Jitter4FuncERNS_10EffectDataEPcR7Vector3.cpp", + "src/_ZN8Particle6System12FromUniqueIDEj.cpp", + "src/_ZN8Particle7Texture12AllocPalVramEjb.cpp", + "src/_ZN8Particle7Texture12AllocTexVramEjb.cpp", + "src/_ZN8Particle8Converge4FuncERNS_10EffectDataEPcR7Vector3.cpp", + "src/_ZN8Particle9RenderAllEv.cpp", + "src/_ZN8PathLift12BaseBehaviorEv.cpp", "src/_ZN8PathLiftD0Ev.cpp", "src/_ZN8PathLiftD1Ev.cpp", "src/_ZN8PoleLift16CleanupResourcesEv.cpp", @@ -1436,9 +1969,11 @@ "src/_ZN8PoleLiftD0Ev.cpp", "src/_ZN8PoleLiftD1Ev.cpp", "src/_ZN8SaveData13GetCoinRecordEj.cpp", + "src/_ZN8SaveData13PlayerLoseCapEv.cpp", "src/_ZN8SaveData13SaveMinigamesEP16MinigameSaveData.cpp", "src/_ZN8SaveData14SaveDataToCartEPcjj.cpp", "src/_ZN8SaveData16CanPlayerHaveCapEv.cpp", + "src/_ZN8SaveData16HasPlayerLostCapEv.cpp", "src/_ZN8SaveData16ReadDataFromCartEPcjj.cpp", "src/_ZN8SaveData17SetCharacterIntroEi.cpp", "src/_ZN8SaveData18SetDefaultValuesMgEP16MinigameSaveData.cpp", @@ -1455,6 +1990,8 @@ "src/_ZN8SignPost11OnAttacked1ER8dActor_c.cpp", "src/_ZN8SignPost15OnHitByMegaCharER6Player.cpp", "src/_ZN8SignPost16CleanupResourcesEv.cpp", + "src/_ZN8SignPostD0Ev.cpp", + "src/_ZN8SignPostD1Ev.cpp", "src/_ZN8Snowball16CleanupResourcesEv.cpp", "src/_ZN8Snowball16OnPendingDestroyEv.cpp", "src/_ZN8Snowball6RenderEv.cpp", @@ -1477,6 +2014,7 @@ "src/_ZN8WallSignD1Ev.cpp", "src/_ZN8YoshiEgg16CleanupResourcesEv.cpp", "src/_ZN8YoshiEgg6RenderEv.cpp", + "src/_ZN8YoshiEggD0Ev.cpp", "src/_ZN8YoshiEggD1Ev.cpp", "src/_ZN8dActor_c10FindWithIDEj.cpp", "src/_ZN8dActor_c11AfterRenderEj.cpp", @@ -1498,6 +2036,7 @@ "src/_ZN8dActor_c15OnGroundPoundedERS_.cpp", "src/_ZN8dActor_c15OnHitByMegaCharER6Player.cpp", "src/_ZN8dActor_c16OnAimedAtWithEggEv.cpp", + "src/_ZN8dActor_c17DetectRaycastClsnER7Vector3S1_b.cpp", "src/_ZN8dActor_c17GetWaterHeightWDWEv.cpp", "src/_ZN8dActor_c17TrackInDeathTableEv.cpp", "src/_ZN8dActor_c18AfterInitResourcesEj.cpp", @@ -1515,8 +2054,10 @@ "src/_ZN8dActor_c22BeforeCleanupResourcesEv.cpp", "src/_ZN8dActor_c22UpdatePosWithOnlySpeedEP5dCc_c.cpp", "src/_ZN8dActor_c23HorzAngleToCPlayerOrAngEv.cpp", + "src/_ZN8dActor_c24BumpedUnderneathByPlayerER6Player.cpp", "src/_ZN8dActor_c24KillAndTrackInDeathTableEv.cpp", "src/_ZN8dActor_c24OnHitByCannonBlastedCharERS_.cpp", + "src/_ZN8dActor_c4NextEPKS_.cpp", "src/_ZN8dActor_c5SpawnEjjRK7Vector3PK10Vector3_16as.cpp", "src/_ZN8dActor_c7FindEggER5dCc_c.cpp", "src/_ZN8dActor_c8OnKickedERS_.cpp", @@ -1524,8 +2065,12 @@ "src/_ZN8dActor_c8PoofDustEv.cpp", "src/_ZN8dActor_c9TrackStarEjj.cpp", "src/_ZN8dActor_c9UpdatePosEP5dCc_c.cpp", + "src/_ZN8dActor_cD0Ev.cpp", + "src/_ZN8dActor_cD1Ev.cpp", + "src/_ZN8dActor_cD2Ev.cpp", "src/_ZN8dCcPos_c10GetOwnerIDEv.cpp", "src/_ZN8dCcPos_c6GetPosEv.cpp", + "src/_ZN8dCcPos_cC1Ev.cpp", "src/_ZN8dCcPos_cD0Ev.cpp", "src/_ZN8dCcPos_cD1Ev.cpp", "src/_ZN8dGraph_c10callback_c14GraphCallback0Ev.cpp", @@ -1533,9 +2078,12 @@ "src/_ZN8dGraph_c10callback_c14GraphCallback2Ev.cpp", "src/_ZN8dGraph_c10callback_c14GraphCallback3Ev.cpp", "src/_ZN8dM3dGLin3SetERK7Vector3S2_.cpp", + "src/_ZN8dM3dGLinD2Ev.cpp", "src/_ZN8dM3dGSphC1Ev.cpp", "src/_ZN8dM3dGSphC2Ev.cpp", + "src/_ZN8dM3dGSphD0Ev.cpp", "src/_ZN8dM3dGSphD1Ev.cpp", + "src/_ZN8dM3dGSphD2Ev.cpp", "src/_ZN8dScene_c11AfterRenderEj.cpp", "src/_ZN8dScene_c12BeforeRenderEv.cpp", "src/_ZN8dScene_c13AfterBehaviorEj.cpp", @@ -1578,22 +2126,33 @@ "src/_ZN9Animation8SetFlagsEi.cpp", "src/_ZN9AnimationC1Ev.cpp", "src/_ZN9AnimationC2Ev.cpp", + "src/_ZN9AnimationD0Ev.cpp", + "src/_ZN9AnimationD1Ev.cpp", + "src/_ZN9AnimationD2Ev.cpp", "src/_ZN9ArrowLift16CleanupResourcesEv.cpp", "src/_ZN9ArrowLift6RenderEv.cpp", + "src/_ZN9ArrowLiftD0Ev.cpp", + "src/_ZN9ArrowLiftD1Ev.cpp", "src/_ZN9BlueFlame13OnTurnIntoEggER6Player.cpp", "src/_ZN9BlueFlame13OnYoshiTryEatEv.cpp", + "src/_ZN9BlueFlameD0Ev.cpp", "src/_ZN9BlueFlameD1Ev.cpp", "src/_ZN9BootSceneD0Ev.cpp", "src/_ZN9BootSceneD1Ev.cpp", "src/_ZN9Butterfly16OnPendingDestroyEv.cpp", + "src/_ZN9Butterfly6RenderEv.cpp", + "src/_ZN9ButterflyD0Ev.cpp", "src/_ZN9ButterflyD1Ev.cpp", "src/_ZN9CameraTag13InitResourcesEv.cpp", "src/_ZN9CameraTag16CleanupResourcesEv.cpp", "src/_ZN9CameraTag16OnPendingDestroyEv.cpp", "src/_ZN9CameraTag6RenderEv.cpp", "src/_ZN9CameraTag8BehaviorEv.cpp", + "src/_ZN9CameraTagD0Ev.cpp", "src/_ZN9CameraTagD1Ev.cpp", + "src/_ZN9HugeCover16CleanupResourcesEv.cpp", "src/_ZN9HugeCover6RenderEv.cpp", + "src/_ZN9HugeCoverD0Ev.cpp", "src/_ZN9HugeCoverD1Ev.cpp", "src/_ZN9HugeWater16CleanupResourcesEv.cpp", "src/_ZN9HugeWaterD0Ev.cpp", @@ -1601,9 +2160,12 @@ "src/_ZN9JetStream16CleanupResourcesEv.cpp", "src/_ZN9JetStream16OnPendingDestroyEv.cpp", "src/_ZN9JetStream6RenderEv.cpp", + "src/_ZN9JetStream8BehaviorEv.cpp", "src/_ZN9JetStreamD0Ev.cpp", "src/_ZN9JetStreamD1Ev.cpp", + "src/_ZN9KoopaFlag16CleanupResourcesEv.cpp", "src/_ZN9KoopaFlag6RenderEv.cpp", + "src/_ZN9KoopaFlagD0Ev.cpp", "src/_ZN9KoopaFlagD1Ev.cpp", "src/_ZN9LakituBro16CleanupResourcesEv.cpp", "src/_ZN9LakituBro16OnPendingDestroyEv.cpp", @@ -1613,17 +2175,27 @@ "src/_ZN9LavaPlank6RenderEv.cpp", "src/_ZN9LavaPlankD0Ev.cpp", "src/_ZN9LavaPlankD1Ev.cpp", + "src/_ZN9LightBeam16CleanupResourcesEv.cpp", "src/_ZN9LightBeam6RenderEv.cpp", + "src/_ZN9LightBeamD0Ev.cpp", "src/_ZN9LightBeamD1Ev.cpp", "src/_ZN9ModelAnim11UpdateVertsEv.cpp", "src/_ZN9ModelAnim4CopyERKS_Pc.cpp", "src/_ZN9ModelAnim6RenderEPK7Vector3.cpp", + "src/_ZN9ModelAnimC1Ev.cpp", + "src/_ZN9ModelAnimC2Ev.cpp", + "src/_ZN9ModelAnimD0Ev.cpp", "src/_ZN9ModelAnimD1Ev.cpp", + "src/_ZN9ModelAnimD2Ev.cpp", "src/_ZN9ModelBase12ApplyOpacityEj.cpp", "src/_ZN9ModelBase7SetFileEP8BMD_Fileii.cpp", "src/_ZN9ModelBaseC2Ev.cpp", + "src/_ZN9ModelBaseD0Ev.cpp", + "src/_ZN9ModelBaseD1Ev.cpp", + "src/_ZN9ModelBaseD2Ev.cpp", "src/_ZN9MontyMole16OnAimedAtWithEggEv.cpp", "src/_ZN9MontyMole6RenderEv.cpp", + "src/_ZN9MontyMoleD0Ev.cpp", "src/_ZN9MontyMoleD1Ev.cpp", "src/_ZN9MovingBar15OnHitByMegaCharER6Player.cpp", "src/_ZN9MovingBar16CleanupResourcesEv.cpp", @@ -1639,10 +2211,6 @@ "src/_ZN9PowerStar6RenderEv.cpp", "src/_ZN9PowerStarD0Ev.cpp", "src/_ZN9PowerStarD1Ev.cpp", - "src/_ZN16daObjPushblock_c15OnHitByMegaCharER6Player.cpp", - "src/_ZN16daObjPushblock_c6RenderEv.cpp", - "src/_ZN16daObjPushblock_cD0Ev.cpp", - "src/_ZN16daObjPushblock_cD1Ev.cpp", "src/_ZN9RabbitKey16CleanupResourcesEv.cpp", "src/_ZN9RabbitKey16OnPendingDestroyEv.cpp", "src/_ZN9RabbitKey6RenderEv.cpp", @@ -1669,7 +2237,9 @@ "src/_ZN9SolidHeap7VSizeofEPv.cpp", "src/_ZN9SolidHeap8VDestroyEv.cpp", "src/_ZN9SolidHeap9VAllocateEji.cpp", + "src/_ZN9SolidHeapC1EPvjP4HeapP18SolidHeapAllocator.cpp", "src/_ZN9SolidHeapD0Ev.cpp", + "src/_ZN9SolidHeapD1Ev.cpp", "src/_ZN9SpikeBomb16CleanupResourcesEv.cpp", "src/_ZN9SpikeBomb6RenderEv.cpp", "src/_ZN9SpikeBombD0Ev.cpp", @@ -1679,10 +2249,13 @@ "src/_ZN9Spindrift16CleanupResourcesEv.cpp", "src/_ZN9Spindrift16OnAimedAtWithEggEv.cpp", "src/_ZN9Spindrift6RenderEv.cpp", + "src/_ZN9SpindriftD0Ev.cpp", "src/_ZN9SpindriftD1Ev.cpp", "src/_ZN9Submarine6RenderEv.cpp", + "src/_ZN9SubmarineD0Ev.cpp", "src/_ZN9SubmarineD1Ev.cpp", "src/_ZN9TinyCover6RenderEv.cpp", + "src/_ZN9TinyCoverD0Ev.cpp", "src/_ZN9TinyCoverD1Ev.cpp", "src/_ZN9TinyWater16CleanupResourcesEv.cpp", "src/_ZN9TinyWaterD0Ev.cpp", @@ -1692,9 +2265,6 @@ "src/_ZN9TowerStep6RenderEv.cpp", "src/_ZN9TowerStepD0Ev.cpp", "src/_ZN9TowerStepD1Ev.cpp", - "src/_ZN13daObjHmBskt_c6RenderEv.cpp", - "src/_ZN13daObjHmBskt_cD0Ev.cpp", - "src/_ZN13daObjHmBskt_cD1Ev.cpp", "src/_ZN9WDW_Water16CleanupResourcesEv.cpp", "src/_ZN9WDW_WaterD0Ev.cpp", "src/_ZN9WDW_WaterD1Ev.cpp", @@ -1710,11 +2280,23 @@ "src/_ZN9WhirlpoolD0Ev.cpp", "src/_ZN9WhirlpoolD1Ev.cpp", "src/_ZN9dBgCh_Gnd12SetObjAndPosERK7Vector3P8dActor_c.cpp", + "src/_ZN9dBgCh_GndC1Ev.cpp", + "src/_ZN9dBgCh_GndD0Ev.cpp", + "src/_ZN9dBgCh_GndD1Ev.cpp", + "src/_ZN9dBgCh_Lin13SetObjAndLineERK7Vector3S2_P8dActor_c.cpp", "src/_ZN9dBgCh_LinC1Ev.cpp", + "src/_ZN9dBgCh_LinD0Ev.cpp", + "src/_ZN9dBgCh_LinD1Ev.cpp", + "src/_ZN9dScDSMT_c15graphCallback_c14GraphCallback0Ev.cpp", + "src/_ZN9dScDSMT_c15graphCallback_c14GraphCallback2Ev.cpp", "src/_ZN9dScDSMT_c16OnPendingDestroyEv.cpp", "src/_ZN9dScDSMT_c6RenderEv.cpp", + "src/_ZN9dScDSMT_cD0Ev.cpp", "src/_ZN9dScDSMT_cD1Ev.cpp", + "src/_ZN9dThIcon_c6RenderEv.cpp", + "src/_ZN9daSCoin_cD0Ev.cpp", "src/_ZN9daSCoin_cD1Ev.cpp", + "src/_ZN9fLiNdBa_cD1Ev.cpp", "src/_ZNK10dBgCh_Actr10IsOnGroundEv.cpp", "src/_ZNK10dBgCh_Actr12TouchesWaterEv.cpp", "src/_ZNK10dBgCh_Actr13GetLimMovFlagEv.cpp", @@ -1733,8 +2315,12 @@ "src/_ZNK7PathPtr8NumNodesEv.cpp", "src/_ZNK7dBgW_Kc13GetUnkOctreeYEv.cpp", "src/_ZNK7dBgW_Kc16GetOctreeOriginYEv.cpp", + "src/_ZNK8Particle10SysTracker8Contents8FindDataEj.cpp", "src/_ZNK9Animation12WillHitFrameEi.cpp", "src/_ZNK9Animation13GetFrameCountEv.cpp", + "src/_ZNSt9type_infoD0Ev.cpp", + "src/_ZNSt9type_infoD1Ev.cpp", + "src/_ZNSt9type_infoD2Ev.cpp", "src/_ZdlPv.cpp", "src/_Znwj.cpp", "src/__destroy_arr.c", @@ -1795,6 +2381,7 @@ "src/__sinit_ov006_02131a38.c", "src/__sinit_ov006_02131cd0.c", "src/__sinit_ov006_02131fa4.c", + "src/__sinit_ov006_021322bc.c", "src/__sinit_ov006_02132894.c", "src/__sinit_ov006_02132970.c", "src/__sinit_ov006_02132f68.c", @@ -1946,23 +2533,46 @@ "src/_ll_sdiv.c", "src/_s32_div_f.c", "src/_u32_div_f.c", + "src/actors/ActorBase_SceneNode.cpp", + "src/actors/BigBooIcon/_ZN11daTrsIcon_c13InitResourcesEv.cpp", + "src/actors/BigBooIcon/_ZN11daTrsIcon_cD0Ev.cpp", "src/actors/BigBooIcon/_ZN11daTrsIcon_cD1Ev.cpp", + "src/actors/BooCage/_ZN11daTBasket_cD0Ev.cpp", + "src/actors/BooCage/_ZN11daTBasket_cD1Ev.cpp", "src/actors/BooCage/_ZN7BooCage16CleanupResourcesEv.cpp", "src/actors/BooCage/_ZN7BooCage6RenderEv.cpp", - "src/actors/BooCage/_ZN11daTBasket_cD1Ev.cpp", "src/actors/FallBlockBbh/_ZN12FallBlockBbh13InitResourcesEv.cpp", "src/actors/FallBlockBbh/_ZN12FallBlockBbh16CleanupResourcesEv.cpp", + "src/actors/FallBlockBbh/_ZN12FallBlockBbhD0Ev.cpp", "src/actors/FallBlockBbh/_ZN12FallBlockBbhD1Ev.cpp", "src/actors/MadPiano/_ZN8MadPiano16CleanupResourcesEv.cpp", "src/actors/MadPiano/_ZN8MadPiano6RenderEv.cpp", + "src/actors/MadPiano/_ZN8MadPianoD0Ev.cpp", + "src/actors/MadPiano/_ZN8MadPianoD1Ev.cpp", + "src/actors/MansionSteps/_ZN11daTrsTrap_cD0Ev.cpp", "src/actors/MansionSteps/_ZN11daTrsTrap_cD1Ev.cpp", + "src/actors/MansionSteps/_ZN12MansionSteps16CleanupResourcesEv.cpp", + "src/actors/MansionSteps/_ZN12MansionSteps16OnPendingDestroyEv.cpp", + "src/actors/MansionSteps/_ZN12MansionSteps6RenderEv.cpp", "src/actors/daTrs_c/_ZN7daTrs_c16OnPendingDestroyEv.cpp", + "src/actors/daTrs_c/_ZN7daTrs_cD0Ev.cpp", + "src/actors/daTrs_c/_ZN7daTrs_cD1Ev.cpp", + "src/engine/fader/_ZN10FaderColorD0Ev.cpp", + "src/engine/fader/_ZN10FaderColorD1Ev.cpp", "src/engine/fader/_ZN15FaderBrightness10SetToStartEv.cpp", "src/engine/fader/_ZN15FaderBrightness20IsBetweenStartAndEndEv.cpp", "src/engine/fader/_ZN15FaderBrightness7IsAtEndEv.cpp", "src/engine/fader/_ZN15FaderBrightness8SetToEndEv.cpp", "src/engine/fader/_ZN15FaderBrightness9IsAtStartEv.cpp", + "src/engine/fader/_ZN15FaderBrightnessD0Ev.cpp", + "src/engine/fader/_ZN15FaderBrightnessD1Ev.cpp", + "src/engine/fader/_ZN5FaderD0Ev.cpp", + "src/engine/fader/_ZN5FaderD1Ev.cpp", "src/engine/fader/_ZN9FaderWipe14LoadAndSetFileEt.cpp", + "src/engine/fader/_ZN9FaderWipeC1Ev.cpp", + "src/engine/fader/_ZN9FaderWipeD0Ev.cpp", + "src/engine/fader/_ZN9FaderWipeD1Ev.cpp", + "src/nds_print.c", "src/nds_printf.c", "src/unnamed/ov063/__sinit_ov063_0211e3cc.c", "src/unnamed/ov063/__sinit_ov063_0211e590.c" diff --git a/notes/converted-tier.md b/notes/converted-tier.md index 3df89c53ba..61432af9f4 100644 --- a/notes/converted-tier.md +++ b/notes/converted-tier.md @@ -148,3 +148,85 @@ See also `[[validator-what-it-proves]]`, `[[langmode-metric-is-textual]]` and `[[reformat-silently-disables-gates]]` — this is the fourth measured instance of a gate in this tree rewarding the wrong thing, and the second where documenting or doing the work correctly made the number worse. + +--- + +# Two more, measured 2026-08-30 on `d08ac657b` + +Both are the same species as the defect above — the gate counting something other +than what it says it counts — and neither is a hole left open. They are fixed in +the PR that adds this section. + +## `no_codegen_trick` could not tell MMIO from a match hack + +The criterion ORed three regexes and one of them was a bare `\bvolatile\b`. On a +Nintendo DS the only way to reach VRAM, the geometry engine or the IPC/DMA/divider +registers is a `volatile`-qualified pointer, so the criterion failed the code that +had no alternative: + +```sh +src/_ZN8dScene_c22ResetHardwareRegistersEv.cpp 74 volatile hits, all 0x0400xxxx +src/_ZN2GX13SetBankForTexEt.cpp 25 volatile hits, all VRAM banks +src/_ZN3G2x12SetBGyAffineEPVtP9Matrix2x2iiii.cpp the register block is a PARAMETER +``` + +A reconstructed TU that absorbs any of those inherits the failure for the whole +file, so this compounds with the TU work rather than sitting still. + +The two shapes are separable by **what is volatile-qualified**. MMIO qualifies the +pointed-to type, so a `*` follows it. A match hack qualifies an object — the +`volatile int li;` spill pad, the `volatile Vector3 v;` stack reserver, the +`(s32)(volatile s32)rsc` round-trip of `[[volatile-roundtrip-demotes-a-local]]`, +and `Node *volatile arr[4]` where the pointer rather than the pointee is volatile. + +```py +VOLATILE = re.compile(r"\bvolatile\b(?![\s\w:]*\*)") +``` + +Files scoring a codegen trick: **655 -> 254**. Every one of the 401 released was +checked to be MMIO-only, and the 254 kept still contain every match-hack form +above — the negative direction was measured, not assumed, because a `volatile` +regex that stops catching hacks is a worse defect than the one being fixed. +CONVERTED **2,511 -> 2,568 functions (22.20% -> 22.71%)**; additions only. + +Known conservative reading: `typedef volatile u32 vu32;` used only as `vu32 *` +(4 files) still scores. Excluding typedefs opens a real evasion — `typedef +volatile int vi; vi dummy;` would carry no `volatile` at the use site at all. + +## The ratchet reported a TU promotion as a vanished file + +`tools/tiers_ratchet.py` banks the SET of CONVERTED paths and fails when one +leaves. A TU promotion consolidates N per-symbol `src/_ZN....cpp` files into the +one `src/actors/X.cpp` they always were, which git records as N deletions plus one +addition. Every one read as + +```sh +GONE -- not a tracked source file any more (deleted, renamed or moved) +``` + +Measured on PR #1882 (`tu/inline-dtor-order`, `9c6396c5f`): **90 of 90** backslid +paths were TU `legacy_source` entries whose TU is `"status": "promoted"` and whose +`promoted_source` exists on the branch. **Zero** were real deletions. A gate whose +entire output is false alarms trains people to re-bank without reading it. + +A GONE path is now resolved through the manifest (via `tools/tu_manifest.py`, per +`[[tu-manifest-split]]`) before it is called a deletion, and reported as a MOVE +naming the absorbing file: + +```sh +MOVED -- absorbed into src/actors/daObjPathLift_c.cpp by TU promotion + (ov100/daObjPathLift_c), which fails: No raw offset arithmetic ...; + Calls things by real names, not mangled _Z +``` + +**A promotion is not free.** The five criteria are file-wide, so a clean function +merged into a file with one bad line really does lose its status, and that case +still exits 1. Only a move into a file that itself passes all five is silent. In +practice a promotion lands in the failing case *by construction*: a reconstructed +TU must spell `_ZN7fBase_cnwEj`, `_ZN8dActor_cC2Ev` and `_ZN8dActor_cD2Ev` +directly or its range will not link, so `no_mangled_refs` can never pass for one. +That is structural, and the answer is `--update --reason`, never exempting mangled +refs — byte-match outranks readability here. + +Both readings are pinned in both directions by `tools/test_tiers.py`, which +`converted-ratchet.yml` now runs. diff --git a/tools/test_tiers.py b/tools/test_tiers.py new file mode 100644 index 0000000000..3401bad81e --- /dev/null +++ b/tools/test_tiers.py @@ -0,0 +1,205 @@ +"""The two CONVERTED-tier readings that were measurably wrong, pinned in both directions. + +Neither of these is a regression test in the usual sense: each one records a +distinction the gate could not previously make, and for each the NEGATIVE half is the +half that matters. A `volatile` regex that stops catching match hacks is a worse defect +than the one it fixes, and a GONE-path resolver that makes TU promotions free would +delete the gate's whole reason to exist. So every class below asserts the thing that +must still be caught next to the thing that must now be let through. +""" +import json +import pathlib +import sys +import unittest + +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent)) +import tiers # noqa: E402 +import tiers_ratchet as ratchet # noqa: E402 + + +def trick(text): + """The no_codegen_trick criterion for a snippet: True when it scores a trick.""" + return not tiers.score_file("x.c", text)["no_codegen_trick"] + + +class MmioIsNotACodegenTrick(unittest.TestCase): + """`volatile` reaching a Nintendo DS hardware register through a POINTER. + + There is no other way to write VRAM, the geometry engine or the IPC/DMA/divider + registers, so this is correct code, not steering. All of these are shapes taken + verbatim from src/. + """ + + def test_cast_to_volatile_pointer(self): + self.assertFalse(trick("*(volatile unsigned int *)0x4000400 = 0x1a;\n")) + + def test_volatile_pointer_local(self): + self.assertFalse(trick("volatile u16 *ime = (volatile u16 *)0x4000208;\n")) + + def test_volatile_struct_pointer(self): + self.assertFalse(trick("volatile DMAChannelRegs *reg;\n")) + + def test_volatile_pointer_parameter(self): + self.assertFalse(trick( + "void G2x::SetBGyAffine(volatile unsigned short *p, Matrix2x2 *m) {}\n")) + + def test_volatile_void_pointer_return(self): + self.assertFalse(trick("extern volatile void *GetBG1ScrPtr(void);\n")) + + def test_qualified_type_before_the_star(self): + self.assertFalse(trick("volatile Nitro::Reg *r;\n")) + + def test_real_file_of_pure_mmio(self): + p = ratchet.REPO / "src" / "_ZN8dScene_c22ResetHardwareRegistersEv.cpp" + if not p.is_file(): + self.skipTest(f"{p} not in this tree") + text = p.read_text(errors="replace") + self.assertGreater(text.count("volatile"), 50) + self.assertFalse(trick(text)) + + +class MatchHacksAreStillCodegenTricks(unittest.TestCase): + """A volatile OBJECT: the spill-forcing / CSE-defeating idiom, still caught.""" + + def test_volatile_scalar_local(self): + self.assertTrue(trick(" volatile int li;\n")) + + def test_volatile_scalar_local_with_initialiser(self): + self.assertTrue(trick(" volatile s32 zero = 0;\n")) + + def test_volatile_aggregate_local(self): + self.assertTrue(trick(" volatile Vector3 v;\n")) + + def test_volatile_array_local(self): + self.assertTrue(trick(" volatile int dummy[4];\n")) + + def test_volatile_struct_field(self): + self.assertTrue(trick("struct S { char pad[0x14]; volatile u32 f14; };\n")) + + def test_volatile_cast_round_trip(self): + # notes: volatile-roundtrip-demotes-a-local + self.assertTrue(trick(" rsc = (s32)(volatile s32)rsc;\n")) + + def test_volatile_cast_inside_an_expression(self): + self.assertTrue(trick(" pos.x = px * (volatile int)m;\n")) + + def test_volatile_pointer_object_not_pointer_to_volatile(self): + # The POINTER is volatile here, not the pointee: a spill hack, not MMIO. + self.assertTrue(trick(" Node *volatile arr_a[4];\n")) + + def test_extern_volatile_ram_global(self): + self.assertTrue(trick("extern volatile int data_0209e670;\n")) + + def test_the_other_two_tricks_are_untouched(self): + self.assertTrue(trick(" addr = fillReg & 0xFFFFFFFFFFFFFFFF;\n")) + self.assertTrue(trick(" __asm { nop }\n")) + + def test_a_comment_still_does_not_score(self): + # _code_only masks comments; this is the existing behaviour, re-pinned + # because the new regex must not reach through the mask either. + self.assertFalse(trick("/* uses a volatile int scratch to force a spill */\n")) + + +class PromotedMoves(unittest.TestCase): + """legacy_source -> promoted_source, read through tools/tu_manifest.py.""" + + def _manifest(self, tmp, entries): + root = pathlib.Path(tmp) / "manifest.json" + root.write_text(json.dumps({"schema_version": 1, "entries": entries}), + encoding="utf-8") + return root + + def test_only_promoted_entries_count(self): + import tempfile + with tempfile.TemporaryDirectory() as tmp: + root = self._manifest(tmp, [ + {"id": "ovA/X", "status": "promoted", + "promoted_source": "src/actors/X.cpp", + "functions": [{"legacy_source": "src/_ZN1X1aEv.cpp"}, + {"legacy_source": "src/_ZN1X1bEv.cpp"}]}, + {"id": "ovA/Y", "status": "text-verified", + "promoted_source": "src/actors/Y.cpp", + "functions": [{"legacy_source": "src/_ZN1Y1aEv.cpp"}]}, + ]) + moves = ratchet.promoted_moves(root) + self.assertEqual(moves, { + "src/_ZN1X1aEv.cpp": ("ovA/X", "src/actors/X.cpp"), + "src/_ZN1X1bEv.cpp": ("ovA/X", "src/actors/X.cpp"), + }) + + def test_the_live_manifest_resolves(self): + for legacy, (tu_id, dest) in ratchet.promoted_moves().items(): + self.assertTrue(dest.startswith("src/"), f"{tu_id}: {dest}") + self.assertNotEqual(legacy, dest) + + +class MoveIsNotADeletion(unittest.TestCase): + """A GONE path reads as a MOVE, and only counts as a backslide when it dilutes.""" + + MOVES = {"src/_ZN1X1aEv.cpp": ("ovA/X", "src/actors/X.cpp")} + TRACKED = {"src/actors/X.cpp", "src/kept.c"} + CLEAN = dict.fromkeys(tiers.CRITERIA, True) + DIRTY = dict(CLEAN, no_mangled_refs=False) + + def test_a_real_deletion_still_reads_as_gone(self): + msg = ratchet.why("src/_ZN1Z1aEv.cpp", {}, self.TRACKED, self.MOVES) + self.assertIn("GONE", msg) + self.assertNotIn("MOVED", msg) + + def test_a_move_names_the_absorbing_file(self): + msg = ratchet.why("src/_ZN1X1aEv.cpp", {"src/actors/X.cpp": self.DIRTY}, + self.TRACKED, self.MOVES) + self.assertIn("MOVED", msg) + self.assertIn("src/actors/X.cpp", msg) + self.assertIn("ovA/X", msg) + self.assertIn(tiers.CRITERION_LABEL["no_mangled_refs"], msg) + + def test_a_move_into_a_clean_file_says_nothing_was_lost(self): + msg = ratchet.why("src/_ZN1X1aEv.cpp", {"src/actors/X.cpp": self.CLEAN}, + self.TRACKED, self.MOVES) + self.assertIn("MOVED", msg) + self.assertIn("passes all five", msg) + + def test_a_move_to_an_untracked_file_is_a_deletion(self): + msg = ratchet.why("src/_ZN1X1aEv.cpp", {}, {"src/kept.c"}, self.MOVES) + self.assertIn("not tracked", msg) + + def test_clean_absorption_is_not_a_backslide(self): + clean, backslid = ratchet.classify_missing( + ["src/_ZN1X1aEv.cpp"], {"src/actors/X.cpp"}, self.TRACKED, self.MOVES) + self.assertEqual((clean, backslid), (["src/_ZN1X1aEv.cpp"], [])) + + def test_absorption_into_a_failing_file_STILL_fails(self): + # The load-bearing half: promotions are not free. The absorbing file does not + # pass all five, so the banked path really did lose its status. + clean, backslid = ratchet.classify_missing( + ["src/_ZN1X1aEv.cpp"], set(), self.TRACKED, self.MOVES) + self.assertEqual((clean, backslid), ([], ["src/_ZN1X1aEv.cpp"])) + + def test_an_unrelated_deletion_is_never_absorbed(self): + clean, backslid = ratchet.classify_missing( + ["src/_ZN1Z1aEv.cpp"], {"src/actors/X.cpp"}, self.TRACKED, self.MOVES) + self.assertEqual((clean, backslid), ([], ["src/_ZN1Z1aEv.cpp"])) + + def test_a_path_that_still_exists_is_judged_on_its_own_criteria(self): + # Present in the tree and failing: the manifest must not launder it into a move. + clean, backslid = ratchet.classify_missing( + ["src/kept.c"], set(), self.TRACKED, self.MOVES) + self.assertEqual((clean, backslid), ([], ["src/kept.c"])) + + +class BaselineIsInSync(unittest.TestCase): + """`--check` must exit 0 on a clean tree, or every PR after this one goes red.""" + + def test_check_passes(self): + banked = ratchet.load_baseline(ratchet.BASELINE) + self.assertIsNotNone(banked, "no usable config/converted-baseline.json") + current, _ = ratchet.scan() + _, backslid = ratchet.classify_missing( + sorted(banked - current), current, set(ratchet.tracked_sources()), + ratchet.promoted_moves()) + self.assertEqual(backslid, []) + + +if __name__ == "__main__": + unittest.main() diff --git a/tools/tiers.py b/tools/tiers.py index 6eea3b5efa..a44925c5dc 100644 --- a/tools/tiers.py +++ b/tools/tiers.py @@ -110,9 +110,59 @@ # Codegen steering that exists only to make the compiler emit given bytes. LAUNDER = re.compile(r"&\s*0xFFFFFFFFFFFFFFFF") -VOLATILE = re.compile(r"\bvolatile\b") ASM = re.compile(r"\b(__asm|asm\s*\()") +# `volatile`, but only in the shape that is a MATCH HACK. +# +# The bare `\bvolatile\b` this used to be could not tell a Nintendo DS hardware +# register from a spill-forcing trick, and the tree is full of the former. A DS +# decomp reaches VRAM, the geometry engine and the IPC/DMA/divider registers the +# only way any DS program can -- through a `volatile`-qualified pointer -- and that +# is not codegen steering, it is the only way to write the hardware at all. +# `_ZN8dScene_c22ResetHardwareRegistersEv.cpp` carries 74 `volatile` hits and every +# one is a store to 0x0400xxxx or a VRAM bank register; `GX::SetBankForTex` has 25 +# of the same; `G2x::SetBGyAffine(volatile unsigned short *, Matrix2x2 *, ...)` +# takes the register block as a parameter. Scoring those as tricks failed the +# criterion for code that had no alternative, and a reconstructed TU that absorbs +# them inherits the failure whole. +# +# The two shapes are distinguishable by WHAT is volatile-qualified: +# +# MMIO the POINTED-TO type is volatile, so a `*` follows the type -- +# `*(volatile u32 *)0x4000400`, `volatile u16 *ime`, +# `volatile DMAChannelRegs *reg`, `f(volatile void *dst)`. +# MATCH HACK a volatile OBJECT, no `*` -- `volatile int li;`, +# `volatile Vector3 v;`, `volatile s32 zero = 0;`, the cast +# round-trip `(s32)(volatile s32)rsc` that demotes a local out of a +# register (notes: volatile-roundtrip-demotes-a-local), and +# `Node *volatile arr[4]`, where the POINTER, not the pointee, is +# volatile. +# +# So: `volatile` whose next character that is not a word character, space or `:` +# is not a `*`. The negative lookahead does that scan without backtracking into +# the type name, which the equivalent greedy form would -- `[\s\w:]*` followed by +# a literal `*` would happily stop mid-identifier and call `volatile u32 *p` a +# scalar. +# +# Measured on this tree: 655 -> 254 files score a codegen trick through this +# regex. BOTH directions were checked rather than assumed. Every one of the 401 +# released files was confirmed MMIO-only, and the 254 that remain still include +# every `volatile int li;` spill pad, every `volatile Vector3 v;` stack reserver, +# every `volatile int dummy[4];` frame filler and the `(volatile s32)` round-trip +# -- the technique this criterion exists to catch is caught in full. Adding `&` to +# the excluded set (for a C++ `volatile T &` register reference) changes 0 files +# today, so it is left out rather than carried untested. +# +# KNOWN CONSERVATIVE READING, stated rather than hidden: `typedef volatile u32 +# vu32;` is MMIO when `vu32` is only ever used as `vu32 *` (DMASyncFillTransfer.c +# does exactly that), but the typedef itself declares a scalar and still scores as +# a trick -- 4 files tree-wide. Excluding typedefs outright was rejected because it +# opens a real evasion: `typedef volatile int vi; vi dummy;` would then contain no +# `volatile` token at the use site at all, so the file would pass while doing the +# exact thing the criterion forbids. A false positive on 4 files is the cheaper +# error than a hole a match hack can walk through. +VOLATILE = re.compile(r"\bvolatile\b(?![\s\w:]*\*)") + # A call to another function under its mangled name: readable code calls # Player::SpinBounce, not _ZN6Player10SpinBounceE5Fix12IiE. # @@ -133,7 +183,7 @@ "real_name": "Real function name (not func_, Unk_, Virtual)", "no_raw_offset": "No raw offset arithmetic (*(u32*)(c + 0x74))", "no_unk_field": "No unk_ fields", - "no_codegen_trick": "No codegen tricks (launder mask, volatile, asm)", + "no_codegen_trick": "No codegen tricks (launder, volatile object, asm)", "no_mangled_refs": "Calls things by real names, not mangled _Z", } diff --git a/tools/tiers_ratchet.py b/tools/tiers_ratchet.py index 3428d77388..85d5ce8ea2 100644 --- a/tools/tiers_ratchet.py +++ b/tools/tiers_ratchet.py @@ -29,6 +29,34 @@ ought to exist. The gate's job is to make a backslide LOUD and ATTRIBUTED, not to make it impossible. +A PATH CAN LEAVE WITHOUT ANYTHING BEING LOST. The one legitimate way is a TU +promotion: `tubuild.py` consolidates N per-symbol `src/_ZN....cpp` files into the one +`src/actors/X.cpp` the original translation unit was, and git records N deletions plus +one addition. A set ratchet reads all N as `GONE`. Measured on PR #1882 +(`tu/inline-dtor-order`, 9c6396c5f), 90 of 90 backslid paths were exactly that and +none was a deletion, which is a report no one can read. + +So a GONE path is now resolved through the TU manifest (`config/tu_manifest.d/`, via +`tools/tu_manifest.py` -- never off the files) before it is called a deletion. If some +entry with `"status": "promoted"` lists it as a `legacy_source`, the path is reported +as a MOVE naming the `promoted_source` that absorbed it, and: + + * if the absorbing file passes all five, that is NOT a backslide -- the same readable + code is simply scored under a different path, and the absorbing file enters the + baseline as an ordinary addition on the next `--update`; + * if it does not, that IS a backslide and still fails. The criteria are file-wide, so + merging a clean function into a file with one bad line genuinely costs it its + status, and the message says which criterion, e.g. "absorbed into + src/actors/X.cpp by TU promotion (ov100/daObjPathLift_c), which fails: Calls + things by real names, not mangled _Z". + +A promotion is therefore never silently free. In practice it lands in the second case +by construction: a reconstructed TU MUST spell vague-linkage symbols directly +(`_ZN7fBase_cnwEj`, `_ZN8dActor_cC2Ev`, `_ZN8dActor_cD2Ev`) or its range will not link, +so `no_mangled_refs` cannot pass for one. That is structural, not sloppiness, and it is +not fixed by exempting mangled refs -- byte-match outranks readability here, and the +override below is where that trade is recorded with a name against it. + HOW TO OVERRIDE (the escape hatch) python tools/tiers_ratchet.py --update --reason "St_WallJump_Init: named members @@ -87,6 +115,7 @@ REPO = pathlib.Path(__file__).resolve().parent.parent sys.path.insert(0, str(REPO / "tools")) import tiers # noqa: E402 +import tu_manifest # noqa: E402 (legacy_source -> promoted_source; see promoted_moves) BASELINE = REPO / "config" / "converted-baseline.json" EXCEPTIONS = REPO / "config" / "converted-backslide-exceptions.jsonl" @@ -110,6 +139,46 @@ def tracked_sources(): return sorted(p for p in out if p.endswith((".c", ".cpp"))) +def promoted_moves(root=None): + """`legacy_source` -> (tu_id, promoted_source) for every PROMOTED TU entry. + + A TU promotion is the one way a banked path legitimately stops existing without + anything being deleted. `tubuild.py` consolidates N per-symbol `src/_ZN....cpp` + files into the single `src/actors/X.cpp` the original translation unit was, and + git records that as N deletions plus one addition -- so every one of the N banked + paths reads to a set ratchet exactly like a file someone threw away. Measured on + PR #1882 (`tu/inline-dtor-order`, 9c6396c5f): 90 of 90 backslid paths were TU + `legacy_source` entries whose TU is `"status": "promoted"` and whose + `promoted_source` exists on the branch. Zero were real deletions. A gate whose + entire output is 90 false alarms teaches people to re-bank without reading it, + which is the failure mode that costs a ratchet its value. + + So the checker resolves a GONE path through the manifest before calling it a + deletion. It does NOT make the promotion free -- see `classify_missing`. It only + lets the report say WHICH of the two things happened. + + Read through tools/tu_manifest.py, never off `config/tu_manifest.d/**/*.json` + directly: that directory's on-disk shape is this repo's second attempt at it (it + used to be one file) and tu_manifest is the only place allowed to know the layout. + """ + moves = {} + try: + data = tu_manifest.load(root) + except (OSError, ValueError): + return moves + for entry in data.get("entries") or []: + if entry.get("status") != "promoted": + continue + dest = entry.get("promoted_source") + if not dest: + continue + for fn in entry.get("functions") or []: + legacy = fn.get("legacy_source") + if legacy and legacy != dest: + moves[legacy] = (entry.get("id"), dest) + return moves + + def score(rel): """tiers.score_file for one repo-relative path, or None if it is unreadable.""" try: @@ -172,21 +241,80 @@ def append_exceptions(path, rows): f.write(json.dumps(r, sort_keys=True) + "\n") -def why(rel, scores, tracked): - """Why a banked path is no longer CONVERTED, in the words of the criteria.""" - if rel not in tracked: - return "GONE -- not a tracked source file any more (deleted, renamed or moved)" +def _failures(rel, scores): + """The criteria `rel` fails, as labels, or None when it passes all five.""" s = scores.get(rel) if s is None: - return "UNREADABLE -- the file could not be read" + return None failed = [k for k in tiers.CRITERIA if not s[k]] - if not failed: + return failed or None + + +def why(rel, scores, tracked, moves=None): + """Why a banked path is no longer CONVERTED, in the words of the criteria. + + A path that is GONE gets one of two answers, and the difference is the whole + point: someone deleted readable code, or a TU promotion absorbed it into the file + it was always part of. The second names the absorbing file and says what that file + does with the five criteria, because THAT is the thing a reviewer has to judge. + """ + if rel not in tracked: + moved = (moves or {}).get(rel) + if not moved: + return ("GONE -- not a tracked source file any more " + "(deleted, renamed or moved)") + tu_id, dest = moved + if dest not in tracked: + return (f"MOVED -- TU {tu_id} names {dest} as the file that absorbed it, " + "but that file is not tracked; treat as a deletion") + failed = _failures(dest, scores) + if failed is None: + return (f"MOVED -- absorbed into {dest} by TU promotion ({tu_id}); that " + "file passes all five, so nothing readable was lost") + return (f"MOVED -- absorbed into {dest} by TU promotion ({tu_id}), which " + "fails: " + "; ".join(tiers.CRITERION_LABEL[k] for k in failed)) + failed = _failures(rel, scores) + if failed is None: + if rel not in scores: + return "UNREADABLE -- the file could not be read" # Cannot happen through --check, which derives both sides from one scan; it can # happen if a caller passes a hand-edited path list, so say so rather than lie. return "no criterion fails -- baseline and scan disagree, re-run --check" return "; ".join(tiers.CRITERION_LABEL[k] for k in failed) +def classify_missing(missing, current, tracked, moves): + """Split the banked-but-not-CONVERTED paths into (absorbed_clean, backslid). + + `absorbed_clean` is a banked path that stopped existing ONLY because a promoted + TU absorbed it, and whose absorbing file is itself CONVERTED. Nothing left the + CONVERTED set: the same readable code is scored under a different path, and the + absorbing file enters the baseline as a plain addition on the next `--update`. So + it is not a backslide and does not need an exception row. + + Everything else is `backslid`, and that deliberately INCLUDES a path absorbed into + a file that fails a criterion. The five criteria are file-wide, so consolidating a + clean function into a file with one bad line really does cost that function its + status, and this project's whole reason for a set ratchet is to name that instead + of averaging it away. In practice a reconstructed TU fails `no_mangled_refs` by + construction -- it MUST spell `_ZN7fBase_cnwEj`, `_ZN8dActor_cC2Ev` and + `_ZN8dActor_cD2Ev` directly or the range will not link -- so a promotion normally + lands here and is banked with a `--reason` saying exactly that. That is the + correct outcome and not a thing to "fix" by exempting mangled refs: byte-match + outranks readability, and the exception log is where that trade gets recorded. + """ + absorbed_clean, backslid = [], [] + for rel in missing: + moved = moves.get(rel) + if moved and rel not in tracked: + _, dest = moved + if dest in current: + absorbed_clean.append(rel) + continue + backslid.append(rel) + return absorbed_clean, backslid + + def main(): ap = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) @@ -215,6 +343,7 @@ def main(): tracked = tracked_sources() current, scores = scan(tracked) tracked_set = set(tracked) + moves = promoted_moves() if args.list: print("\n".join(sorted(current))) @@ -223,16 +352,21 @@ def main(): banked = load_baseline(args.baseline) if args.update: - removed = sorted((banked or set()) - current) + left = sorted((banked or set()) - current) + absorbed_clean, removed = classify_missing(left, current, tracked_set, moves) added = sorted(current - (banked or set())) if removed and not args.reason: print(f"REFUSING to bank {len(removed)} removal(s) without --reason:\n") for rel in removed: - print(f" {rel}\n {why(rel, scores, tracked_set)}") + print(f" {rel}\n {why(rel, scores, tracked_set, moves)}") print("\nA path leaving the CONVERTED set is allowed -- byte-match outranks\n" "readability and sometimes requires it -- but it is not allowed to be\n" "silent. Re-run with --reason \"\"; the reason\n" f"is appended to {args.exceptions} for every path above.") + if absorbed_clean: + print(f"\n({len(absorbed_clean)} further path(s) left the baseline by TU\n" + "promotion into a file that is itself CONVERTED. Those are moves,\n" + "not backslides, and need no reason.)") return 2 if removed: append_exceptions(args.exceptions, @@ -244,7 +378,10 @@ def main(): print(f"baked {len(current)} CONVERTED path(s) into {args.baseline} (new baseline)") else: print(f"wrote {args.baseline}: {len(banked)} -> {len(current)} " - f"(+{len(added)} / -{len(removed)})") + f"(+{len(added)} / -{len(left)})") + if absorbed_clean: + print(f"{len(absorbed_clean)} of those left by TU promotion into a " + f"CONVERTED file (a move, not a removal)") if removed: print(f"logged {len(removed)} removal(s) to {args.exceptions}") return 0 @@ -256,23 +393,37 @@ def main(): "baseline is a configuration error, not an empty set: treating it as\n" "empty would make this gate pass forever.") return 2 - missing = sorted(banked - current) + left = sorted(banked - current) + absorbed_clean, missing = classify_missing(left, current, tracked_set, moves) gained = len(current - banked) if missing: print(f"CONVERTED backslide: {len(missing)} banked file(s) no longer pass " f"all {len(tiers.CRITERIA)} criteria\n") for rel in missing: - print(f" {rel}\n {why(rel, scores, tracked_set)}") + print(f" {rel}\n {why(rel, scores, tracked_set, moves)}") + if absorbed_clean: + print(f"\n({len(absorbed_clean)} further banked path(s) were absorbed " + "into a promoted TU that is\nitself CONVERTED -- moves, not " + "backslides. They are not counted above.)") print(f"\nbaseline {len(banked)} current {len(current)} " f"(+{gained} gained, -{len(missing)} lost)") print("\nIf a byte match REQUIRED this -- and it legitimately can; raw-cast\n" "versus named member is decided per function by the byte gate -- bank\n" "it with a reason instead of reverting readable code:\n" ' python tools/tiers_ratchet.py --update --reason ""') + if any(rel in moves for rel in missing): + print("\nMOVED lines above are a TU promotion, not a deletion: the file\n" + "named absorbed the code and then failed a criterion for the whole\n" + "TU. A reconstructed TU must spell vague-linkage symbols directly\n" + "(_ZN7fBase_cnwEj, _ZN8dActor_cC2Ev, _ZN8dActor_cD2Ev) or the range\n" + "will not link, so no_mangled_refs cannot pass for one. Byte-match\n" + "outranks readability -- bank it with that as the reason.") return 1 tail = f" (+{gained} gained, not yet banked)" if gained else "" + moved = (f" ({len(absorbed_clean)} moved into a promoted TU)" + if absorbed_clean else "") print(f"CONVERTED ratchet PASS baseline {len(banked)} " - f"current {len(current)}{tail}") + f"current {len(current)}{tail}{moved}") return 0 # No mode flag: a plain report. Says the same things --check would, without an @@ -283,13 +434,16 @@ def main(): if banked is None: print(f"baseline (none at {args.baseline}; run --update)") return 0 - missing = sorted(banked - current) + left = sorted(banked - current) + absorbed_clean, missing = classify_missing(left, current, tracked_set, moves) print(f"baseline {len(banked):6d} {args.baseline}") print(f"gained, not banked {len(current - banked):6d}") + print(f"moved into a TU {len(absorbed_clean):6d} " + "(absorbed by a promoted TU that is itself CONVERTED)") print(f"BACKSLID {len(missing):6d}" f"{' <- --check would fail' if missing else ''}") for rel in missing[:20]: - print(f" {rel}\n {why(rel, scores, tracked_set)}") + print(f" {rel}\n {why(rel, scores, tracked_set, moves)}") if len(missing) > 20: print(f" ... and {len(missing) - 20} more") return 0