diff --git a/src/generator.cpp b/src/generator.cpp index be3bd6096e..4a4ecc2ec4 100644 --- a/src/generator.cpp +++ b/src/generator.cpp @@ -2282,6 +2282,8 @@ std::string Generator::interfaceCode(const AnalyserModelPtr &analyserModel, cons pFunc()->addInterfaceComputeModelMethodsCode(); + pFunc()->mAnalyserModel = nullptr; + return pFunc()->mCode; } @@ -2414,6 +2416,8 @@ std::string Generator::implementationCode(const AnalyserModelPtr &analyserModel, pFunc()->addImplementationComputeVariablesMethodCode(remainingAnalyserEquations); + pFunc()->mAnalyserModel = nullptr; + return pFunc()->mCode; } diff --git a/tests/generator/generator.cpp b/tests/generator/generator.cpp index 411080c523..13af89e313 100644 --- a/tests/generator/generator.cpp +++ b/tests/generator/generator.cpp @@ -1754,3 +1754,26 @@ TEST(Generator, generateCodeUsingProfileEnum) EXPECT_EQ_FILE_CONTENTS("generator/algebraic_eqn_computed_var_on_rhs/model.py", generator->implementationCode(analyserModel, libcellml::GeneratorProfile::Profile::PYTHON)); } + +TEST(Generator, checkGeneratorReleasesAnalyserModel) +{ + auto parser = libcellml::Parser::create(); + auto model = parser->parseModel(fileContents("generator/algebraic_eqn_computed_var_on_rhs/model.cellml")); + auto analyser = libcellml::Analyser::create(); + + analyser->analyseModel(model); + + auto analyserModel = analyser->analyserModel(); + + EXPECT_EQ(2, analyserModel.use_count()); + EXPECT_EQ("x = a", libcellml::Generator::equationCode(analyserModel->analyserEquation(0)->ast())); + EXPECT_EQ(2, analyserModel.use_count()); + + auto generator = libcellml::Generator::create(); + + EXPECT_EQ_FILE_CONTENTS("generator/algebraic_eqn_computed_var_on_rhs/model.c", generator->implementationCode(analyserModel)); + EXPECT_EQ(2, analyserModel.use_count()); + + EXPECT_EQ_FILE_CONTENTS("generator/algebraic_eqn_computed_var_on_rhs/model.h", generator->interfaceCode(analyserModel)); + EXPECT_EQ(2, analyserModel.use_count()); +}