From b8971275bb9467b1a96ba2f9d87376e49c1c577e Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Tue, 23 Apr 2024 22:05:04 +0200
Subject: [PATCH] Check that CheckpointResumeRepository is built for CP/R
 registration

---
 src/language/ast/ASTModulesImporter.cpp           | 5 ++++-
 src/language/ast/CMakeLists.txt                   | 7 ++++++-
 src/language/modules/ModuleRepository.cpp         | 5 ++++-
 src/language/utils/CheckpointResumeRepository.hpp | 6 ++++++
 4 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/language/ast/ASTModulesImporter.cpp b/src/language/ast/ASTModulesImporter.cpp
index 7b9670160..4cae0a921 100644
--- a/src/language/ast/ASTModulesImporter.cpp
+++ b/src/language/ast/ASTModulesImporter.cpp
@@ -1,6 +1,7 @@
 #include <language/ast/ASTModulesImporter.hpp>
 
 #include <language/PEGGrammar.hpp>
+#include <language/utils/CheckpointResumeRepository.hpp>
 #include <language/utils/OperatorRepository.hpp>
 #include <utils/ConsoleManager.hpp>
 
@@ -27,7 +28,9 @@ ASTModulesImporter::_importModule(ASTNode& import_node)
 
   m_module_repository.populateSymbolTable(module_name_node, m_symbol_table);
   m_module_repository.registerOperators(module_name);
-  m_module_repository.registerCheckpointResume(module_name);
+  if (CheckpointResumeRepository::isCreated()) {
+    m_module_repository.registerCheckpointResume(module_name);
+  }
 }
 
 void
diff --git a/src/language/ast/CMakeLists.txt b/src/language/ast/CMakeLists.txt
index cd2f89636..148560658 100644
--- a/src/language/ast/CMakeLists.txt
+++ b/src/language/ast/CMakeLists.txt
@@ -23,7 +23,12 @@ add_library(PugsLanguageAST
   ASTNodeUnaryOperatorExpressionBuilder.cpp
   ASTSymbolInitializationChecker.cpp
   ASTSymbolTableBuilder.cpp
-  )
+)
+
+target_link_libraries(
+  PugsLanguageAST
+  ${HIGHFIVE_TARGET}
+)
 
 
 add_dependencies(PugsLanguageAST
diff --git a/src/language/modules/ModuleRepository.cpp b/src/language/modules/ModuleRepository.cpp
index 53404f533..59689fb6f 100644
--- a/src/language/modules/ModuleRepository.cpp
+++ b/src/language/modules/ModuleRepository.cpp
@@ -11,6 +11,7 @@
 #include <language/modules/WriterModule.hpp>
 #include <language/utils/BasicAffectationRegistrerFor.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
+#include <language/utils/CheckpointResumeRepository.hpp>
 #include <language/utils/ParseError.hpp>
 #include <language/utils/SymbolTable.hpp>
 #include <language/utils/TypeDescriptor.hpp>
@@ -164,7 +165,9 @@ ModuleRepository::populateMandatoryData(const ASTNode& root_node, SymbolTable& s
 
       this->_populateSymbolTable(root_node, module_name, i_module->getNameValueMap(), symbol_table);
 
-      i_module->registerCheckpointResume();
+      if (CheckpointResumeRepository::isCreated()) {
+        i_module->registerCheckpointResume();
+      }
 
       for (const auto& [symbol_name, embedded] : i_module->getNameTypeMap()) {
         BasicAffectationRegisterFor<EmbeddedData>(ASTNodeDataType::build<ASTNodeDataType::type_id_t>(symbol_name));
diff --git a/src/language/utils/CheckpointResumeRepository.hpp b/src/language/utils/CheckpointResumeRepository.hpp
index 73419282d..7aef97e79 100644
--- a/src/language/utils/CheckpointResumeRepository.hpp
+++ b/src/language/utils/CheckpointResumeRepository.hpp
@@ -63,6 +63,12 @@ class CheckpointResumeRepository
 
   static void create();
 
+  static bool
+  isCreated()
+  {
+    return m_instance != nullptr;
+  }
+
   PUGS_INLINE
   static CheckpointResumeRepository&
   instance()
-- 
GitLab