From facb3d606aae8514acc1164bf6cd27b5b821dd20 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Mon, 16 Aug 2021 14:48:13 +0200
Subject: [PATCH] SCRIPT: Add the resolv module method (names -> modules in
 module declaration)

---
 src/Lib/Script/CRTPLuaScriptObject.cc | 18 +++++++++++++++++-
 src/Lib/Script/CRTPLuaScriptObject.hh |  3 +++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/Lib/Script/CRTPLuaScriptObject.cc b/src/Lib/Script/CRTPLuaScriptObject.cc
index 49889be7..d7dd9ac5 100644
--- a/src/Lib/Script/CRTPLuaScriptObject.cc
+++ b/src/Lib/Script/CRTPLuaScriptObject.cc
@@ -17,6 +17,21 @@ FreeFunctions::print(lua_State *L) noexcept
 
 // ModuleDeclaration
 
+bool
+ModuleDeclaration::resolvModules(LuaContext *const context) noexcept
+{
+    for (const auto &str : importNames) {
+        const ModuleDeclaration *const mod = context->getModule(str);
+        if (mod) {
+            importedModules.emplace_back(mod);
+        } else {
+            context->setFailed("Failed to find needed module: " + str);
+            return false;
+        }
+    }
+    return true;
+}
+
 int
 ModuleDeclaration::setName(lua_State *const L) noexcept
 {
@@ -184,7 +199,8 @@ ModuleDeclaration::validateModule(lua_State *const L) const noexcept
             for (const auto &str : unusedImports)
                 listStrImports += " " + str;
 
-            context->setFailed("There are imported modules that are used without being declared:" +
+            context->setFailed("There are imported modules that are "
+                               "used without being declared:" +
                                listStrImports + "\n");
             return false;
         }
diff --git a/src/Lib/Script/CRTPLuaScriptObject.hh b/src/Lib/Script/CRTPLuaScriptObject.hh
index 5f717f7b..1c09bc20 100644
--- a/src/Lib/Script/CRTPLuaScriptObject.hh
+++ b/src/Lib/Script/CRTPLuaScriptObject.hh
@@ -250,6 +250,7 @@ script_class (ModuleDeclaration) {
 
     // Will be resolved later
     std::vector<std::string> importNames{};
+    std::vector<const ModuleDeclaration *> importedModules{};
 
     bool validateModule(lua_State *const) const noexcept;
 
@@ -262,6 +263,8 @@ public:
     std::vector<OptionDeclaration *> moduleOptions{};
     std::vector<FunctionDeclaration *> moduleFunctions{};
     std::vector<JobDeclaration *> moduleJobs{};
+
+    bool resolvModules(LuaContext *const) noexcept;
 };
 
 // Holds all the free functions (well, not really free functions here...)
-- 
GitLab