From d9a2b8611c86252a0d080ead7d17095a54489b2d Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sat, 6 Mar 2021 12:59:39 +0000 Subject: Mitigate MSVC crash (#5146) Reference: http://ci.appveyor.com/project/Cuberite/cuberite/builds/38087390/job/p857ibg3x87naw36/messages --- src/ChunkData.h | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) (limited to 'src/ChunkData.h') diff --git a/src/ChunkData.h b/src/ChunkData.h index a984b752e..69ae1d5b8 100644 --- a/src/ChunkData.h +++ b/src/ChunkData.h @@ -130,33 +130,24 @@ public: -namespace ChunkDef -{ - using cForEachSectionCallback = cFunctionRef; - - /** Invokes the callback functor for every chunk section containing at least one present block or light section data. - This is used to collect all data for all sections. */ - inline void ForEachSection(const ChunkBlockData & a_BlockData, const ChunkLightData & a_LightData, cForEachSectionCallback a_Callback) - { - for (size_t Y = 0; Y < cChunkDef::NumSections; ++Y) - { - const auto Blocks = a_BlockData.GetSection(Y); - const auto Metas = a_BlockData.GetMetaSection(Y); - const auto BlockLights = a_LightData.GetBlockLightSection(Y); - const auto SkyLights = a_LightData.GetSkyLightSection(Y); - - if ((Blocks != nullptr) || (Metas != nullptr) || (BlockLights != nullptr) || (SkyLights != nullptr)) - { - a_Callback(Y, Blocks, Metas, BlockLights, SkyLights); - } - } - } -} +/** Invokes the callback functor for every chunk section containing at least one present block or light section data. +This is used to collect all data for all sections. +In macro form to work around a Visual Studio 2017 ICE bug. */ +#define ChunkDef_ForEachSection(BlockData, LightData, Callback) \ + do \ + { \ + for (size_t Y = 0; Y < cChunkDef::NumSections; ++Y) \ + { \ + const auto Blocks = BlockData.GetSection(Y); \ + const auto Metas = BlockData.GetMetaSection(Y); \ + const auto BlockLights = LightData.GetBlockLightSection(Y); \ + const auto SkyLights = LightData.GetSkyLightSection(Y); \ + if ((Blocks != nullptr) || (Metas != nullptr) || (BlockLights != nullptr) || (SkyLights != nullptr)) \ + { \ + Callback \ + } \ + } \ + } while (false) -- cgit v1.2.3