Skip to content

Commit 0d7f406

Browse files
committed
redo tests (problem with expr parsers)
1 parent 1fcadb7 commit 0d7f406

File tree

25 files changed

+247
-267
lines changed

25 files changed

+247
-267
lines changed

fortran-src.cabal

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -201,18 +201,17 @@ test-suite spec
201201
Language.Fortran.AnalysisSpec
202202
Language.Fortran.AST.BozSpec
203203
Language.Fortran.AST.RealLitSpec
204-
Language.Fortran.Lexer.FixedFormSpec
205-
Language.Fortran.Lexer.FreeFormSpec
206-
Language.Fortran.Parser.Fortran2003Spec
207-
Language.Fortran.Parser.Fortran2008Spec
208-
Language.Fortran.Parser.Fortran66Spec
209-
Language.Fortran.Parser.Fortran77.IncludeSpec
210-
Language.Fortran.Parser.Fortran77.ParserSpec
211-
Language.Fortran.Parser.Fortran90Spec
212-
Language.Fortran.Parser.Fortran95Spec
213-
Language.Fortran.Parser.FreeFormCommon
214-
Language.Fortran.Parser.UtilsSpec
215-
Language.Fortran.ParserMonadSpec
204+
Language.Fortran.Parser.CommonSpec
205+
Language.Fortran.Parser.Fixed.Fortran66Spec
206+
Language.Fortran.Parser.Fixed.Fortran77.IncludeSpec
207+
Language.Fortran.Parser.Fixed.Fortran77.ParserSpec
208+
Language.Fortran.Parser.Fixed.LexerSpec
209+
Language.Fortran.Parser.Free.Common
210+
Language.Fortran.Parser.Free.Fortran2003Spec
211+
Language.Fortran.Parser.Free.Fortran2008Spec
212+
Language.Fortran.Parser.Free.Fortran90Spec
213+
Language.Fortran.Parser.Free.Fortran95Spec
214+
Language.Fortran.Parser.Free.LexerSpec
216215
Language.Fortran.PrettyPrintSpec
217216
Language.Fortran.Rewriter.InternalSpec
218217
Language.Fortran.RewriterSpec

src/Language/Fortran/Parser.hs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ module Language.Fortran.Parser
2222

2323
-- * Various combinators
2424
, transformAs, defaultTransformation
25-
, StateInit, ParserMaker, makeParser, makeParserFixed, makeParserFree
25+
, Parser, StateInit, ParserMaker, makeParser, makeParserFixed, makeParserFree
2626
, initParseStateFixed, initParseStateFree
27+
, parseUnsafe
2728

2829
-- * F77 with inlined includes
2930
-- $f77includes
@@ -180,7 +181,13 @@ initParseStateFree fn fv bs = initParseStatePartial
180181
, psVersion = fv
181182
, psFilename = fn }
182183

183-
--------------------------------------------------------------------------------
184+
-- | Convenience wrapper to easily use a parser unsafely (e.g. for tests).
185+
parseUnsafe :: Parser a -> B.ByteString -> a
186+
parseUnsafe p bs =
187+
case p "<unknown>" bs of
188+
Left err -> error $ "Language.Fortran.Parser.parseUnsafe: parse error: "
189+
<> show err
190+
Right a -> a
184191

185192
-- | Helper for preparing initial parser state for the different lexers.
186193
initParseStatePartial :: ParseState a

src/Language/Fortran/Parser/Fixed/Lexer.x

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Language.Fortran.Parser.Fixed.Lexer
99
-- * Exposed internals for testing
1010
, lexN
1111
, lexemeMatch
12+
, lexer'
1213
) where
1314

1415
import Data.Word (Word8)

src/Language/Fortran/Parser/Free/Lexer.x

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
module Language.Fortran.Parser.Free.Lexer
77
( lexer, Token(..), vanillaAlexInput, AlexInput, LexAction
8+
9+
-- * Exposed internals for testing
10+
, lexer'
811
) where
912

1013
import Prelude hiding (span)

test/Language/Fortran/Analysis/BBlocksSpec.hs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ module Language.Fortran.Analysis.BBlocksSpec where
22

33
import Test.Hspec
44

5-
import Language.Fortran.Parser.Fortran77
6-
import Language.Fortran.ParserMonad (fromParseResultUnsafe)
5+
import qualified Language.Fortran.Parser as Parser
76
import Language.Fortran.AST
87
import Language.Fortran.Analysis
98
import Language.Fortran.Analysis.BBlocks
@@ -15,8 +14,10 @@ import Data.Maybe
1514
import qualified Data.ByteString.Char8 as B
1615

1716
pParser :: String -> ProgramFile (Analysis ())
18-
pParser source = rename . analyseBBlocks . analyseRenames . initAnalysis . fromParseResultUnsafe
19-
$ extended77Parser (B.pack source) "<unknown>"
17+
pParser source =
18+
case Parser.f77e "<unknown>" (B.pack source) of
19+
Left err -> error $ show err
20+
Right pf -> rename . analyseBBlocks . analyseRenames . initAnalysis $ pf
2021

2122
spec :: Spec
2223
spec =

test/Language/Fortran/Analysis/DataFlowSpec.hs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ import TestUtil
66
import Test.Hspec.QuickCheck
77
import Test.QuickCheck (Positive(..))
88

9-
import Language.Fortran.Parser.Fortran77
10-
import qualified Language.Fortran.Parser.Fortran90 as F90
11-
import Language.Fortran.ParserMonad (fromParseResultUnsafe)
129
import Language.Fortran.AST
1310
import Language.Fortran.Analysis
1411
import Language.Fortran.Analysis.Renaming
1512
import Language.Fortran.Analysis.BBlocks
1613
import Language.Fortran.Analysis.DataFlow
14+
import qualified Language.Fortran.Parser as Parser
15+
1716
import qualified Data.Map as M
1817
import qualified Data.Set as S
1918
import qualified Data.IntMap as IM
@@ -26,24 +25,22 @@ import Data.Generics.Uniplate.Operations
2625
import qualified Data.ByteString.Char8 as B
2726
import Control.Arrow ((&&&))
2827

29-
{-# ANN module "HLint: ignore Reduce duplication" #-}
30-
3128
data F77 = F77
3229
data F90 = F90
3330

3431
class Parser t where
35-
parser :: t -> String -> String -> ProgramFile A0
32+
parser :: t -> String -> ProgramFile A0
3633
instance Parser F77 where
37-
parser F77 src file = fromParseResultUnsafe $ extended77Parser (B.pack src) file
34+
parser F77 = Parser.parseUnsafe Parser.f77e . B.pack
3835
instance Parser F90 where
39-
parser F90 src file = fromParseResultUnsafe $ F90.fortran90Parser (B.pack src) file
36+
parser F90 = Parser.parseUnsafe Parser.f90 . B.pack
4037

4138
pParser :: Parser t => t -> String -> ProgramFile (Analysis ())
4239
pParser version source = rename . analyseBBlocks . analyseRenames . initAnalysis
43-
. resetSrcSpan $ parser version source "<unknown>"
40+
. resetSrcSpan $ parser version source
4441

4542
withParse :: Data a => Parser t => t -> String -> (ProgramFile (Analysis A0) -> a) -> a
46-
withParse version source f = underRenaming (f . analyseBBlocks) (parser version source "<unknown>")
43+
withParse version source f = underRenaming (f . analyseBBlocks) (parser version source)
4744

4845
testGraph :: Parser t => t -> String -> String -> BBGr (Analysis A0)
4946
testGraph version f p = fromJust . M.lookup (Named f) . withParse version p $ genBBlockMap

test/Language/Fortran/Analysis/RenamingSpec.hs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ import Data.Map (elems)
77
--import Data.Data (Data)
88
import qualified Data.Map as M
99

10-
import Language.Fortran.ParserMonad
1110
import Language.Fortran.AST
12-
import qualified Language.Fortran.Parser.Fortran90 as F90
1311
import Language.Fortran.Analysis
1412
import Language.Fortran.Analysis.Renaming
13+
import qualified Language.Fortran.Parser as Parser
1514
import Data.Generics.Uniplate.Data
1615
import qualified Data.ByteString.Char8 as B
1716

@@ -34,8 +33,8 @@ countUnrenamed e = length [ () | ExpValue Analysis { uniqueName = Nothing } _ Va
3433
where uniE_PF :: ProgramFile (Analysis ()) -> [Expression (Analysis ())]
3534
uniE_PF = universeBi
3635

37-
fortran90Parser :: String -> String -> ProgramFile A0
38-
fortran90Parser src file = fromParseResultUnsafe $ F90.fortran90Parser (B.pack src) file
36+
fortran90Parser :: String -> ProgramFile A0
37+
fortran90Parser = Parser.parseUnsafe Parser.f90 . B.pack
3938

4039
spec :: Spec
4140
spec = do
@@ -112,7 +111,7 @@ spec = do
112111

113112
-- GitHub issue #190 https://github.com/camfort/fortran-src/issues/190
114113
it "doesn't generate same unique name in edge case" $ do
115-
let ex = resetSrcSpan . flip fortran90Parser "" $ unlines
114+
let ex = resetSrcSpan . fortran90Parser $ unlines
116115
[ "program p1"
117116
, " implicit none"
118117
, " integer x, int1, a1, a2, a3, a4, a5, a6, a7, a8, a9"
@@ -239,10 +238,10 @@ ex6pu2pu1 :: ProgramUnit ()
239238
ex6pu2pu1 = PUFunction () u (Just $ TypeSpec () u TypeInteger Nothing) emptyPrefixSuffix "f1" (Just $ AList () u [ varGen "x"]) Nothing [ BlStatement () u Nothing (StExpressionAssign () u (varGen "f1") (ExpFunctionCall () u (ExpValue () u (ValVariable "f1")) (Just $ AList () u [Argument () u Nothing (varGen "x")]))) ] (Just [ex5pu2pu1])
240239

241240
--parseF90 :: [String] -> ProgramFile A0
242-
--parseF90 = resetSrcSpan . flip fortran90Parser "" . unlines
241+
--parseF90 = resetSrcSpan . fortran90Parser . unlines
243242

244243
ex8 :: ProgramFile A0
245-
ex8 = resetSrcSpan . flip fortran90Parser "" $ unlines [
244+
ex8 = resetSrcSpan . fortran90Parser $ unlines [
246245
"module m1"
247246
, " implicit none"
248247
, "contains"
@@ -277,7 +276,7 @@ ex8 = resetSrcSpan . flip fortran90Parser "" $ unlines [
277276
]
278277

279278
ex9 :: ProgramFile A0
280-
ex9 = resetSrcSpan . flip fortran90Parser "" $ unlines [
279+
ex9 = resetSrcSpan . fortran90Parser $ unlines [
281280
"module m1"
282281
, " implicit none"
283282
, " integer :: x"
@@ -313,7 +312,7 @@ ex11pu1bs =
313312
, BlStatement () u Nothing (StEntry () u (ExpValue () u (ValVariable "e3")) Nothing (Just (varGen "r2"))) ]
314313

315314
ex12 :: ProgramFile A0
316-
ex12 = resetSrcSpan . flip fortran90Parser "" $ unlines [
315+
ex12 = resetSrcSpan . fortran90Parser $ unlines [
317316
"module m1"
318317
, " implicit none"
319318
, " integer :: z"
@@ -350,7 +349,7 @@ ex12 = resetSrcSpan . flip fortran90Parser "" $ unlines [
350349
]
351350

352351
ex13Renames :: ProgramFile A0
353-
ex13Renames = resetSrcSpan . flip fortran90Parser "" $ unlines [
352+
ex13Renames = resetSrcSpan . fortran90Parser $ unlines [
354353
"module m1"
355354
, " implicit none"
356355
, " integer :: z"
@@ -388,7 +387,7 @@ ex13Renames = resetSrcSpan . flip fortran90Parser "" $ unlines [
388387

389388

390389
exScope1 :: ProgramFile A0
391-
exScope1 = resetSrcSpan . flip fortran90Parser "" $ unlines [
390+
exScope1 = resetSrcSpan . fortran90Parser $ unlines [
392391
"program scope1"
393392
-- local variables cannot take on the name of subprogram, therefore
394393
-- this declaration must be simply redeclaring the function x.
@@ -404,7 +403,7 @@ exScope1 = resetSrcSpan . flip fortran90Parser "" $ unlines [
404403
]
405404

406405
exScope2 :: ProgramFile A0
407-
exScope2 = resetSrcSpan . flip fortran90Parser "" $ unlines [
406+
exScope2 = resetSrcSpan . fortran90Parser $ unlines [
408407
"module scope2"
409408
, " integer :: x"
410409
, "contains"
@@ -434,7 +433,7 @@ exScope2 = resetSrcSpan . flip fortran90Parser "" $ unlines [
434433
]
435434

436435
exScope3 :: ProgramFile A0
437-
exScope3 = resetSrcSpan . flip fortran90Parser "" $ unlines [
436+
exScope3 = resetSrcSpan . fortran90Parser $ unlines [
438437
"module m1"
439438
, " implicit none"
440439
, " integer :: x"
@@ -471,7 +470,7 @@ exScope3 = resetSrcSpan . flip fortran90Parser "" $ unlines [
471470
]
472471

473472
common1 :: ProgramFile A0
474-
common1 = resetSrcSpan . flip fortran90Parser "" $ unlines [
473+
common1 = resetSrcSpan . fortran90Parser $ unlines [
475474
"program p1"
476475
, " implicit none"
477476
, " integer :: x, y"

test/Language/Fortran/Analysis/TypesSpec.hs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ import Language.Fortran.Analysis
1212
import Language.Fortran.Analysis.Types
1313
import Language.Fortran.Analysis.SemanticTypes
1414
import Language.Fortran.Analysis.Renaming
15-
import qualified Language.Fortran.Parser.Fortran77 as F77
16-
import qualified Language.Fortran.Parser.Fortran90 as F90
17-
import Language.Fortran.ParserMonad
15+
import qualified Language.Fortran.Parser as Parser
1816
import qualified Data.ByteString.Char8 as B
1917

2018
inferTable :: Data a => ProgramFile a -> TypeEnv
@@ -23,11 +21,11 @@ inferTable = underRenaming (snd . analyseTypes)
2321
typedProgramFile :: Data a => ProgramFile a -> ProgramFile (Analysis a)
2422
typedProgramFile = fst . analyseTypes . analyseRenames . initAnalysis
2523

26-
legacy77Parser :: String -> String -> ProgramFile A0
27-
legacy77Parser src file = fromParseResultUnsafe $ F77.legacy77Parser (B.pack src) file
24+
legacy77Parser :: String -> ProgramFile A0
25+
legacy77Parser = Parser.parseUnsafe Parser.f77l . B.pack
2826

29-
fortran90Parser :: String -> String -> ProgramFile A0
30-
fortran90Parser src file = fromParseResultUnsafe $ F90.fortran90Parser (B.pack src) file
27+
fortran90Parser :: String -> ProgramFile A0
28+
fortran90Parser = Parser.parseUnsafe Parser.f90 . B.pack
3129

3230
uniExpr :: ProgramFile (Analysis A0) -> [Expression (Analysis A0)]
3331
uniExpr = universeBi
@@ -386,11 +384,11 @@ fProgStr progContents = unlines prog
386384

387385
-- | Parse a string as an F90 program with initialized 'SrcSpan's.
388386
parseStrF90 :: String -> ProgramFile A0
389-
parseStrF90 = resetSrcSpan . flip fortran90Parser ""
387+
parseStrF90 = resetSrcSpan . fortran90Parser
390388

391389
commonTransform :: [String] -> String -> [String] -> Bool -> ProgramFile A0
392390
commonTransform front cdecl back common =
393-
resetSrcSpan . flip legacy77Parser "" . unlines . (++) front $
391+
resetSrcSpan . legacy77Parser . unlines . (++) front $
394392
if common then cdecl : back else back
395393

396394
structArray :: Bool -> ProgramFile A0

test/Language/Fortran/AnalysisSpec.hs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@ module Language.Fortran.AnalysisSpec where
33
import Test.Hspec
44
import TestUtil
55

6-
import Language.Fortran.Parser.Fortran77
7-
import Language.Fortran.ParserMonad (fromParseResultUnsafe)
8-
import Language.Fortran.AST
96
import Language.Fortran.Analysis
7+
import Language.Fortran.AST
8+
import qualified Language.Fortran.Parser as Parser
9+
1010
import qualified Data.ByteString.Char8 as B
1111

12-
pParser :: String -> ProgramFile (Analysis ())
13-
pParser source = initAnalysis
14-
. fromParseResultUnsafe
15-
$ extended77Parser (B.pack source) "<unknown>"
12+
pParser :: String -> ProgramFile (Analysis A0)
13+
pParser = initAnalysis . Parser.parseUnsafe Parser.f77e . B.pack
1614

1715
spec :: Spec
1816
spec =

test/Language/Fortran/ParserMonadSpec.hs renamed to test/Language/Fortran/Parser/CommonSpec.hs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
{-# OPTIONS_GHC -Wno-orphans #-}
22

3-
module Language.Fortran.ParserMonadSpec where
3+
module Language.Fortran.Parser.CommonSpec where
44

55
import Test.Hspec
66

7-
import Language.Fortran.ParserMonad
7+
import Language.Fortran.Parser.Common
8+
import Language.Fortran.Version
89
import Language.Fortran.Util.Position
910

1011
vanillaParseState :: ParseState String

0 commit comments

Comments
 (0)