@@ -13,30 +13,35 @@ crawlLet
13 -> Expr ann def var
13 -> Expr ann def var
14 -> Either a (Expr ann def' var)
14 -> Either a (Expr ann def' var)
16− crawl (\_ _ -> return ()) (\_ _ -> return ())
17+ (\_ _ -> return ())
19+ (\_ _ _ -> return ())
20 :: (String -> CanonicalType -> Either a ())
23 :: (String -> CanonicalType -> Either a ())
21 -> (String -> CanonicalType -> Either a ())
24 -> (String -> CanonicalType -> Either a ())
25+ -> (String -> CanonicalType -> Bool -> Either a ())
22 -> Canonical.Expr
26 -> Canonical.Expr
23 -> Either a Canonical.Expr
27 -> Either a Canonical.Expr
24−checkWires inputCheck outputCheck expr =
28+checkWires inputCheck outputCheck loopbackCheck expr =
25− crawl inputCheck outputCheck (mapM checkDef) expr
29+ crawl inputCheck outputCheck loopbackCheck (mapM checkDef) expr
27 checkDef def@(Canonical.Definition _ body _) =
31 checkDef def@(Canonical.Definition _ body _) =
28− do _ <- checkWires inputCheck outputCheck body
32+ do _ <- checkWires inputCheck outputCheck loopbackCheck body
29 return def
33 return def
33 :: (String -> Type var -> Either a ())
37 :: (String -> Type var -> Either a ())
34 -> (String -> Type var -> Either a ())
38 -> (String -> Type var -> Either a ())
39+ -> (String -> Type var -> Bool -> Either a ())
35 -> ([def] -> Either a [def'])
40 -> ([def] -> Either a [def'])
36 -> Expr ann def var
41 -> Expr ann def var
37 -> Either a (Expr ann def' var)
42 -> Either a (Expr ann def' var)
38−crawl inputCheck outputCheck defsTransform =
43+crawl inputCheck outputCheck loopbackCheck defsTransform expression =
41 go (A srcSpan expr) =
46 go (A srcSpan expr) =
42 A srcSpan <$>
47 A srcSpan <$>
@@ -101,8 +106,10 @@ crawl inputCheck outputCheck defsTransform =
101 Output name st <$> go signal
106 Output name st <$> go signal
103 Loopback name st maybeExpr ->
108 Loopback name st maybeExpr ->
109+ do let hasExpr = maybe False (const True) maybeExpr
110+ loopbackCheck name st hasExpr
104− case maybeExpr of
111+ case maybeExpr of
105− Nothing ->
112+ Nothing ->
106− error "loopback check"
113+ return (Loopback name st Nothing)
107− Just expr ->
114+ Just expr ->
108− error "loopback check"
115+ (Loopback name st . Just) <$> go expr