Skip to content

Commit c286639

Browse files
krame505quark17
authored andcommitted
Update CPrintType to use new generic features
1 parent 9d84cd0 commit c286639

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

testsuite/bsc.typechecker/generics/CPrintType.bs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package CPrintType where
22

3+
import List
4+
35
class CPrintType a where
46
cPrintType :: a -> String
57
cPrintTypeP :: a -> String
@@ -63,14 +65,44 @@ instance CPrintTypeArg (NumArg n) where
6365
instance CPrintTypeArg (StrArg s) where
6466
cPrintTypeArg _ = "\"" +++ stringOf s +++ "\""
6567

68+
instance (CPrintConType (c ())) => CPrintTypeArg (StarConArg c) where
69+
cPrintTypeArg _ = cPrintConType (_ :: c ())
70+
71+
instance (CPrintConType (c 0)) => CPrintTypeArg (NumConArg c) where
72+
cPrintTypeArg _ = cPrintConType (_ :: c 0)
73+
6674
instance CPrintTypeArg OtherConArg where
6775
cPrintTypeArg _ = "?"
6876

77+
class CPrintConType c where
78+
cPrintConType :: c -> String
79+
80+
instance (Generic c r, CPrintConType' r) => CPrintConType c where
81+
cPrintConType _ = cPrintConType' (_ :: r)
82+
83+
class CPrintConType' r where
84+
cPrintConType' :: r -> String
85+
86+
instance CPrintConType' (Meta (MetaData n p ta nc) r) where
87+
cPrintConType' _ = stringOf p +++ "." +++ stringOf n
88+
89+
instance (InitTuple (a, b) ta, CPrintTypeArgs ta) =>
90+
CPrintConType' (Meta (MetaData n p (a, b) nc) r) where
91+
cPrintConType' _ = "(" +++ stringOf p +++ "." +++ stringOf n +++
92+
" " +++ cPrintTypeArgs (_ :: ta) +++ ")"
93+
94+
class InitTuple a b | a -> b where {}
95+
instance (InitTuple (b, c) d) => InitTuple (a, b, c) (a, d) where {}
96+
instance InitTuple (a, b) a where {}
6997

7098
data Foo a b = A (UInt a)
7199
| B b Bool (Bit a)
72100
| C
73101

102+
data (Bar :: (* -> *) -> *) a = Bar (a Bool)
103+
data (Baz :: (# -> *) -> (* -> * -> *) -> *) a b = Baz (a 42) (b Bool Integer)
104+
data MyBit n = MyBit (Bit n)
105+
74106
sysCPrintType :: Module Empty
75107
sysCPrintType = module
76108
rules
@@ -81,4 +113,7 @@ sysCPrintType = module
81113
$display (cPrintType (_ :: Foo 16 Real))
82114
$display (cPrintType $ from (_ :: Foo 16 Real))
83115
$display (cPrintType (_ :: Maybe (String, Integer)))
116+
$display (cPrintType (_ :: Bar Maybe))
117+
$display (cPrintType (_ :: Bar (Either Integer)))
118+
$display (cPrintType (_ :: Baz MyBit Either))
84119
$finish

testsuite/bsc.typechecker/generics/sysCPrintType.out.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ Prelude.Either (Prelude.Maybe Bool) Prelude.String
44
CPrintType.Foo 16 Prelude.Real
55
Prelude.Meta (Prelude.MetaData "Foo" "CPrintType" (Prelude.NumArg 16, Prelude.StarArg Prelude.Real) 3) (Prelude.Either (Prelude.Either (Prelude.Meta (Prelude.MetaConsAnon "A" 0 1) (Prelude.Meta (Prelude.MetaField "_1" 0) (Prelude.Conc (Prelude.UInt 16)))) (Prelude.Meta (Prelude.MetaConsAnon "B" 1 3) (Prelude.Meta (Prelude.MetaField "_1" 0) (Prelude.Conc Prelude.Real), Prelude.Meta (Prelude.MetaField "_2" 1) (Prelude.Conc Bool), Prelude.Meta (Prelude.MetaField "_3" 2) (Prelude.Conc Prelude.Bit 16)))) (Prelude.Meta (Prelude.MetaConsAnon "C" 2 0) ()))
66
Prelude.Maybe (Prelude.String, Prelude.Integer)
7+
CPrintType.Bar Prelude.Maybe
8+
CPrintType.Bar (Prelude.Either Prelude.Integer)
9+
CPrintType.Baz CPrintType.MyBit ?

0 commit comments

Comments
 (0)