From 806aa12402ff94889b3f7101986c86873684762c Mon Sep 17 00:00:00 2001
From: Iustin Pop <iustin@google.com>
Date: Wed, 22 Aug 2012 17:57:33 +0200
Subject: [PATCH] Enhance convert-constants list generation

While looking at the hypervisor types in Constants.hs, I saw that the
'hyperTypes' list is using strings instead of names. This is due to
the fact that we require the entire elements in the list to be
identified (homogeneous lists), but the string "xen-pvm" is declared
by both 'defaultEnabledHypervisor' and 'htXenPvm'.

We can improve convert-constants by adding a list of names that we
know (statically) don't declare, but instead reuse values. Unless we
have an ADT parser, this is the best we can do, I think.

Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
---
 autotools/convert-constants | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/autotools/convert-constants b/autotools/convert-constants
index d3d8a5fbb..043d32ce8 100755
--- a/autotools/convert-constants
+++ b/autotools/convert-constants
@@ -39,6 +39,12 @@ PRIVATE_RE = re.compile("^__.+__$")
 #: The type of regex objects
 RE_TYPE = type(CONSTANT_RE)
 
+#: Keys which do not declare a value (manually maintained). By adding
+# values here, we can make more lists use the actual names; otherwise
+# we'll have (e.g.) both DEFAULT_ENABLED_HYPERVISOR and HT_XEN_PVM
+# declare the same value, and thus the list of valid hypervisors will
+# have strings instead of easily looked-up names.
+IGNORED_DECL_NAMES = ["DEFAULT_ENABLED_HYPERVISOR"]
 
 def NameRules(name):
   """Converts the upper-cased Python name to Haskell camelCase.
@@ -97,7 +103,8 @@ def IdentifyOrigin(all_items, value):
   @param value: the value for which we try to find an origin
 
   """
-  found = [name for (name, v) in all_items.items() if v is value]
+  found = [name for (name, v) in all_items.items()
+           if v is value and name not in IGNORED_DECL_NAMES]
   if len(found) == 1:
     return found[0]
   else:
-- 
GitLab