From b9fa78e2a0501c715e001cc1353d2c0c2d29c968 Mon Sep 17 00:00:00 2001
From: Collin Funk <collin.funk1@gmail.com>
Date: Fri, 19 Apr 2024 12:00:33 -0700
Subject: [PATCH] gnulib-tool.py: Make use of GLModule's __hash__ method.

* pygnulib/GLModuleSystem.py (GLModuleTable.addUnconditional)
(GLModuleTable.isConditional): Use the GLModule object instead of the
module name directly.
(GLModuleTable.addConditional, GLModuleTable.getCondition): Likewise.
Use a tuple of two GLModule objects as a key for the conditionals
dictionary.
---
 ChangeLog                  | 10 ++++++++++
 pygnulib/GLModuleSystem.py | 18 ++++++++----------
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d907a52c53..65770c9c33 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2024-04-19  Collin Funk  <collin.funk1@gmail.com>
+
+	gnulib-tool.py: Make use of GLModule's __hash__ method.
+	* pygnulib/GLModuleSystem.py (GLModuleTable.addUnconditional)
+	(GLModuleTable.isConditional): Use the GLModule object instead of the
+	module name directly.
+	(GLModuleTable.addConditional, GLModuleTable.getCondition): Likewise.
+	Use a tuple of two GLModule objects as a key for the conditionals
+	dictionary.
+
 2024-04-19  Collin Funk  <collin.funk1@gmail.com>
 
 	gnulib-tool.py: Simplify data structures for dependencies.
diff --git a/pygnulib/GLModuleSystem.py b/pygnulib/GLModuleSystem.py
index ce1fad110c..6d5e874375 100644
--- a/pygnulib/GLModuleSystem.py
+++ b/pygnulib/GLModuleSystem.py
@@ -762,27 +762,26 @@ class GLModuleTable:
         if not (type(condition) is str or condition == True):
             raise TypeError('condition must be a string or True, not %s'
                             % type(condition).__name__)
-        if str(module) not in self.unconditionals:
+        if module not in self.unconditionals:
             # No unconditional dependency to the given module is known at this point.
-            self.dependers[str(module)].add(str(parent))
-            key = '%s---%s' % (str(parent), str(module))
-            self.conditionals[key] = condition
+            self.dependers[module].add(parent)
+            self.conditionals[(parent, module)] = condition
 
     def addUnconditional(self, module: GLModule) -> None:
         '''Add module as unconditional dependency.'''
         if type(module) is not GLModule:
             raise TypeError('module must be a GLModule, not %s'
                             % type(module).__name__)
-        self.unconditionals.add(str(module))
-        if str(module) in self.dependers:
-            self.dependers.pop(str(module))
+        self.unconditionals.add(module)
+        if module in self.dependers:
+            self.dependers.pop(module)
 
     def isConditional(self, module: GLModule) -> bool:
         '''Check whether module is unconditional.'''
         if type(module) is not GLModule:
             raise TypeError('module must be a GLModule, not %s'
                             % type(module).__name__)
-        result = str(module) in self.dependers
+        result = module in self.dependers
         return result
 
     def getCondition(self, parent: GLModule, module: GLModule) -> str | bool | None:
@@ -794,8 +793,7 @@ class GLModuleTable:
         if type(module) is not GLModule:
             raise TypeError('module must be a GLModule, not %s'
                             % type(module).__name__)
-        key = '%s---%s' % (str(parent), str(module))
-        result = self.conditionals.get(key, None)
+        result = self.conditionals.get((parent, module), None)
         return result
 
     def transitive_closure(self, modules: list[GLModule]) -> list[GLModule]:
-- 
2.39.5