all: Fix more listsym issues (#734)

This commit is contained in:
LynxDev2 2025-09-29 16:52:01 +07:00 committed by GitHub
parent 5e5cd6ff9c
commit 5dd0ba0915
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 71 additions and 72 deletions

View file

@ -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__)

View file

@ -2,6 +2,7 @@
#include <prim/seadSafeString.h>
#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"))

View file

@ -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;

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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 {

View file

@ -4,6 +4,7 @@
#include <filedevice/seadFileDeviceMgr.h>
#include <heap/seadHeapMgr.h>
#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"));

View file

@ -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;

View file

@ -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);
}

View file

@ -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)