@@ -79,6 +79,8 @@ small n t = termsize n t < 50
79namesUsed :: SC -> [Name]
79namesUsed :: SC -> [Name]
80namesUsed sc = nub $ nu' [] sc where
80namesUsed sc = nub $ nu' [] sc where
81 nu' ps (Case n alts) = nub (concatMap (nua ps) alts) \\ [n]
81 nu' ps (Case n alts) = nub (concatMap (nua ps) alts) \\ [n]
82+ nu' ps (ProjCase t alts) = nub $ (nut ps t ++
83+ (concatMap (nua ps) alts))
82 nu' ps (STerm t) = nub $ nut ps t
84 nu' ps (STerm t) = nub $ nut ps t
83 nu' ps _ = []
85 nu' ps _ = []
@@ -89,6 +91,7 @@ namesUsed sc = nub $ nu' [] sc where
89 nut ps (P _ n _) | n `elem` ps = []
91 nut ps (P _ n _) | n `elem` ps = []
90 | otherwise = [n]
92 | otherwise = [n]
91 nut ps (App f a) = nut ps f ++ nut ps a
93 nut ps (App f a) = nut ps f ++ nut ps a
94+ nut ps (Proj t _) = nut ps t
92 nut ps (Bind n (Let t v) sc) = nut ps v ++ nut (n:ps) sc
95 nut ps (Bind n (Let t v) sc) = nut ps v ++ nut (n:ps) sc
93 nut ps (Bind n b sc) = nut (n:ps) sc
96 nut ps (Bind n b sc) = nut (n:ps) sc
94 nut ps _ = []
97 nut ps _ = []
@@ -100,6 +103,7 @@ namesUsed sc = nub $ nu' [] sc where
100findCalls :: SC -> [Name] -> [(Name, [[Name]])]
103findCalls :: SC -> [Name] -> [(Name, [[Name]])]
101findCalls sc topargs = nub $ nu' topargs sc where
104findCalls sc topargs = nub $ nu' topargs sc where
102 nu' ps (Case n alts) = nub (concatMap (nua (n : ps)) alts)
105 nu' ps (Case n alts) = nub (concatMap (nua (n : ps)) alts)
106+ nu' ps (ProjCase t alts) = nub (nut ps t ++ concatMap (nua ps) alts)
103 nu' ps (STerm t) = nub $ nut ps t
107 nu' ps (STerm t) = nub $ nut ps t
104 nu' ps _ = []
108 nu' ps _ = []
@@ -115,6 +119,7 @@ findCalls sc topargs = nub $ nu' topargs sc where
115 else [(n, map argNames args)] ++ concatMap (nut ps) args
119 else [(n, map argNames args)] ++ concatMap (nut ps) args
116 | otherwise = nut ps f ++ nut ps a
120 | otherwise = nut ps f ++ nut ps a
117 nut ps (Bind n (Let t v) sc) = nut ps v ++ nut (n:ps) sc
121 nut ps (Bind n (Let t v) sc) = nut ps v ++ nut (n:ps) sc
122+ nut ps (Proj t _) = nut ps t
118 nut ps (Bind n b sc) = nut (n:ps) sc
123 nut ps (Bind n b sc) = nut (n:ps) sc
119 nut ps _ = []
124 nut ps _ = []