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.
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

View File

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

View File

@ -31,24 +31,25 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- * "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 ()

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -19,7 +19,6 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | 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

View File

@ -18,12 +18,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

@ -19,13 +19,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
-- | 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

View File

@ -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)

View File

@ -20,15 +20,11 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

@ -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

View File

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

View File

@ -26,6 +26,7 @@ import Data.Generics
import Data.List
import Text.PrettyPrint.HughesPJ
import Text.Regex
import qualified AST as A
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
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

View File

@ -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]

View File

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

View File

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

View File

@ -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"

View File

@ -20,12 +20,10 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

@ -18,36 +18,21 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

@ -18,17 +18,18 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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)

View File

@ -20,6 +20,7 @@ module ParseUtils where
import Text.ParserCombinators.Parsec
import Text.ParserCombinators.Parsec.Pos (newPos)
import Metadata
--{{{ 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.
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)]

View File

@ -20,23 +20,20 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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)

View File

@ -18,16 +18,17 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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.

View File

@ -18,19 +18,20 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

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

View File

@ -18,21 +18,17 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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]

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -18,12 +18,12 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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

View File

@ -18,14 +18,13 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
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