From a9c2643ad44ad7ebbcb9ace69d099a003cdba51f Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Thu, 6 Mar 2008 14:20:21 +0000 Subject: [PATCH] Fixed some horribly exponential speculative recursion in one of the passes --- backends/BackendPasses.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backends/BackendPasses.hs b/backends/BackendPasses.hs index 30f7a6e..0c89896 100644 --- a/backends/BackendPasses.hs +++ b/backends/BackendPasses.hs @@ -117,17 +117,21 @@ declareSizesArray = doGeneric `ext1M` doStructured doStructured :: Data a => A.Structured a -> PassM (A.Structured a) doStructured str@(A.Spec m sp@(A.Specification m' n spec) s) = do t <- typeOfSpec spec - s' <- doStructured s case (spec,t) of (_,Just (A.Array ds _)) -> if elem A.UnknownDimension ds then do let sizeSpec = A.Specification m' (append_sizes n) (A.Declaration m' (A.Array [A.Dimension $ length ds] A.Int) Nothing) + s' <- doStructured s return (A.Spec m sp $ A.Spec m sizeSpec $ s') -- TODO fix this else do let n_sizes = append_sizes n sizeSpecType = makeStaticSizeSpec m' n_sizes ds sizeSpec = A.Specification m' n_sizes sizeSpecType defineSizesName m' n_sizes sizeSpecType + s' <- doStructured s return (A.Spec m sp $ A.Spec m sizeSpec $ s') - (A.RecordType m _ fs, _) -> liftM (A.Spec m sp) $ foldM (declareFieldSizes (A.nameName n) m) s' fs + (A.RecordType m _ fs, _) -> + do s' <- doStructured s + fieldDeclarations <- foldM (declareFieldSizes (A.nameName n) m) s' fs + return $ A.Spec m sp fieldDeclarations _ -> doGeneric str doStructured s = doGeneric s