ext-core: use shorter names when combining modules
authorTim Chevalier <chevalier@alum.wellesley.edu>
Mon, 5 Jan 2009 19:26:45 +0000 (19:26 +0000)
committerTim Chevalier <chevalier@alum.wellesley.edu>
Mon, 5 Jan 2009 19:26:45 +0000 (19:26 +0000)
utils/ext-core/Language/Core/CoreUtils.hs
utils/ext-core/Language/Core/Merge.hs

index afe4039..2967cd6 100644 (file)
@@ -82,3 +82,14 @@ tdefNames = concatMap doOne
         doOne (Newtype qtc qtc1 _ _) = [qtc, qtc1]
         doCdef (Constr qdc _ _) = [qdc]
 
+tdefDcons :: [Tdef] -> [Qual Var]
+tdefDcons = concatMap doOne
+  where doOne (Data _ _ cds) = concatMap doCdef cds
+        doOne _ = []
+        doCdef (Constr qdc _ _) = [qdc]
+
+tdefTcons :: [Tdef] -> [Qual Var]
+tdefTcons = concatMap doOne
+  where doOne (Data qtc _ _) = [qtc]
+        doOne (Newtype qtc qtc1 _ _) = [qtc, qtc1]
+
index a71146c..0907aa7 100644 (file)
@@ -2,7 +2,7 @@
    This module combines multiple External Core modules into
    a single module, including both datatype and value definitions. 
 -}
-module Language.Core.Merge(merge) where
+module Language.Core.Merge(merge,uniqueNamesIn,nonUniqueNamesIn) where
 
 import Language.Core.Core
 import Language.Core.CoreUtils
@@ -63,10 +63,18 @@ merge subst ms =
 -}
 uniqueNamesIn :: [Vdef] -> [Tdef] -> [Qual Var]
 uniqueNamesIn topBinds allTdefs = res
+  where vars  = vdefNamesQ topBinds
+        dcons = tdefDcons allTdefs
+        tcons = tdefTcons allTdefs
+        uniqueVars  = vars \\ dupsUnqual vars
+        uniqueDcons = dcons \\ dupsUnqual dcons
+        uniqueTcons = tcons \\ dupsUnqual tcons
+        res = uniqueVars ++ uniqueDcons ++ uniqueTcons
+
+nonUniqueNamesIn :: [Vdef] -> [Tdef] -> [Qual Var]
+nonUniqueNamesIn topBinds allTdefs = dupsUnqual allNames
   where allNames = vdefNamesQ topBinds ++ tdefNames allTdefs
-        dups     = dupsUnqual allNames
-        res      = allNames \\ dups
-
+        
 -- This takes each top-level name of the form Foo.Bar.blah and
 -- renames it to FoozuBarzublah (note we *don't* make it exported!
 -- This is so we know which names were in the original program and