diff --git a/include/ideclmanager.h b/include/ideclmanager.h index 12f90aa3b6..5ba22b8ba2 100644 --- a/include/ideclmanager.h +++ b/include/ideclmanager.h @@ -53,8 +53,9 @@ class IDeclaration // The raw syntax block (without the outer curly braces) used to construct this decl virtual const DeclarationBlockSyntax& getBlockSyntax() const = 0; - // Parse (or reparse) the declaration contents from the given block syntax - virtual void parseFromBlock(const DeclarationBlockSyntax& block) = 0; + // Set the block contents of this declaration. + // Implementations are free to either (re-)parse immediately or deferred. + virtual void setBlockSyntax(const DeclarationBlockSyntax& block) = 0; }; using NamedDeclarations = std::map; diff --git a/plugins/sound/SoundManager.cpp b/plugins/sound/SoundManager.cpp index dc980d85c9..23d8b9af61 100644 --- a/plugins/sound/SoundManager.cpp +++ b/plugins/sound/SoundManager.cpp @@ -70,7 +70,7 @@ SoundManager::SoundManager() defaultBlock.fileInfo = vfs::FileInfo("sounds/", "_autogenerated_by_darkradiant_.sndshd", vfs::Visibility::HIDDEN); _emptyShader = std::make_unique(""); - _emptyShader->parseFromBlock(defaultBlock); + _emptyShader->setBlockSyntax(defaultBlock); } void SoundManager::forEachShader(std::function functor) diff --git a/plugins/sound/SoundShader.cpp b/plugins/sound/SoundShader.cpp index d3f3007018..259aee2424 100644 --- a/plugins/sound/SoundShader.cpp +++ b/plugins/sound/SoundShader.cpp @@ -102,11 +102,13 @@ const decl::DeclarationBlockSyntax& SoundShader::getBlockSyntax() const return _declBlock; } -void SoundShader::parseFromBlock(const decl::DeclarationBlockSyntax& block) +void SoundShader::setBlockSyntax(const decl::DeclarationBlockSyntax& block) { _declBlock = block; _fileInfo = block.fileInfo; _modName = block.getModName(); + + // Reset any contents, we reparse as soon as any property is accessed _contents.reset(); } diff --git a/plugins/sound/SoundShader.h b/plugins/sound/SoundShader.h index 7618a2e9dc..c626c146ad 100644 --- a/plugins/sound/SoundShader.h +++ b/plugins/sound/SoundShader.h @@ -49,7 +49,7 @@ class SoundShader final : std::string getDefinition() const override; const decl::DeclarationBlockSyntax& getBlockSyntax() const override; - void parseFromBlock(const decl::DeclarationBlockSyntax& block) override; + void setBlockSyntax(const decl::DeclarationBlockSyntax& block) override; }; } diff --git a/radiantcore/decl/DeclarationFileParser.cpp b/radiantcore/decl/DeclarationFileParser.cpp index ce13ad13a9..7fb0f816db 100644 --- a/radiantcore/decl/DeclarationFileParser.cpp +++ b/radiantcore/decl/DeclarationFileParser.cpp @@ -94,7 +94,7 @@ void DeclarationFileParser::processBlock(IDeclarationCreator& creator, const Dec { auto declaration = creator.createDeclaration(block.name); - declaration->parseFromBlock(block); + declaration->setBlockSyntax(block); auto& declMap = _parsedDecls.try_emplace(creator.getDeclType(), NamedDeclarations()).first->second; diff --git a/test/DeclManager.cpp b/test/DeclManager.cpp index 3b30ee8433..f4e1d5f14b 100644 --- a/test/DeclManager.cpp +++ b/test/DeclManager.cpp @@ -37,7 +37,7 @@ class TestDeclaration : return _block; } - void parseFromBlock(const decl::DeclarationBlockSyntax& block) override + void setBlockSyntax(const decl::DeclarationBlockSyntax& block) override { _block = block; }