@@ -383,6 +383,7 @@ checkDeclTotality :: (FC, Name) -> Idris Totality
383checkDeclTotality (fc, n)
383checkDeclTotality (fc, n)
384 = do logLvl 2 $ "Checking " ++ show n ++ " for totality"
384 = do logLvl 2 $ "Checking " ++ show n ++ " for totality"
385 buildSCG (fc, n)
385 buildSCG (fc, n)
386+ logLvl 2 $ "Built SCG"
386 checkTotality [] fc n
387 checkTotality [] fc n
388-- Calculate the size change graph for this definition
389-- Calculate the size change graph for this definition
@@ -411,8 +412,9 @@ buildSCG (_, n) = do
411 x -> error $ "buildSCG: " ++ show (n, x)
412 x -> error $ "buildSCG: " ++ show (n, x)
413buildSCG' :: IState -> SC -> [Name] -> [SCGEntry]
414buildSCG' :: IState -> SC -> [Name] -> [SCGEntry]
415+buildSCG' ist sc args = -- trace ("Building SCG for " ++ show sc) $
414−buildSCG' ist sc args = nub $ scg sc (zip args args)
416+ nub $ scg sc (zip args args)
415− (zip args (zip args (repeat Same)))
417+ (zip args (zip args (repeat Same)))
417 scg :: SC -> [(Name, Name)] -> -- local var, originating top level var
419 scg :: SC -> [(Name, Name)] -> -- local var, originating top level var
418 [(Name, (Name, SizeChange))] -> -- orig to new, and relationship
420 [(Name, (Name, SizeChange))] -> -- orig to new, and relationship
@@ -448,7 +450,7 @@ buildSCG' ist sc args = nub $ scg sc (zip args args)
448 = let arel = argRels n
450 = let arel = argRels n
449 szs' = zipWith (\arg (_,t) -> (arg, (x, t))) args arel
451 szs' = zipWith (\arg (_,t) -> (arg, (x, t))) args arel
451− vars' = zip args (repeat tvar) ++ vars in
453+ vars' = nub (zip args (repeat tvar) ++ vars) in
452 scg sc vars' szs'
454 scg sc vars' szs'
453 | otherwise = scg sc vars szs
455 | otherwise = scg sc vars szs
454 scgAlt x vars szs (ConstCase _ sc) = scg sc vars szs
456 scgAlt x vars szs (ConstCase _ sc) = scg sc vars szs
@@ -461,13 +463,13 @@ buildSCG' ist sc args = nub $ scg sc (zip args args)
461 = let rest = concatMap (\x -> scgTerm x vars szs) args in
463 = let rest = concatMap (\x -> scgTerm x vars szs) args in
462 case lookup fn vars of
464 case lookup fn vars of
463 Just _ -> rest
465 Just _ -> rest
464− Nothing -> (fn, map (mkChange szs) args) : rest
466+ Nothing -> nub $ (fn, map (mkChange szs) args) : rest
465 scgTerm (App f a) vars szs
467 scgTerm (App f a) vars szs
466 = scgTerm f vars szs ++ scgTerm a vars szs
468 = scgTerm f vars szs ++ scgTerm a vars szs
467 scgTerm (Bind n (Let t v) e) vars szs
469 scgTerm (Bind n (Let t v) e) vars szs
468 = scgTerm v vars szs ++ scgTerm e vars szs
470 = scgTerm v vars szs ++ scgTerm e vars szs
469 scgTerm (Bind n _ e) vars szs
471 scgTerm (Bind n _ e) vars szs
470− = scgTerm e ((n, n) : vars) szs
472+ = scgTerm e (nub ((n, n) : vars)) szs
471 scgTerm (P _ fn _) vars szs
473 scgTerm (P _ fn _) vars szs
472 = case lookup fn vars of
474 = case lookup fn vars of
473 Just _ -> []
475 Just _ -> []