Skip to content

Commit 2693e84

Browse files
authored
Merge pull request #317 from nikolaushuber/fix-semtype-print
Fix pretty printer for semantic types
2 parents f5141b8 + d9d006b commit 2693e84

File tree

3 files changed

+20
-2
lines changed

3 files changed

+20
-2
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
### (unreleased)
2+
* Fixed pretty printing of array semantic types
3+
14
### 0.16.7
25
* Added mention of Fortran 2003 version support in the help message
36
* Improved parsing of `allocate` statements

src/Language/Fortran/Analysis/SemanticTypes.hs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ instance Pretty SemType where
6666
TLogical k -> "logical"<>pd k
6767
TByte k -> "byte"<>pd k
6868
TCharacter _ _ -> "character(TODO)"
69-
TArray st dims -> pprint' v st <> pprint' v dims
69+
TArray st dims -> pprint' v st <> pdims v dims
7070
TCustom str -> pprint' v (TypeCustom str)
7171
| otherwise = \case
7272
TInteger k -> "integer"<>ad k
@@ -75,11 +75,13 @@ instance Pretty SemType where
7575
TLogical k -> "logical"<>ad k
7676
TByte k -> "byte"<>ad k
7777
TCharacter _ _ -> "character*TODO"
78-
TArray st dims -> pprint' v st <> pprint' v dims
78+
TArray st dims -> pprint' v st <> pdims v dims
7979
TCustom str -> pprint' v (TypeCustom str)
8080
where
8181
pd = Pretty.parens . doc
8282
ad k = doc '*' <> doc k
83+
pdims v dims = maybe Pretty.empty (pprint' v) (dimsTraverse dims)
84+
8385

8486
-- | Convert 'Dimensions' data type to its previous type synonym
8587
-- @(Maybe [(Int, Int)])@.

test/Language/Fortran/Analysis/SemanticTypesSpec.hs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
{-# LANGUAGE OverloadedLists #-}
2+
{-# LANGUAGE OverloadedStrings #-}
3+
14
module Language.Fortran.Analysis.SemanticTypesSpec where
25

36
import Test.Hspec
@@ -7,6 +10,10 @@ import Language.Fortran.Analysis.SemanticTypes
710
import Language.Fortran.AST
811
import Language.Fortran.Version
912

13+
import Language.Fortran.PrettyPrint
14+
import Text.PrettyPrint hiding ((<>))
15+
import Text.PrettyPrint.GenericPretty
16+
1017
spec :: Spec
1118
spec = do
1219
describe "Semantic types" $ do
@@ -29,3 +36,9 @@ spec = do
2936
let semtype = TCharacter CharLenStar 1
3037
typespec = TypeSpec () u TypeCharacter (Just (Selector () u (Just (ExpValue () u ValStar)) Nothing))
3138
in recoverSemTypeTypeSpec () u Fortran90 semtype `shouldBe` typespec
39+
40+
it "prints semantic type with dimensions" $ do
41+
let dims = DimsExplicitShape ( [ Dim (Just 1) (Just 3), Dim (Just 1) (Just 4) ] )
42+
let semtype = TArray (TReal 8) dims
43+
pprint Fortran90 semtype Nothing `shouldBe` "real(8)(1:3, 1:4)"
44+

0 commit comments

Comments
 (0)