[check for unacconted for free variables when lint checking
John Meacham <john@repetae.net>**20060321011444] hunk ./Main.hs 33
-import E.Subst
hunk ./Main.hs 53
-import Util.Gen
hunk ./Main.hs 199
+            progExternalNames = Set.fromList [ tvrIdent n | (n,_) <- Map.elems $ hoEs ho ],
hunk ./Main.hs 242
+    lintCheckProgram prog
+
hunk ./Main.hs 333
+    lintCheckProgram prog
hunk ./Main.hs 352
+    lintCheckProgram prog
hunk ./Main.hs 718
-                case optKeepGoing options of
-                    True -> return e'
-                    False -> putErrDie "Type Error in E"
+                maybeDie
+                return e'
hunk ./Main.hs 727
-        case optKeepGoing options of
-            True -> return Unknown
-            False -> putErrDie "Type Error in E"
+        maybeDie
+        return Unknown
hunk ./Main.hs 731
+maybeDie = case optKeepGoing options of
+    True -> return ()
+    False -> putErrDie "Internal Error"
+
hunk ./Main.hs 739
-        case optKeepGoing options of
-            True -> return ()
-            False -> putErrDie "Type Error in E"
+        maybeDie
hunk ./Main.hs 745
-    when (hasRepeatUnder fst (programDs prog)) $ fail "program has repeated toplevel definitions"
+    when (hasRepeatUnder fst (programDs prog)) $ do
+        putErrLn "program has repeated toplevel definitions"
+        maybeDie
hunk ./Main.hs 749
+    let ids = progExternalNames prog `mappend` Set.fromList (map tvrIdent $ fsts (programDs prog))
+        fvs = freeVars $ snds $ programDs prog :: Set.Set TVr
+        unaccounted = Set.filter (not . (`Set.member` ids) . tvrIdent) fvs
+    unless (Set.null unaccounted) $ do
+        putErrLn ("Unaccounted for free variables: " ++ render (pprint $ Set.toList $ unaccounted))
+        maybeDie