shithub: MicroHs

Download patch

ref: ddfc8dcaea7f7c05a81fdf1dc699150165475826
parent: f48a656bc634685e22dc8a67d8c359769c4a3020
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Oct 13 08:14:00 EDT 2024

Simplify creating initial TCState

--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -163,8 +163,8 @@
 --  trace (unlines $ map (showTModuleExps . snd) aimps) $
   let
     imps = map filterImports aimps
-    (fs, ts, ss, cs, is, vs, as) = mkTables globs imps
-  in case tcRun (tcDefs impt defs) (initTC mn fs ts ss cs is vs as) of
+    tc = mkTCState mn globs imps
+  in case tcRun (tcDefs impt defs) tc of
        (tds, tcs) ->
          let
            thisMdl = (mn, mkTModule impt tds tcs)
@@ -329,9 +329,8 @@
                  _       -> impossible
   in  map (\ qi -> ValueExport (unQualIdent qi) (val qi)) qis
 
-mkTables :: forall a . GlobTables -> [(ImportSpec, TModule a)] ->
-            (FixTable, TypeTable, SynTable, ClassTable, InstTable, ValueTable, AssocTable)
-mkTables globs mdls =
+mkTCState :: IdentModule -> GlobTables -> [(ImportSpec, TModule a)] -> TCState
+mkTCState mdlName globs mdls =
   let
     allValues :: ValueTable
     allValues =
@@ -344,7 +343,7 @@
           let m = fromMaybe mn mas in
           [ (v, [e]) | ValueExport i e    <- ves,                        let { v = qualIdent    m i } ] ++
           [ (v, [e]) | TypeExport  _ _ cs <- tes, ValueExport i e <- cs, let { v = qualIdentD e m i } ] ++
-          [ (v, [Entry (EVar v) t]) | (i, ClassInfo _ _ t _ _) <- M.toList allClasses, let { v = mkClassConstructor i } ]
+          [ (v, [Entry (EVar v) t]) | (i, ClassInfo _ _ t _ _) <- M.toList (gClassTable globs), let { v = mkClassConstructor i } ]
         -- Default methods are always entered with their qualified original name.
         qualIdentD (Entry e _) m i | not (isDefaultMethodId i) = qualIdent m i
                                    | otherwise = 
@@ -372,13 +371,20 @@
             m = fromMaybe mn mas
           in  [ (qualIdent m i, [qualIdent m a | ValueExport a _ <- cs]) | TypeExport i _ cs <- tes ]
       in  M.fromList $ concatMap assocs mdls
-    allSyns :: SynTable
-    allSyns = gSynTable globs
-    allClasses :: ClassTable
-    allClasses = gClassTable globs
-    allInsts :: InstTable
-    allInsts = gInstInfo globs
-  in  (allFixes, allTypes, allSyns, allClasses, allInsts, allValues, allAssocs)
+  in TC { moduleName = mdlName,
+          unique = 1,
+          fixTable = addPrimFixs allFixes,
+          typeTable = foldr (uncurry stInsertGlbU) allTypes primTypes,
+          synTable = gSynTable globs,
+          valueTable = foldr (uncurry stInsertGlbU) allValues primValues,
+          assocTable = allAssocs,
+          uvarSubst = IM.empty,
+          tcMode = TCExpr,
+          classTable = gClassTable globs,
+          ctxTables = (gInstInfo globs, [], [], []),
+          constraints = [],
+          defaults = stdDefaults
+        }
 
 mergeInstInfo :: InstInfo -> InstInfo -> InstInfo
 mergeInstInfo (InstInfo m1 l1 fds) (InstInfo m2 l2 _) =
@@ -511,17 +517,6 @@
 addArgDict i c = do
   ads <- gets argDicts
   putArgDicts ((i,c) : ads)
-
-initTC :: IdentModule -> FixTable -> TypeTable -> SynTable -> ClassTable -> InstTable -> ValueTable -> AssocTable -> TCState
-initTC mn fs ts ss cs is vs as =
---  trace ("**** initTC " ++ showIdent mn ++ ": " ++ showListS (showPairS showIdent showEType) (M.toList ss)) $
-  let
-    xts = foldr (uncurry stInsertGlbU) ts primTypes
-    xvs = foldr (uncurry stInsertGlbU) vs primValues
-  in TC { moduleName = mn, unique = 1, fixTable = addPrimFixs fs, typeTable = xts,
-          synTable = ss, valueTable = xvs, assocTable = as, uvarSubst = IM.empty,
-          tcMode = TCExpr, classTable = cs, ctxTables = (is,[],[],[]), constraints = [],
-          defaults = stdDefaults }
 
 stdDefaults :: [EType]
 stdDefaults = [EVar identInteger, EVar identFloatW, EApp (EVar identList) (EVar identChar)]
--