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

This commit is contained in:
Neil Brown 2007-09-27 13:13:46 +00:00
parent e2ab43af3f
commit 38c409d378
34 changed files with 109 additions and 152 deletions

View File

@ -19,7 +19,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | Driver for the compiler. -- | Driver for the compiler.
module Main (main) where module Main (main) where
import Control.Monad
import Control.Monad.Error import Control.Monad.Error
import Control.Monad.State import Control.Monad.State
import List import List
@ -33,10 +32,9 @@ import Errors
import GenerateC import GenerateC
import GenerateCPPCSP import GenerateCPPCSP
import ParseOccam import ParseOccam
import ParseRain
import Pass import Pass
import PreprocessOccam import PreprocessOccam
import PrettyShow
import ParseRain
import RainPasses import RainPasses
import SimplifyExprs import SimplifyExprs
import SimplifyProcs import SimplifyProcs

View File

@ -14,6 +14,7 @@ ghc_opts = \
-fglasgow-exts \ -fglasgow-exts \
-fallow-undecidable-instances \ -fallow-undecidable-instances \
-fwarn-unused-binds \ -fwarn-unused-binds \
-fwarn-unused-imports \
-icommon -itransformations -ifrontends -ibackends \ -icommon -itransformations -ifrontends -ibackends \
$(profile_opts) $(profile_opts)

View File

@ -31,24 +31,25 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- * "UsageCheckTest" -- * "UsageCheckTest"
module TestMain () where module TestMain () where
import Test.HUnit
import qualified BackendPassesTest (tests)
import qualified CommonTest (tests)
import qualified ParseRainTest (tests) import qualified ParseRainTest (tests)
import qualified PassTest (tests)
import qualified RainPassesTest (tests) import qualified RainPassesTest (tests)
import qualified RainTypesTest (tests) import qualified RainTypesTest (tests)
import qualified UsageCheckTest (tests) import qualified UsageCheckTest (tests)
import qualified PassTest (tests)
import qualified CommonTest (tests)
import qualified BackendPassesTest (tests)
import Test.HUnit
main :: IO () main :: IO ()
main = do runTestTT $ TestList main = do runTestTT $ TestList
[ [
PassTest.tests BackendPassesTest.tests
,CommonTest.tests ,CommonTest.tests
,ParseRainTest.tests ,ParseRainTest.tests
,PassTest.tests
,RainPassesTest.tests ,RainPassesTest.tests
,RainTypesTest.tests ,RainTypesTest.tests
,UsageCheckTest.tests ,UsageCheckTest.tests
,BackendPassesTest.tests
] ]
return () return ()

View File

@ -31,12 +31,10 @@ import qualified Data.Map as Map
import Data.Maybe import Data.Maybe
import qualified Data.Set as Set import qualified Data.Set as Set
import Numeric (readDec) import Numeric (readDec)
import System
import Text.Printf import Text.Printf
import Text.Regex import Text.Regex
import CompState import CompState
import Errors
import Pass import Pass
import PrettyShow import PrettyShow

View File

@ -24,20 +24,19 @@ import Data.Generics
import Data.List import Data.List
import Data.Maybe import Data.Maybe
import qualified Data.Set as Set import qualified Data.Set as Set
import Control.Monad.Writer
import Control.Monad.Error import Control.Monad.Error
import Control.Monad.State import Control.Monad.State
import Numeric import Control.Monad.Writer
import Text.Printf import Text.Printf
import qualified AST as A import qualified AST as A
import BackendPasses import BackendPasses
import CompState import CompState
import Errors
import EvalConstants import EvalConstants
import EvalLiterals import EvalLiterals
import Metadata import Metadata
import Pass import Pass
import Errors
import ShowCode import ShowCode
import TLP import TLP
import Types import Types

View File

@ -70,29 +70,23 @@ For channels of direction 'A.DirInput' or 'A.DirOutput' I actually pass the Chan
-} -}
module GenerateCPPCSP (generateCPPCSP) where module GenerateCPPCSP (generateCPPCSP) where
import Control.Monad.Writer
import Data.Char import Data.Char
import Data.Generics
import Data.List import Data.List
import Data.Maybe 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 qualified AST as A
import CompState import CompState
import EvalConstants import Errors
import EvalLiterals import GenerateC
import Metadata import Metadata
import Pass import Pass
import Errors
import ShowCode import ShowCode
import TLP import TLP
import Types import Types
import Utils import Utils
import GenerateC
--{{{ generator ops --{{{ generator ops
-- | Operations for the C++CSP backend. -- | Operations for the C++CSP backend.

View File

@ -19,7 +19,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | Top-level process support. -- | Top-level process support.
module TLP where module TLP where
import Control.Monad.Error
import Control.Monad.State import Control.Monad.State
import Data.Generics import Data.Generics
import Data.List import Data.List
@ -28,7 +27,6 @@ import Data.Maybe
import qualified AST as A import qualified AST as A
import CompState import CompState
import Errors import Errors
import Metadata
import Types import Types
data TLPChannel = TLPIn | TLPOut | TLPError data TLPChannel = TLPIn | TLPOut | TLPError

View File

@ -18,12 +18,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module CommonTest (tests) where module CommonTest (tests) where
import Test.HUnit hiding (State)
import qualified AST as A
import Types
import TreeUtil
import Metadata
import Data.Generics import Data.Generics
import Test.HUnit hiding (State)
import qualified AST as A
import Metadata
import TreeUtil
import Types
-- | Tests the isSafeConversion function: -- | Tests the isSafeConversion function:
testIsSafeConversion :: Test testIsSafeConversion :: Test

View File

@ -19,13 +19,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | Compiler state. -- | Compiler state.
module CompState where module CompState where
import Control.Monad.Error
import Control.Monad.State
import Data.Generics import Data.Generics
import Data.Map (Map) import Data.Map (Map)
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Set (Set) import Data.Set (Set)
import qualified Data.Set as Set import qualified Data.Set as Set
import Control.Monad.Error
import Control.Monad.State
import qualified AST as A import qualified AST as A
import Errors import Errors

View File

@ -24,7 +24,6 @@ import Control.Monad.Trans
import Data.List import Data.List
import System.IO.Error import System.IO.Error
import qualified AST as A
import Metadata import Metadata
type ErrorReport = (Maybe Meta, String) type ErrorReport = (Maybe Meta, String)

View File

@ -20,15 +20,11 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module EvalConstants (constantFold, isConstantName) where module EvalConstants (constantFold, isConstantName) where
import Control.Monad.Error import Control.Monad.Error
import Control.Monad.Identity
import Control.Monad.State import Control.Monad.State
import Data.Bits import Data.Bits
import Data.Char import Data.Char
import Data.Generics
import Data.Int import Data.Int
import Data.Maybe import Data.Maybe
import Data.Word
import Numeric
import Text.Printf import Text.Printf
import qualified AST as A import qualified AST as A
@ -36,7 +32,6 @@ import CompState
import Errors import Errors
import EvalLiterals import EvalLiterals
import Metadata import Metadata
import Pass
import ShowCode import ShowCode
import Types import Types

View File

@ -22,7 +22,6 @@ module EvalLiterals where
import Control.Monad.Error import Control.Monad.Error
import Control.Monad.Identity import Control.Monad.Identity
import Control.Monad.State import Control.Monad.State
import Data.Bits
import Data.Char import Data.Char
import Data.Generics import Data.Generics
import Data.Int import Data.Int

View File

@ -25,8 +25,6 @@ import Data.Generics
import Text.Printf import Text.Printf
import Text.Read import Text.Read
import Utils
data Meta = Meta { data Meta = Meta {
metaFile :: Maybe String, metaFile :: Maybe String,
metaLine :: Int, metaLine :: Int,

View File

@ -26,6 +26,7 @@ import Data.Generics
import Data.List import Data.List
import Text.PrettyPrint.HughesPJ import Text.PrettyPrint.HughesPJ
import Text.Regex import Text.Regex
import qualified AST as A import qualified AST as A
import CompState import CompState

View File

@ -38,21 +38,21 @@ If they are not equal, it shows them (using 'show') with the given message prefi
module TestUtil where 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 Control.Monad.Error
import Pass import Control.Monad.State
import CompState import Data.Generics
import PrettyShow
import Utils
import qualified Data.Map as Map import qualified Data.Map as Map
import Test.HUnit hiding (State)
import qualified AST as A
import CompState
import Errors 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. -- | An abbreviation for using 'emptyMeta'. TODO: This should really be removed (and all uses of it replaced with 'emptyMeta') for clarity.
m :: Meta m :: Meta

View File

@ -26,14 +26,15 @@ module TreeUtil (
con0, con1, con2, con3, con4, con5, con6, con7 con0, con1, con2, con3, con4, con5, con6, con7
) where ) where
import Test.HUnit hiding (State)
import qualified Data.Map as Map
import Control.Monad.State import Control.Monad.State
import Data.Generics import Data.Generics
import qualified PrettyShow as PS
import Data.Maybe
import Data.List import Data.List
import qualified Data.Map as Map
import Data.Maybe
import Test.HUnit hiding (State)
import Pattern import Pattern
import qualified PrettyShow as PS
type MatchErrors = [String] type MatchErrors = [String]

View File

@ -32,7 +32,6 @@ module Types
) where ) where
import Control.Monad
import Control.Monad.State import Control.Monad.State
import Data.Generics import Data.Generics
import qualified Data.Map as Map import qualified Data.Map as Map

View File

@ -1,4 +1,5 @@
{ {- { {-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-
Tock: a compiler for parallel languages Tock: a compiler for parallel languages
Copyright (C) 2007 University of Kent Copyright (C) 2007 University of Kent

View File

@ -1,4 +1,5 @@
{ {- { {-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-
Tock: a compiler for parallel languages Tock: a compiler for parallel languages
Copyright (C) 2007 University of Kent Copyright (C) 2007 University of Kent
@ -21,9 +22,7 @@ module LexRain where
import Data.Generics import Data.Generics
import Errors
import Metadata import Metadata
import Pass
} }
%wrapper "posn" %wrapper "posn"

View File

@ -20,12 +20,10 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module ParseOccam (parseOccamProgram) where module ParseOccam (parseOccamProgram) where
import Control.Monad (liftM, when) import Control.Monad (liftM, when)
import Control.Monad.Error (runErrorT) import Control.Monad.State (MonadState, modify, get, put)
import Control.Monad.State (MonadState, StateT, execStateT, liftIO, modify, get, put)
import Data.List import Data.List
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Maybe import Data.Maybe
import Debug.Trace
import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec
import qualified AST as A import qualified AST as A

View File

@ -18,36 +18,21 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module ParseRain where module ParseRain where
import qualified Text.ParserCombinators.Parsec.Token as P
import qualified LexRain as L
import Control.Monad (liftM)
import Control.Monad.State (MonadState, liftIO, get, put)
--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 Data.List import Data.List
import qualified Data.Map as Map
import Data.Maybe import Data.Maybe
import Debug.Trace
import qualified IO import qualified IO
import Numeric (readHex)
import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec
import Text.Regex
import qualified AST as A import qualified AST as A
import CompState import CompState
import Errors import Errors
import EvalConstants import qualified LexRain as L
import EvalLiterals
import Intrinsics
import Metadata import Metadata
import ParseUtils import ParseUtils
import Pass import Pass
import Types
import Utils

View File

@ -18,17 +18,18 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module ParseRainTest (tests) where 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 Prelude hiding (fail)
import TestUtil import Test.HUnit
import Pattern import Text.ParserCombinators.Parsec (runParser,eof)
import TreeUtil
import qualified AST as A
import CompState 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) data ParseTest a = Show a => ExpPass (String, RP.RainParser a , (a -> Assertion)) | ExpFail (String, RP.RainParser a)

View File

@ -20,6 +20,7 @@ module ParseUtils where
import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec
import Text.ParserCombinators.Parsec.Pos (newPos) import Text.ParserCombinators.Parsec.Pos (newPos)
import Metadata import Metadata
--{{{ Meta to/from SourcePos --{{{ Meta to/from SourcePos

View File

@ -19,19 +19,20 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | 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. -- | 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 module RainPasses where
import qualified AST as A import Control.Monad.State
import Pass
import Data.Generics import Data.Generics
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Maybe import Data.Maybe
import Control.Monad.State
import Types import qualified AST as A
import CompState import CompState
import Errors import Errors
import Metadata import Metadata
import Pass
import Pattern import Pattern
import TreeUtil
import RainTypes import RainTypes
import TreeUtil
import Types
-- | An ordered list of the Rain-specific passes to be run. -- | An ordered list of the Rain-specific passes to be run.
rainPasses :: [(String,Pass)] rainPasses :: [(String,Pass)]

View File

@ -20,23 +20,20 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module RainPassesTest (tests) where module RainPassesTest (tests) where
import Test.HUnit hiding (State) import Control.Monad.State
import Control.Monad.State as CSM import Control.Monad.Identity
import Data.Generics
import qualified Data.Map as Map import qualified Data.Map as Map
import Test.HUnit hiding (State)
import qualified AST as A import qualified AST as A
import TestUtil import CompState
import Errors
import Pattern import Pattern
import TreeUtil
import RainPasses import RainPasses
import RainTypes import RainTypes
import CompState import TestUtil
import Control.Monad.Error (runErrorT) import TreeUtil
import Control.Monad.Identity
import Types
import Pass
import Data.Generics
import Utils
import Errors
skipP :: A.Structured skipP :: A.Structured
skipP = A.OnlyP m (A.Skip m) skipP = A.OnlyP m (A.Skip m)

View File

@ -18,16 +18,17 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module RainTypes where module RainTypes where
import qualified AST as A
import Pass
import Data.Generics
import EvalConstants
import Errors
import Types
import Control.Monad.State import Control.Monad.State
import Data.Generics
import qualified AST as A
import CompState import CompState
import Errors
import EvalConstants
import Metadata import Metadata
import Pass
import ShowCode import ShowCode
import Types
-- | A pass that records inferred types. Currently the only place where types are inferred is in seqeach\/pareach loops. -- | A pass that records inferred types. Currently the only place where types are inferred is in seqeach\/pareach loops.

View File

@ -18,19 +18,20 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module RainTypesTest where 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.State
import Control.Monad.Error import Control.Monad.Error
import Data.Generics import Data.Generics
import Types import Test.HUnit hiding (State)
import Pass
import qualified AST as A
import CompState
import Errors import Errors
import Pass
import Pattern
import RainTypes
import TestUtil
import TreeUtil
import Types
constantFoldTest :: Test constantFoldTest :: Test
constantFoldTest = TestList constantFoldTest = TestList

View File

@ -19,8 +19,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | Analyse syntactic structure of occam code. -- | Analyse syntactic structure of occam code.
module StructureOccam (structureOccam) where module StructureOccam (structureOccam) where
import Data.Generics
import Errors import Errors
import LexOccam import LexOccam
import Metadata import Metadata

View File

@ -18,21 +18,17 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module PassTest (tests) where 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 Control.Monad.Identity
import Types
import Pass
import Data.Generics 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 SimplifyExprs
import TestUtil
import TreeUtil
valof0 :: A.Structured valof0 :: A.Structured
valof0 = A.OnlyEL m $ A.ExpressionList m [intLiteral 0] valof0 = A.OnlyEL m $ A.ExpressionList m [intLiteral 0]

View File

@ -22,14 +22,13 @@ module SimplifyExprs where
import Control.Monad.State import Control.Monad.State
import Data.Generics import Data.Generics
import qualified Data.Map as Map import qualified Data.Map as Map
import Data.Maybe
import qualified AST as A import qualified AST as A
import CompState import CompState
import Errors import Errors
import Metadata import Metadata
import Types
import Pass import Pass
import Types
simplifyExprs :: A.Process -> PassM A.Process simplifyExprs :: A.Process -> PassM A.Process
simplifyExprs = runPasses passes simplifyExprs = runPasses passes

View File

@ -21,8 +21,6 @@ module SimplifyProcs (simplifyProcs) where
import Control.Monad.State import Control.Monad.State
import Data.Generics import Data.Generics
import qualified Data.Map as Map
import Data.Maybe
import qualified AST as A import qualified AST as A
import CompState import CompState

View File

@ -26,10 +26,10 @@ import Data.Maybe
import qualified AST as A import qualified AST as A
import CompState import CompState
import Errors
import EvalConstants import EvalConstants
import Metadata import Metadata
import Pass import Pass
import Errors
import Types import Types
unnest :: A.Process -> PassM A.Process unnest :: A.Process -> PassM A.Process

View File

@ -18,12 +18,12 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module UsageCheck where module UsageCheck where
import qualified AST as A
import Data.Generics import Data.Generics
import Metadata
import Data.List import Data.List
import Data.Maybe 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 --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, --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 --but in order to define a proper ordering for subscripted variables, we would end up needing to provide an

View File

@ -18,14 +18,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
module UsageCheckTest (tests) where 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 Prelude hiding (fail)
import Test.HUnit
import qualified AST as A
import TestUtil import TestUtil
import Data.List import qualified UsageCheck as UC
import Data.Ord
--See note in UsageCheck about WrittenRead not using sets. Therefore our equality function is inefficient --See note in UsageCheck about WrittenRead not using sets. Therefore our equality function is inefficient