From 5dd0ba09158ee1d7e7e56bd44f253711c05569f9 Mon Sep 17 00:00:00 2001 From: LynxDev2 <128722393+LynxDev2@users.noreply.github.com> Date: Mon, 29 Sep 2025 16:52:01 +0700 Subject: [PATCH] all: Fix more `listsym` issues (#734) --- lib/al/Library/Base/Macros.h | 2 + .../Library/Camera/CameraResourceHolder.cpp | 4 +- lib/al/Library/LiveActor/ActorInitUtil.cpp | 88 +++++++++---------- .../LiveActor/ActorMovementFunction.cpp | 6 +- lib/al/Library/LiveActor/ActorSensorUtil.cpp | 12 +-- lib/al/Library/LiveActor/ActorSensorUtil.h | 2 - lib/al/Project/LiveActor/ConveyerKeyKeeper.h | 4 +- lib/al/Project/Memory/MemorySystem.cpp | 4 +- src/Item/CoinRail.cpp | 11 ++- src/Util/ItemUtil.cpp | 4 +- tools/check-format.py | 6 ++ 11 files changed, 71 insertions(+), 72 deletions(-) diff --git a/lib/al/Library/Base/Macros.h b/lib/al/Library/Base/Macros.h index d4be6386..81cab966 100644 --- a/lib/al/Library/Base/Macros.h +++ b/lib/al/Library/Base/Macros.h @@ -1,5 +1,7 @@ #pragma once +#define ALWAYS_INLINE __attribute__((always_inline)) inline + // https://stackoverflow.com/a/26408195/9275661 #define __NARG__(...) __NARG_I_(__VA_ARGS__, __RSEQ_N()) #define __NARG_I_(...) __ARG_N(__VA_ARGS__) diff --git a/lib/al/Library/Camera/CameraResourceHolder.cpp b/lib/al/Library/Camera/CameraResourceHolder.cpp index 6aaa9c2d..16e62e19 100644 --- a/lib/al/Library/Camera/CameraResourceHolder.cpp +++ b/lib/al/Library/Camera/CameraResourceHolder.cpp @@ -2,6 +2,7 @@ #include +#include "Library/Base/Macros.h" #include "Library/Base/StringUtil.h" #include "Library/Camera/CameraTicketId.h" #include "Library/Placement/PlacementId.h" @@ -19,8 +20,7 @@ CameraResourceHolder::CameraResourceHolder(const char* stageName, s32 maxResourc // too large to inline with heuristic, but needs to be explicit function (or inline lambda) for // stack ordering to match original assembly -__attribute__((always_inline)) void getStageName(StringTmp<128>* stageName, - const char* archiveName) { +ALWAYS_INLINE void getStageName(StringTmp<128>* stageName, const char* archiveName) { sead::FixedSafeString<256> safeArchiveName; safeArchiveName.format("%s", archiveName); if (safeArchiveName.endsWith("Map")) diff --git a/lib/al/Library/LiveActor/ActorInitUtil.cpp b/lib/al/Library/LiveActor/ActorInitUtil.cpp index 704b104b..78da6329 100644 --- a/lib/al/Library/LiveActor/ActorInitUtil.cpp +++ b/lib/al/Library/LiveActor/ActorInitUtil.cpp @@ -5,6 +5,7 @@ #include "Library/Action/ActorActionKeeper.h" #include "Library/Base/HashCodeUtil.h" +#include "Library/Base/Macros.h" #include "Library/Base/StringUtil.h" #include "Library/Camera/CameraDirector.h" #include "Library/Draw/GraphicsQualityController.h" @@ -67,7 +68,7 @@ void initActor(LiveActor* actor, const ActorInitInfo& initInfo) { initActorSuffix(actor, initInfo, nullptr); } -__attribute__((always_inline)) bool initActorPoseKeeper(const char* pose, LiveActor* actor) { +ALWAYS_INLINE bool initActorPoseKeeper(const char* pose, LiveActor* actor) { if (!pose) return false; s32 poseId = -1; @@ -84,8 +85,8 @@ __attribute__((always_inline)) bool initActorPoseKeeper(const char* pose, LiveAc return false; } -__attribute__((always_inline)) void initActorPose(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorPose(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initPose; if (!tryGetActorInitFileIter(&initPose, modelRes, "InitPose", suffix)) return; @@ -101,8 +102,8 @@ __attribute__((always_inline)) void initActorPose(LiveActor* actor, const ActorI ((ActorPoseKeeperTFUSV*)actor->getPoseKeeper())->setFrontUp(true); } -__attribute__((always_inline)) void initActorScale(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorScale(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initScale; if (!tryGetActorInitFileIter(&initScale, modelRes, "InitScale", suffix)) return; @@ -118,8 +119,8 @@ __attribute__((always_inline)) void initActorScale(LiveActor* actor, const Actor setScale(actor, scale); } -__attribute__((always_inline)) ModelLodCtrl* -initActorModelLodCtrl(LiveActor* actor, Resource* modelRes, const char* suffix) { +ALWAYS_INLINE ModelLodCtrl* initActorModelLodCtrl(LiveActor* actor, Resource* modelRes, + const char* suffix) { ByamlIter initLod; if (!tryGetActorInitFileIter(&initLod, modelRes, "InitLod", suffix)) return nullptr; @@ -144,9 +145,9 @@ initActorModelLodCtrl(LiveActor* actor, Resource* modelRes, const char* suffix) return modelLodCtrl; } -__attribute__((always_inline)) void initActorModel(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, ActorResource* actorResource, - const char* suffix) { +ALWAYS_INLINE void initActorModel(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, ActorResource* actorResource, + const char* suffix) { ByamlIter initModel; if (!tryGetActorInitFileIter(&initModel, modelRes, "InitModel", suffix)) return; @@ -219,9 +220,8 @@ __attribute__((always_inline)) void initActorModel(LiveActor* actor, const Actor modelKeeper->getModelCtrl()->setCalcViewCore(2); } -__attribute__((always_inline)) void initActorExecutor(LiveActor* actor, - const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorExecutor(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initExecutor; if (!tryGetActorInitFileIter(&initExecutor, modelRes, "InitExecutor", suffix)) { ModelKeeper* modelKeeper = actor->getModelKeeper(); @@ -261,8 +261,8 @@ __attribute__((always_inline)) void initActorExecutor(LiveActor* actor, } } -__attribute__((always_inline)) void initActorSensor(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorSensor(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initSensor; if (!tryGetActorInitFileIter(&initSensor, modelRes, "InitSensor", suffix)) return; @@ -307,9 +307,8 @@ __attribute__((always_inline)) void initActorSensor(LiveActor* actor, const Acto } } -__attribute__((always_inline)) void initActorCollision(LiveActor* actor, - const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorCollision(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initCollision; if (!tryGetActorInitFileIter(&initCollision, modelRes, "InitCollision", suffix)) return; @@ -335,9 +334,8 @@ __attribute__((always_inline)) void initActorCollision(LiveActor* actor, initActorCollisionWithResource(actor, modelRes, name, sensor, jointMtx, suffix); } -__attribute__((always_inline)) void initActorCollider(LiveActor* actor, - const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorCollider(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initCollider; if (!tryGetActorInitFileIter(&initCollider, modelRes, "InitCollider", suffix)) return; @@ -354,8 +352,8 @@ __attribute__((always_inline)) void initActorCollider(LiveActor* actor, actor->initCollider(radius, offset.y, planeNum); } -__attribute__((always_inline)) void initActorEffect(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorEffect(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initEffect; if (!tryGetActorInitFileIter(&initEffect, modelRes, "InitEffect", suffix)) return; @@ -367,8 +365,8 @@ __attribute__((always_inline)) void initActorEffect(LiveActor* actor, const Acto initActorEffectKeeper(actor, initInfo, name); } -__attribute__((always_inline)) void initActorSound(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorSound(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initSound; const char* seName = nullptr; const char* bgmName = nullptr; @@ -386,14 +384,13 @@ __attribute__((always_inline)) void initActorSound(LiveActor* actor, const Actor initActorBgmKeeper(actor, initInfo, bgmName); } -__attribute__((always_inline)) void initActorRail(LiveActor* actor, const ActorInitInfo& initInfo) { +ALWAYS_INLINE void initActorRail(LiveActor* actor, const ActorInitInfo& initInfo) { if (isExistRail(initInfo, "Rail")) actor->initRailKeeper(initInfo, "Rail"); } -__attribute__((always_inline)) void initActorGroupClipping(LiveActor* actor, - const ActorInitInfo& initInfo, - const ByamlIter& initClipping) { +ALWAYS_INLINE void initActorGroupClipping(LiveActor* actor, const ActorInitInfo& initInfo, + const ByamlIter& initClipping) { if (initClipping.isExistKey("NoGroupClipping")) return; @@ -404,9 +401,8 @@ __attribute__((always_inline)) void initActorGroupClipping(LiveActor* actor, initGroupClipping(actor, initInfo); } -__attribute__((always_inline)) void initActorClipping(LiveActor* actor, - const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorClipping(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initClipping; if (!tryGetActorInitFileIter(&initClipping, modelRes, "InitClipping", suffix)) return; @@ -440,9 +436,8 @@ __attribute__((always_inline)) void initActorClipping(LiveActor* actor, initActorGroupClipping(actor, initInfo, initClipping); } -__attribute__((always_inline)) void initActorShadowMask(LiveActor* actor, - const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorShadowMask(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { bool usingDepthShadow = false; tryGetArg(&usingDepthShadow, initInfo, "UsingDepthShadow"); initDepthShadowMapCtrl(actor, modelRes, initInfo, suffix); @@ -456,8 +451,8 @@ __attribute__((always_inline)) void initActorShadowMask(LiveActor* actor, invalidateShadowMaskIntensityAll(actor); } -__attribute__((always_inline)) void initActorFlag(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorFlag(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initFlag; if (!tryGetActorInitFileIter(&initFlag, modelRes, "InitFlag", suffix)) return; @@ -469,8 +464,8 @@ __attribute__((always_inline)) void initActorFlag(LiveActor* actor, const ActorI validatePuddleMaterial(actor); } -__attribute__((always_inline)) void initActorItem(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorItem(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initItem; if (!tryGetActorInitFileIter(&initItem, modelRes, "InitItem", suffix)) return; @@ -478,8 +473,8 @@ __attribute__((always_inline)) void initActorItem(LiveActor* actor, const ActorI initActorItemKeeper(actor, initInfo, initItem); } -__attribute__((always_inline)) void initActorScore(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, const char* suffix) { +ALWAYS_INLINE void initActorScore(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, const char* suffix) { ByamlIter initScore; if (!tryGetActorInitFileIter(&initScore, modelRes, "InitScore", suffix)) return; @@ -488,10 +483,9 @@ __attribute__((always_inline)) void initActorScore(LiveActor* actor, const Actor actor->getActorScoreKeeper()->init(initScore); } -__attribute__((always_inline)) void initActorAction(LiveActor* actor, const ActorInitInfo& initInfo, - Resource* modelRes, - ActorResource* actorResource, - const char* suffix) { +ALWAYS_INLINE void initActorAction(LiveActor* actor, const ActorInitInfo& initInfo, + Resource* modelRes, ActorResource* actorResource, + const char* suffix) { const char* archiveName = actorResource->getModelRes()->getArchiveName(); initActorActionKeeper(actor, actorResource, archiveName, suffix); @@ -734,8 +728,8 @@ void initCreateActorNoPlacementInfoNoViewId(LiveActor* actor, const ActorInitInf actor->init(childInitInfo); } -__attribute__((always_inline)) LiveActor* -createActorFromFactory(const ActorInitInfo& childInitInfo, const PlacementInfo* placementInfo) { +ALWAYS_INLINE LiveActor* createActorFromFactory(const ActorInitInfo& childInitInfo, + const PlacementInfo* placementInfo) { const ActorFactory* factory = childInitInfo.actorFactory; const char* objectName = nullptr; diff --git a/lib/al/Library/LiveActor/ActorMovementFunction.cpp b/lib/al/Library/LiveActor/ActorMovementFunction.cpp index ff08a6e0..ac7a2996 100644 --- a/lib/al/Library/LiveActor/ActorMovementFunction.cpp +++ b/lib/al/Library/LiveActor/ActorMovementFunction.cpp @@ -802,9 +802,9 @@ bool reboundVelocityFromActor(LiveActor* actor, const LiveActor* target, f32 reb return reboundVelocityFromActor(actor, target, getVelocity(target), reboundStrength); } -__attribute__((always_inline)) bool -reboundVelocityFromActorInline(LiveActor* actor, const LiveActor* target, - const sead::Vector3f& targetVelocity, f32 reboundStrength) { +ALWAYS_INLINE bool reboundVelocityFromActorInline(LiveActor* actor, const LiveActor* target, + const sead::Vector3f& targetVelocity, + f32 reboundStrength) { sead::Vector3f direction; calcDirToActor(&direction, actor, target); f32 dot = (getVelocity(actor) - targetVelocity).dot(direction); diff --git a/lib/al/Library/LiveActor/ActorSensorUtil.cpp b/lib/al/Library/LiveActor/ActorSensorUtil.cpp index a8d0d856..6e78f0a7 100644 --- a/lib/al/Library/LiveActor/ActorSensorUtil.cpp +++ b/lib/al/Library/LiveActor/ActorSensorUtil.cpp @@ -106,7 +106,7 @@ SEND_MSG_IMPL(Hit); SEND_MSG_IMPL(HitStrong); SEND_MSG_IMPL(HitVeryStrong); SEND_MSG_IMPL(KnockDown); -SEND_MSG_IMPL(MapPush); +SEND_MSG_IMPL_(MapPush, Push); SEND_MSG_IMPL(Vanish); SEND_MSG_DATA_TO_ACTOR_IMPL(ChangeAlpha, f32, pAlpha); SEND_MSG_IMPL(ShowModel); @@ -335,7 +335,7 @@ IS_MSG_IMPL(Hit); IS_MSG_IMPL(HitStrong); IS_MSG_IMPL(HitVeryStrong); IS_MSG_IMPL(KnockDown); -IS_MSG_IMPL(MapPush); +IS_MSG_IMPL_(MapPush, Push); IS_MSG_IMPL(Vanish); IS_MSG_IMPL(ChangeAlpha); IS_MSG_IMPL(ShowModel); @@ -489,10 +489,10 @@ bool sendMsgEnemyAttackForCrossoverSensor(HitSensor* receiver, HitSensor* sender return sendMsgEnemyAttack(receiver, sender); } -__attribute__((always_inline)) bool -isWithinCrossoverCylinderVolume(HitSensor* receiver, HitSensor* sender, f32 maxSensorDistance, - const sead::Vector3f& basePoint, const sead::Vector3f& upAxis, - f32 extraRadius) { +ALWAYS_INLINE bool isWithinCrossoverCylinderVolume(HitSensor* receiver, HitSensor* sender, + f32 maxSensorDistance, + const sead::Vector3f& basePoint, + const sead::Vector3f& upAxis, f32 extraRadius) { sead::Vector3f sensorDiff = receiver->getPos() - sender->getPos(); sead::Vector3f senderUp = -getGravity(sender->getParentActor()); verticalizeVec(&sensorDiff, upAxis, sensorDiff); diff --git a/lib/al/Library/LiveActor/ActorSensorUtil.h b/lib/al/Library/LiveActor/ActorSensorUtil.h index 53b2be15..59ded738 100644 --- a/lib/al/Library/LiveActor/ActorSensorUtil.h +++ b/lib/al/Library/LiveActor/ActorSensorUtil.h @@ -730,13 +730,11 @@ SENSOR_MSG(Hit); SENSOR_MSG(HitStrong); SENSOR_MSG(HitVeryStrong); SENSOR_MSG(KnockDown); -SENSOR_MSG(MapPush); SENSOR_MSG(Vanish); SENSOR_MSG_WITH_DATA(ChangeAlpha, (f32, Alpha)); SENSOR_MSG(ShowModel); SENSOR_MSG(HideModel); SENSOR_MSG(Restart); -// Impulse SENSOR_MSG(EnemyTouch); SENSOR_MSG(EnemyUpperPunch); SENSOR_MSG(EnemyTrample); diff --git a/lib/al/Project/LiveActor/ConveyerKeyKeeper.h b/lib/al/Project/LiveActor/ConveyerKeyKeeper.h index 697bfddd..8121a3fb 100644 --- a/lib/al/Project/LiveActor/ConveyerKeyKeeper.h +++ b/lib/al/Project/LiveActor/ConveyerKeyKeeper.h @@ -15,8 +15,8 @@ struct ConveyerKey { s32 interpolateType; const PlacementInfo* placementInfo; - void init(const sead::Vector3f& keeperTrans, const sead::Vector3f& keeperDir, - const PlacementInfo& placement); + inline void init(const sead::Vector3f& keeperTrans, const sead::Vector3f& keeperDir, + const PlacementInfo& placement); }; class ConveyerKeyKeeper { diff --git a/lib/al/Project/Memory/MemorySystem.cpp b/lib/al/Project/Memory/MemorySystem.cpp index 77d2152b..209fe891 100644 --- a/lib/al/Project/Memory/MemorySystem.cpp +++ b/lib/al/Project/Memory/MemorySystem.cpp @@ -4,6 +4,7 @@ #include #include +#include "Library/Base/Macros.h" #include "Library/Base/StringUtil.h" #include "Library/Resource/Resource.h" #include "Library/Resource/ResourceFunction.h" @@ -72,8 +73,7 @@ bool MemorySystem::createSceneHeap(const char* stageName, bool backwards) { return currentSceneResourceHeap == nullptr; } -__attribute__((always_inline)) u64 -MemorySystem::getSceneResourceHeapSize(const char* stageName) const { +ALWAYS_INLINE u64 MemorySystem::getSceneResourceHeapSize(const char* stageName) const { bool isStaffRollOrDemoEnding = stageName && (isEqualString(stageName, "StaffRollStage") || isEqualString(stageName, "DemoEndingStage")); diff --git a/src/Item/CoinRail.cpp b/src/Item/CoinRail.cpp index 6c5927b6..b18f8267 100644 --- a/src/Item/CoinRail.cpp +++ b/src/Item/CoinRail.cpp @@ -1,5 +1,6 @@ #include "Item/CoinRail.h" +#include "Library/Base/Macros.h" #include "Library/LiveActor/ActorActionFunction.h" #include "Library/LiveActor/ActorClippingFunction.h" #include "Library/LiveActor/ActorInitFunction.h" @@ -25,10 +26,8 @@ NERVES_MAKE_STRUCT(CoinRail, CloseMove, Move) CoinRail::CoinRail(const char* name) : al::LiveActor(name) {} -__attribute__((always_inline)) void addStaticCoinToRail(CoinRail* rail, - const al::ActorInitInfo& initInfo, - Coin** coins, f32* railPos, s32 coinNum, - bool isLoop) { +ALWAYS_INLINE void addStaticCoinToRail(CoinRail* rail, const al::ActorInitInfo& initInfo, + Coin** coins, f32* railPos, s32 coinNum, bool isLoop) { f32 posOnRail = 0.0f; f32 railDist = al::getRailTotalLength(rail) / (coinNum - (isLoop ? 0 : 1)); for (s32 i = 0; i < coinNum; i++) { @@ -45,8 +44,8 @@ __attribute__((always_inline)) void addStaticCoinToRail(CoinRail* rail, } } -__attribute__((always_inline)) void addCoinToRail(CoinRail* rail, const al::ActorInitInfo& initInfo, - Coin** coins, f32* railPos, s32 coinNum) { +ALWAYS_INLINE void addCoinToRail(CoinRail* rail, const al::ActorInitInfo& initInfo, Coin** coins, + f32* railPos, s32 coinNum) { f32 posOnRail = 0.0f; for (s32 i = 0; i < coinNum; i++) { sead::Vector3f pos = sead::Vector3f::zero; diff --git a/src/Util/ItemUtil.cpp b/src/Util/ItemUtil.cpp index 4e050674..0e45e103 100644 --- a/src/Util/ItemUtil.cpp +++ b/src/Util/ItemUtil.cpp @@ -612,8 +612,8 @@ s32 getStageShineAnimFrame(const al::LiveActor* actor, const char* stageName) { return getStageShineAnimFrame(actor, worldId); } -void startShineAnimAndSetFrameAndStop(al::LiveActor* actor, const char* animName, s32 frame, - bool isMatAnim) { +inline void startShineAnimAndSetFrameAndStop(al::LiveActor* actor, const char* animName, s32 frame, + bool isMatAnim) { isMatAnim ? al::startMtpAnimAndSetFrameAndStop(actor, animName, frame) : al::startMclAnimAndSetFrameAndStop(actor, animName, frame); } diff --git a/tools/check-format.py b/tools/check-format.py index bf4cb8b8..351460e1 100755 --- a/tools/check-format.py +++ b/tools/check-format.py @@ -484,6 +484,11 @@ def source_no_nerve_make(c, path): FAIL("Use of NERVE_MAKE is not allowed. Use NERVES_MAKE_[NO]STRUCT instead.", line, path) return +def source_always_inline_macro(c, path): + for line in c.splitlines(): + if "__attribute__((always_inline)) inline" in line: + FAIL("Explicitly using `__attribute__((always_inline)) inline` is not allowed. Use ALWAYS_INLINE from Library/Base/Macros.h instead", line, path) + # ----- # UTILS # ----- @@ -502,6 +507,7 @@ def check_source(c, path): source_no_raw_auto(c, path) common_self_other(c, path, False) common_consistent_float_literals(c, path) + source_always_inline_macro(c, path) def check_header(c, path): common_newline_eof(c, path)