From 38c409d3785ba8544092d686a9f490bdb657a68e Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Thu, 27 Sep 2007 13:13:46 +0000 Subject: [PATCH] Added the -fwarn-unused-imports compiler option to warn about unused imports, and then set about pruning and ordering (mostly in my code) the import lists for all the modules --- Main.hs | 4 +--- Makefile | 1 + TestMain.hs | 13 +++++++------ backends/AnalyseAsm.hs | 2 -- backends/GenerateC.hs | 5 ++--- backends/GenerateCPPCSP.hs | 14 ++++---------- backends/TLP.hs | 2 -- common/CommonTest.hs | 11 ++++++----- common/CompState.hs | 4 ++-- common/Errors.hs | 1 - common/EvalConstants.hs | 5 ----- common/EvalLiterals.hs | 1 - common/Metadata.hs | 2 -- common/ShowCode.hs | 1 + common/TestUtil.hs | 24 ++++++++++++------------ common/TreeUtil.hs | 9 +++++---- common/Types.hs | 1 - frontends/LexOccam.x | 3 ++- frontends/LexRain.x | 5 ++--- frontends/ParseOccam.hs | 4 +--- frontends/ParseRain.hs | 21 +++------------------ frontends/ParseRainTest.hs | 19 ++++++++++--------- frontends/ParseUtils.hs | 1 + frontends/RainPasses.hs | 11 ++++++----- frontends/RainPassesTest.hs | 21 +++++++++------------ frontends/RainTypes.hs | 13 +++++++------ frontends/RainTypesTest.hs | 19 ++++++++++--------- frontends/StructureOccam.hs | 2 -- transformations/PassTest.hs | 20 ++++++++------------ transformations/SimplifyExprs.hs | 3 +-- transformations/SimplifyProcs.hs | 2 -- transformations/Unnest.hs | 2 +- transformations/UsageCheck.hs | 4 ++-- transformations/UsageCheckTest.hs | 11 +++++------ 34 files changed, 109 insertions(+), 152 deletions(-) diff --git a/Main.hs b/Main.hs index 5acc5e5..51d7632 100644 --- a/Main.hs +++ b/Main.hs @@ -19,7 +19,6 @@ with this program. If not, see . -- | Driver for the compiler. module Main (main) where -import Control.Monad import Control.Monad.Error import Control.Monad.State import List @@ -33,10 +32,9 @@ import Errors import GenerateC import GenerateCPPCSP import ParseOccam +import ParseRain import Pass import PreprocessOccam -import PrettyShow -import ParseRain import RainPasses import SimplifyExprs import SimplifyProcs diff --git a/Makefile b/Makefile index 350ca78..b2553e6 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ ghc_opts = \ -fglasgow-exts \ -fallow-undecidable-instances \ -fwarn-unused-binds \ + -fwarn-unused-imports \ -icommon -itransformations -ifrontends -ibackends \ $(profile_opts) diff --git a/TestMain.hs b/TestMain.hs index 6d6fdac..903e7c0 100644 --- a/TestMain.hs +++ b/TestMain.hs @@ -31,24 +31,25 @@ with this program. If not, see . -- * "UsageCheckTest" module TestMain () where +import Test.HUnit + +import qualified BackendPassesTest (tests) +import qualified CommonTest (tests) import qualified ParseRainTest (tests) +import qualified PassTest (tests) import qualified RainPassesTest (tests) import qualified RainTypesTest (tests) import qualified UsageCheckTest (tests) -import qualified PassTest (tests) -import qualified CommonTest (tests) -import qualified BackendPassesTest (tests) -import Test.HUnit main :: IO () main = do runTestTT $ TestList [ - PassTest.tests + BackendPassesTest.tests ,CommonTest.tests ,ParseRainTest.tests + ,PassTest.tests ,RainPassesTest.tests ,RainTypesTest.tests ,UsageCheckTest.tests - ,BackendPassesTest.tests ] return () diff --git a/backends/AnalyseAsm.hs b/backends/AnalyseAsm.hs index e01c32c..0c0205c 100644 --- a/backends/AnalyseAsm.hs +++ b/backends/AnalyseAsm.hs @@ -31,12 +31,10 @@ import qualified Data.Map as Map import Data.Maybe import qualified Data.Set as Set import Numeric (readDec) -import System import Text.Printf import Text.Regex import CompState -import Errors import Pass import PrettyShow diff --git a/backends/GenerateC.hs b/backends/GenerateC.hs index 638c43b..9f66721 100644 --- a/backends/GenerateC.hs +++ b/backends/GenerateC.hs @@ -24,20 +24,19 @@ import Data.Generics import Data.List import Data.Maybe import qualified Data.Set as Set -import Control.Monad.Writer import Control.Monad.Error import Control.Monad.State -import Numeric +import Control.Monad.Writer import Text.Printf import qualified AST as A import BackendPasses import CompState +import Errors import EvalConstants import EvalLiterals import Metadata import Pass -import Errors import ShowCode import TLP import Types diff --git a/backends/GenerateCPPCSP.hs b/backends/GenerateCPPCSP.hs index f4546e8..0ff9482 100644 --- a/backends/GenerateCPPCSP.hs +++ b/backends/GenerateCPPCSP.hs @@ -70,29 +70,23 @@ For channels of direction 'A.DirInput' or 'A.DirOutput' I actually pass the Chan -} module GenerateCPPCSP (generateCPPCSP) where +import Control.Monad.Writer import Data.Char +import Data.Generics import Data.List import Data.Maybe -import Data.Generics -import Control.Monad.Writer -import Control.Monad.Error -import Control.Monad.State -import Numeric -import Text.Printf import qualified AST as A import CompState -import EvalConstants -import EvalLiterals +import Errors +import GenerateC import Metadata import Pass -import Errors import ShowCode import TLP import Types import Utils -import GenerateC --{{{ generator ops -- | Operations for the C++CSP backend. diff --git a/backends/TLP.hs b/backends/TLP.hs index 3552752..e6122d9 100644 --- a/backends/TLP.hs +++ b/backends/TLP.hs @@ -19,7 +19,6 @@ with this program. If not, see . -- | Top-level process support. module TLP where -import Control.Monad.Error import Control.Monad.State import Data.Generics import Data.List @@ -28,7 +27,6 @@ import Data.Maybe import qualified AST as A import CompState import Errors -import Metadata import Types data TLPChannel = TLPIn | TLPOut | TLPError diff --git a/common/CommonTest.hs b/common/CommonTest.hs index da67c33..4b3b3ac 100644 --- a/common/CommonTest.hs +++ b/common/CommonTest.hs @@ -18,12 +18,13 @@ with this program. If not, see . module CommonTest (tests) where -import Test.HUnit hiding (State) -import qualified AST as A -import Types -import TreeUtil -import Metadata import Data.Generics +import Test.HUnit hiding (State) + +import qualified AST as A +import Metadata +import TreeUtil +import Types -- | Tests the isSafeConversion function: testIsSafeConversion :: Test diff --git a/common/CompState.hs b/common/CompState.hs index b744e25..b8052e4 100644 --- a/common/CompState.hs +++ b/common/CompState.hs @@ -19,13 +19,13 @@ with this program. If not, see . -- | Compiler state. module CompState where +import Control.Monad.Error +import Control.Monad.State import Data.Generics import Data.Map (Map) import qualified Data.Map as Map import Data.Set (Set) import qualified Data.Set as Set -import Control.Monad.Error -import Control.Monad.State import qualified AST as A import Errors diff --git a/common/Errors.hs b/common/Errors.hs index 3526e49..4804110 100644 --- a/common/Errors.hs +++ b/common/Errors.hs @@ -24,7 +24,6 @@ import Control.Monad.Trans import Data.List import System.IO.Error -import qualified AST as A import Metadata type ErrorReport = (Maybe Meta, String) diff --git a/common/EvalConstants.hs b/common/EvalConstants.hs index 3c51cc6..3dbe55c 100644 --- a/common/EvalConstants.hs +++ b/common/EvalConstants.hs @@ -20,15 +20,11 @@ with this program. If not, see . module EvalConstants (constantFold, isConstantName) where import Control.Monad.Error -import Control.Monad.Identity import Control.Monad.State import Data.Bits import Data.Char -import Data.Generics import Data.Int import Data.Maybe -import Data.Word -import Numeric import Text.Printf import qualified AST as A @@ -36,7 +32,6 @@ import CompState import Errors import EvalLiterals import Metadata -import Pass import ShowCode import Types diff --git a/common/EvalLiterals.hs b/common/EvalLiterals.hs index a69af0e..0708454 100644 --- a/common/EvalLiterals.hs +++ b/common/EvalLiterals.hs @@ -22,7 +22,6 @@ module EvalLiterals where import Control.Monad.Error import Control.Monad.Identity import Control.Monad.State -import Data.Bits import Data.Char import Data.Generics import Data.Int diff --git a/common/Metadata.hs b/common/Metadata.hs index 44823e5..e239a50 100644 --- a/common/Metadata.hs +++ b/common/Metadata.hs @@ -25,8 +25,6 @@ import Data.Generics import Text.Printf import Text.Read -import Utils - data Meta = Meta { metaFile :: Maybe String, metaLine :: Int, diff --git a/common/ShowCode.hs b/common/ShowCode.hs index 94463bd..0d00b4a 100644 --- a/common/ShowCode.hs +++ b/common/ShowCode.hs @@ -26,6 +26,7 @@ import Data.Generics import Data.List import Text.PrettyPrint.HughesPJ import Text.Regex + import qualified AST as A import CompState diff --git a/common/TestUtil.hs b/common/TestUtil.hs index 84e47f9..8348a27 100644 --- a/common/TestUtil.hs +++ b/common/TestUtil.hs @@ -38,21 +38,21 @@ If they are not equal, it shows them (using 'show') with the given message prefi module TestUtil where -import qualified AST as A -import Metadata (Meta,emptyMeta) -import Monad -import Test.HUnit hiding (State) -import Data.Generics -import Pattern -import TreeUtil -import Control.Monad.State import Control.Monad.Error -import Pass -import CompState -import PrettyShow -import Utils +import Control.Monad.State +import Data.Generics import qualified Data.Map as Map +import Test.HUnit hiding (State) + +import qualified AST as A +import CompState import Errors +import Metadata (Meta,emptyMeta) +import Pass +import Pattern +import PrettyShow +import TreeUtil +import Utils -- | An abbreviation for using 'emptyMeta'. TODO: This should really be removed (and all uses of it replaced with 'emptyMeta') for clarity. m :: Meta diff --git a/common/TreeUtil.hs b/common/TreeUtil.hs index 0b7bb1b..354f304 100644 --- a/common/TreeUtil.hs +++ b/common/TreeUtil.hs @@ -26,14 +26,15 @@ module TreeUtil ( con0, con1, con2, con3, con4, con5, con6, con7 ) where -import Test.HUnit hiding (State) -import qualified Data.Map as Map import Control.Monad.State import Data.Generics -import qualified PrettyShow as PS -import Data.Maybe import Data.List +import qualified Data.Map as Map +import Data.Maybe +import Test.HUnit hiding (State) + import Pattern +import qualified PrettyShow as PS type MatchErrors = [String] diff --git a/common/Types.hs b/common/Types.hs index 88cf19f..38e01e3 100644 --- a/common/Types.hs +++ b/common/Types.hs @@ -32,7 +32,6 @@ module Types ) where -import Control.Monad import Control.Monad.State import Data.Generics import qualified Data.Map as Map diff --git a/frontends/LexOccam.x b/frontends/LexOccam.x index 8e621a5..8e67e5f 100644 --- a/frontends/LexOccam.x +++ b/frontends/LexOccam.x @@ -1,4 +1,5 @@ -{ {- +{ {-# OPTIONS_GHC -fno-warn-unused-imports #-} +{- Tock: a compiler for parallel languages Copyright (C) 2007 University of Kent diff --git a/frontends/LexRain.x b/frontends/LexRain.x index 5ad5850..9d3b652 100644 --- a/frontends/LexRain.x +++ b/frontends/LexRain.x @@ -1,4 +1,5 @@ -{ {- +{ {-# OPTIONS_GHC -fno-warn-unused-imports #-} +{- Tock: a compiler for parallel languages Copyright (C) 2007 University of Kent @@ -21,9 +22,7 @@ module LexRain where import Data.Generics -import Errors import Metadata -import Pass } %wrapper "posn" diff --git a/frontends/ParseOccam.hs b/frontends/ParseOccam.hs index 20a4ecc..a300ee3 100644 --- a/frontends/ParseOccam.hs +++ b/frontends/ParseOccam.hs @@ -20,12 +20,10 @@ with this program. If not, see . module ParseOccam (parseOccamProgram) where import Control.Monad (liftM, when) -import Control.Monad.Error (runErrorT) -import Control.Monad.State (MonadState, StateT, execStateT, liftIO, modify, get, put) +import Control.Monad.State (MonadState, modify, get, put) import Data.List import qualified Data.Map as Map import Data.Maybe -import Debug.Trace import Text.ParserCombinators.Parsec import qualified AST as A diff --git a/frontends/ParseRain.hs b/frontends/ParseRain.hs index 2d26908..f35eeb7 100644 --- a/frontends/ParseRain.hs +++ b/frontends/ParseRain.hs @@ -18,36 +18,21 @@ with this program. If not, see . module ParseRain where -import qualified Text.ParserCombinators.Parsec.Token as P -import qualified LexRain as L - - - ---Chuck a whole load from Parse: -import Control.Monad (liftM, when) -import Control.Monad.Error (runErrorT) -import Control.Monad.State (MonadState, StateT, execStateT, liftIO, modify, get, put) +import Control.Monad (liftM) +import Control.Monad.State (MonadState, liftIO, get, put) import Data.List -import qualified Data.Map as Map import Data.Maybe -import Debug.Trace import qualified IO -import Numeric (readHex) import Text.ParserCombinators.Parsec -import Text.Regex import qualified AST as A import CompState import Errors -import EvalConstants -import EvalLiterals -import Intrinsics +import qualified LexRain as L import Metadata import ParseUtils import Pass -import Types -import Utils diff --git a/frontends/ParseRainTest.hs b/frontends/ParseRainTest.hs index e219690..8a01fe9 100644 --- a/frontends/ParseRainTest.hs +++ b/frontends/ParseRainTest.hs @@ -18,17 +18,18 @@ with this program. If not, see . module ParseRainTest (tests) where -import qualified ParseRain as RP -import qualified AST as A -import qualified LexRain as L -import Text.ParserCombinators.Parsec (runParser,eof) -import Test.HUnit -import Metadata (Meta,emptyMeta) import Prelude hiding (fail) -import TestUtil -import Pattern -import TreeUtil +import Test.HUnit +import Text.ParserCombinators.Parsec (runParser,eof) + +import qualified AST as A import CompState +import qualified LexRain as L +import Metadata (Meta,emptyMeta) +import qualified ParseRain as RP +import Pattern +import TestUtil +import TreeUtil data ParseTest a = Show a => ExpPass (String, RP.RainParser a , (a -> Assertion)) | ExpFail (String, RP.RainParser a) diff --git a/frontends/ParseUtils.hs b/frontends/ParseUtils.hs index 21d905c..3574cac 100644 --- a/frontends/ParseUtils.hs +++ b/frontends/ParseUtils.hs @@ -20,6 +20,7 @@ module ParseUtils where import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Pos (newPos) + import Metadata --{{{ Meta to/from SourcePos diff --git a/frontends/RainPasses.hs b/frontends/RainPasses.hs index 0b9b430..ae1b66a 100644 --- a/frontends/RainPasses.hs +++ b/frontends/RainPasses.hs @@ -19,19 +19,20 @@ with this program. If not, see . -- | A module containing all the misc Rain-specific passes that must be run on the parsed Rain AST before it can be fed into the shared passes. module RainPasses where -import qualified AST as A -import Pass +import Control.Monad.State import Data.Generics import qualified Data.Map as Map import Data.Maybe -import Control.Monad.State -import Types + +import qualified AST as A import CompState import Errors import Metadata +import Pass import Pattern -import TreeUtil import RainTypes +import TreeUtil +import Types -- | An ordered list of the Rain-specific passes to be run. rainPasses :: [(String,Pass)] diff --git a/frontends/RainPassesTest.hs b/frontends/RainPassesTest.hs index 0386d79..d7d0c95 100644 --- a/frontends/RainPassesTest.hs +++ b/frontends/RainPassesTest.hs @@ -20,23 +20,20 @@ with this program. If not, see . module RainPassesTest (tests) where -import Test.HUnit hiding (State) -import Control.Monad.State as CSM +import Control.Monad.State +import Control.Monad.Identity +import Data.Generics import qualified Data.Map as Map +import Test.HUnit hiding (State) + import qualified AST as A -import TestUtil +import CompState +import Errors import Pattern -import TreeUtil import RainPasses import RainTypes -import CompState -import Control.Monad.Error (runErrorT) -import Control.Monad.Identity -import Types -import Pass -import Data.Generics -import Utils -import Errors +import TestUtil +import TreeUtil skipP :: A.Structured skipP = A.OnlyP m (A.Skip m) diff --git a/frontends/RainTypes.hs b/frontends/RainTypes.hs index 1845045..52ddc40 100644 --- a/frontends/RainTypes.hs +++ b/frontends/RainTypes.hs @@ -18,16 +18,17 @@ with this program. If not, see . module RainTypes where -import qualified AST as A -import Pass -import Data.Generics -import EvalConstants -import Errors -import Types import Control.Monad.State +import Data.Generics + +import qualified AST as A import CompState +import Errors +import EvalConstants import Metadata +import Pass import ShowCode +import Types -- | A pass that records inferred types. Currently the only place where types are inferred is in seqeach\/pareach loops. diff --git a/frontends/RainTypesTest.hs b/frontends/RainTypesTest.hs index c0cec15..2d447c6 100644 --- a/frontends/RainTypesTest.hs +++ b/frontends/RainTypesTest.hs @@ -18,19 +18,20 @@ with this program. If not, see . module RainTypesTest where -import Test.HUnit hiding (State) -import TestUtil -import RainTypes -import TreeUtil -import Pattern -import qualified AST as A -import CompState import Control.Monad.State import Control.Monad.Error import Data.Generics -import Types -import Pass +import Test.HUnit hiding (State) + +import qualified AST as A +import CompState import Errors +import Pass +import Pattern +import RainTypes +import TestUtil +import TreeUtil +import Types constantFoldTest :: Test constantFoldTest = TestList diff --git a/frontends/StructureOccam.hs b/frontends/StructureOccam.hs index 881ebf4..868713b 100644 --- a/frontends/StructureOccam.hs +++ b/frontends/StructureOccam.hs @@ -19,8 +19,6 @@ with this program. If not, see . -- | Analyse syntactic structure of occam code. module StructureOccam (structureOccam) where -import Data.Generics - import Errors import LexOccam import Metadata diff --git a/transformations/PassTest.hs b/transformations/PassTest.hs index 9cee79a..8f5e029 100644 --- a/transformations/PassTest.hs +++ b/transformations/PassTest.hs @@ -18,21 +18,17 @@ with this program. If not, see . module PassTest (tests) where -import Test.HUnit hiding (State) -import Control.Monad.State as CSM -import qualified Data.Map as Map -import qualified AST as A -import TestUtil -import Pattern -import TreeUtil -import CompState -import Control.Monad.Error (runErrorT) import Control.Monad.Identity -import Types -import Pass import Data.Generics -import Utils +import qualified Data.Map as Map +import Test.HUnit hiding (State) + +import qualified AST as A +import CompState +import Pattern import SimplifyExprs +import TestUtil +import TreeUtil valof0 :: A.Structured valof0 = A.OnlyEL m $ A.ExpressionList m [intLiteral 0] diff --git a/transformations/SimplifyExprs.hs b/transformations/SimplifyExprs.hs index 9508afa..922c709 100644 --- a/transformations/SimplifyExprs.hs +++ b/transformations/SimplifyExprs.hs @@ -22,14 +22,13 @@ module SimplifyExprs where import Control.Monad.State import Data.Generics import qualified Data.Map as Map -import Data.Maybe import qualified AST as A import CompState import Errors import Metadata -import Types import Pass +import Types simplifyExprs :: A.Process -> PassM A.Process simplifyExprs = runPasses passes diff --git a/transformations/SimplifyProcs.hs b/transformations/SimplifyProcs.hs index 9bc7533..b5d22b5 100644 --- a/transformations/SimplifyProcs.hs +++ b/transformations/SimplifyProcs.hs @@ -21,8 +21,6 @@ module SimplifyProcs (simplifyProcs) where import Control.Monad.State import Data.Generics -import qualified Data.Map as Map -import Data.Maybe import qualified AST as A import CompState diff --git a/transformations/Unnest.hs b/transformations/Unnest.hs index c493f46..02321fa 100644 --- a/transformations/Unnest.hs +++ b/transformations/Unnest.hs @@ -26,10 +26,10 @@ import Data.Maybe import qualified AST as A import CompState +import Errors import EvalConstants import Metadata import Pass -import Errors import Types unnest :: A.Process -> PassM A.Process diff --git a/transformations/UsageCheck.hs b/transformations/UsageCheck.hs index 4b0726d..5598cce 100644 --- a/transformations/UsageCheck.hs +++ b/transformations/UsageCheck.hs @@ -18,12 +18,12 @@ with this program. If not, see . module UsageCheck where -import qualified AST as A import Data.Generics -import Metadata import Data.List import Data.Maybe +import qualified AST as A + --An obvious thing to do would be to hold these lists (of written/read variables respectively) instead as sets --However, this would involve defining an ordering over A.Variable. This would be do-able for plain A.Variables, --but in order to define a proper ordering for subscripted variables, we would end up needing to provide an diff --git a/transformations/UsageCheckTest.hs b/transformations/UsageCheckTest.hs index 41ca3e6..727e6e5 100644 --- a/transformations/UsageCheckTest.hs +++ b/transformations/UsageCheckTest.hs @@ -18,14 +18,13 @@ with this program. If not, see . module UsageCheckTest (tests) where -import qualified UsageCheck as UC -import qualified AST as A -import Test.HUnit -import Metadata (Meta,emptyMeta) import Prelude hiding (fail) +import Test.HUnit + + +import qualified AST as A import TestUtil -import Data.List -import Data.Ord +import qualified UsageCheck as UC --See note in UsageCheck about WrittenRead not using sets. Therefore our equality function is inefficient