@@ -11,11 +11,11 @@ import AST.PrettyPrint
11import Text.PrettyPrint as P
11import Text.PrettyPrint as P
14−data Declaration' port def var
14+data Declaration' wire def var
15 = Definition def
15 = Definition def
16 | Datatype String [String] [(String, [T.Type var])]
16 | Datatype String [String] [(String, [T.Type var])]
17 | TypeAlias String [String] (T.Type var)
17 | TypeAlias String [String] (T.Type var)
18− | Port port
18+ | Wire wire
19 | Fixity Assoc Int String
19 | Fixity Assoc Int String
@@ -23,34 +23,38 @@ data Assoc = L | N | R
23 deriving (Eq)
23 deriving (Eq)
26−data RawPort
26+data RawWire
27 = InputAnnotation String T.RawType
27 = InputAnnotation String T.RawType
28 | OutputAnnotation String T.RawType
28 | OutputAnnotation String T.RawType
29+ | OutputDefinition String Source.Expr
30+ | LoopbackAnnotation String T.RawType
29− | OutputDef String Source.Expr
31+ | LoopbackDefinition String Source.Expr
32−data Port expr var
34+data Wire expr var
33− = Out String expr (T.Type var)
35+ = Output String expr (T.Type var)
34− | In String (T.Type var)
36+ | Input String (T.Type var)
37+ | Loopback String (Maybe expr) (T.Type var)
37type SourceDecl =
40type SourceDecl =
38− Declaration' RawPort Source.Def Var.Raw
41+ Declaration' RawWire Source.Def Var.Raw
41type ValidDecl =
44type ValidDecl =
42− Declaration' (Port Valid.Expr Var.Raw) Valid.Def Var.Raw
45+ Declaration' (Wire Valid.Expr Var.Raw) Valid.Def Var.Raw
45type CanonicalDecl =
48type CanonicalDecl =
46− Declaration' (Port Canonical.Expr Var.Canonical) Canonical.Def Var.Canonical
49+ Declaration' (Wire Canonical.Expr Var.Canonical) Canonical.Def Var.Canonical
49−portName :: Port expr var -> String
52+wireName :: Wire expr var -> String
50−portName port =
53+wireName wire =
51− case port of
54+ case wire of
52− Out name _ _ -> name
55+ Input name _ -> name
56+ Output name _ _ -> name
53− In name _ -> name
57+ Loopback name _ _ -> name
56assocToString :: Assoc -> String
60assocToString :: Assoc -> String
@@ -82,8 +86,8 @@ instance Binary Assoc where
83-- PRETTY STRINGS
87-- PRETTY STRINGS
85−instance (Pretty port, Pretty def, Pretty var, Var.ToString var) =>
89+instance (Pretty wire, Pretty def, Pretty var, Var.ToString var) =>
86− Pretty (Declaration' port def var) where
90+ Pretty (Declaration' wire def var) where
87 pretty decl =
91 pretty decl =
88 case decl of
92 case decl of
89 Definition def -> pretty def
93 Definition def -> pretty def
@@ -109,7 +113,7 @@ instance (Pretty port, Pretty def, Pretty var, Var.ToString var) =>
110 P.text name <+> P.hsep (map P.text tvars)
114 P.text name <+> P.hsep (map P.text tvars)
112− Port port -> pretty port
116+ Wire wire -> pretty wire
114 Fixity assoc prec op ->
118 Fixity assoc prec op ->
115 P.text "infix" <> assoc' <+> P.int prec <+> P.text op
119 P.text "infix" <> assoc' <+> P.int prec <+> P.text op
@@ -121,32 +125,48 @@ instance (Pretty port, Pretty def, Pretty var, Var.ToString var) =>
121 R -> P.text "r"
125 R -> P.text "r"
124−instance Pretty RawPort where
128+instance Pretty RawWire where
125− pretty port =
129+ pretty wire =
126− case port of
130+ case wire of
127 InputAnnotation name tipe ->
131 InputAnnotation name tipe ->
128− prettyPort "input" name ":" tipe
132+ prettyWire "input" name ":" tipe
130 OutputAnnotation name tipe ->
134 OutputAnnotation name tipe ->
131− prettyPort "output" name ":" tipe
135+ prettyWire "output" name ":" tipe
133− OutputDef name expr ->
137+ OutputDefinition name expr ->
134− prettyPort "output" name "=" expr
138+ prettyWire "output" name "=" expr
140+ LoopbackAnnotation name tipe ->
141+ prettyWire "loopback" name ":" tipe
137−instance (Pretty expr, Pretty var, Var.ToString var) => Pretty (Port expr var) where
143+ LoopbackDefinition name expr ->
138− pretty port =
144+ prettyWire "loopback" name "=" expr
141− prettyPort "input" name ":" tipe
147+instance (Pretty expr, Pretty var, Var.ToString var) => Pretty (Wire expr var) where
151+ prettyWire "input" name ":" tipe
143− Out name expr tipe ->
153+ Output name expr tipe ->
155+ [ prettyWire "output" name ":" tipe
156+ , prettyWire "output" name "=" expr
159+ Loopback name maybeExpr tipe ->
145− [ prettyPort "output" name ":" tipe
161+ [ prettyWire "loopback" name ":" tipe
146− , prettyPort "output" name "=" expr
162+ , case maybeExpr of
164+ prettyWire "loopback" name "=" expr
150−prettyPort :: (Pretty a) => String -> String -> String -> a -> Doc
170+prettyWire :: (Pretty a) => String -> String -> String -> a -> Doc
151−prettyPort keyword name op e =
171+prettyWire keyword name op e =
152 P.text keyword <+> P.text name <+> P.text op <+> pretty e
172 P.text keyword <+> P.text name <+> P.text op <+> pretty e