on master help sign in
Properly add regions to port errors
42dcc29Evan Czaplicki
src/Canonicalize.hs+2−2
@@ -277,7 +277,7 @@ declaration env (A.A region decl) =
277 D.In name tipe ->
277 D.In name tipe ->
278 canonicalize Canonicalize.tipe "port" name env tipe
278 canonicalize Canonicalize.tipe "port" name env tipe
279 `Result.andThen` \canonicalType ->
279 `Result.andThen` \canonicalType ->
280− D.Port <$> Port.check name Nothing canonicalType
280+ D.Port <$> Port.check region name Nothing canonicalType
281
281
282 D.Out name expr tipe ->
282 D.Out name expr tipe ->
283 let exprTypeResult =
283 let exprTypeResult =
@@ -287,7 +287,7 @@ declaration env (A.A region decl) =
287 in
287 in
288 exprTypeResult
288 exprTypeResult
289 `Result.andThen` \(expr', tipe') ->
289 `Result.andThen` \(expr', tipe') ->
290− D.Port <$> Port.check name (Just expr') tipe'
290+ D.Port <$> Port.check region name (Just expr') tipe'
291
291
292 D.Fixity assoc prec op ->
292 D.Fixity assoc prec op ->
293 Result.ok (D.Fixity assoc prec op)
293 Result.ok (D.Fixity assoc prec op)
src/Canonicalize/Port.hs+18−14
@@ -10,30 +10,33 @@ import qualified AST.Type as T
10import qualified AST.Variable as Var
10import qualified AST.Variable as Var
11import qualified Reporting.Annotation as A
11import qualified Reporting.Annotation as A
12import qualified Reporting.Error.Canonicalize as Error
12import qualified Reporting.Error.Canonicalize as Error
13+import qualified Reporting.Region as R
13import qualified Canonicalize.Result as Result
14import qualified Canonicalize.Result as Result
14
15
15
16
16-- CHECK FOR PORT
17-- CHECK FOR PORT
17
18
18check
19check
20+ :: R.Region
19− :: String
21+ -> String
20 -> Maybe Canonical.Expr
22 -> Maybe Canonical.Expr
21 -> T.Canonical
23 -> T.Canonical
22 -> Result.ResultErr D.CanonicalPort
24 -> Result.ResultErr D.CanonicalPort
23−check name maybeExpr rootType =
25+check region name maybeExpr rootType =
24− D.CanonicalPort <$> checkHelp name maybeExpr rootType rootType
26+ D.CanonicalPort <$> checkHelp region name maybeExpr rootType rootType
25
27
26
28
27checkHelp
29checkHelp
30+ :: R.Region
28− :: String
31+ -> String
29 -> Maybe Canonical.Expr
32 -> Maybe Canonical.Expr
30 -> T.Canonical
33 -> T.Canonical
31 -> T.Canonical
34 -> T.Canonical
32 -> Result.ResultErr (E.PortImpl Canonical.Expr T.Canonical)
35 -> Result.ResultErr (E.PortImpl Canonical.Expr T.Canonical)
33−checkHelp name maybeExpr rootType tipe =
36+checkHelp region name maybeExpr rootType tipe =
34 case (maybeExpr, tipe) of
37 case (maybeExpr, tipe) of
35 (_, T.Aliased _ args t) ->
38 (_, T.Aliased _ args t) ->
36− checkHelp name maybeExpr rootType (T.dealias args t)
39+ checkHelp region name maybeExpr rootType (T.dealias args t)
37
40
38 (Just expr, T.App (T.Type task) [ _x, _a ])
41 (Just expr, T.App (T.Type task) [ _x, _a ])
39 | Var.isTask task ->
42 | Var.isTask task ->
@@ -50,37 +53,38 @@ checkHelp name maybeExpr rootType tipe =
50 case maybeExpr of
53 case maybeExpr of
51 Nothing ->
54 Nothing ->
52 const (E.In name (T.Signal rootType arg))
55 const (E.In name (T.Signal rootType arg))
53− <$> validForeignType name True arg arg
56+ <$> validForeignType region name True arg arg
54
57
55 Just expr ->
58 Just expr ->
56 const (E.Out name expr (T.Signal rootType arg))
59 const (E.Out name expr (T.Signal rootType arg))
57− <$> validForeignType name False arg arg
60+ <$> validForeignType region name False arg arg
58
61
59 _ ->
62 _ ->
60 case maybeExpr of
63 case maybeExpr of
61 Nothing ->
64 Nothing ->
62 const (E.In name (T.Normal rootType))
65 const (E.In name (T.Normal rootType))
63− <$> validForeignType name True rootType tipe
66+ <$> validForeignType region name True rootType tipe
64
67
65 Just expr ->
68 Just expr ->
66 const (E.Out name expr (T.Normal rootType))
69 const (E.Out name expr (T.Normal rootType))
67− <$> validForeignType name False rootType tipe
70+ <$> validForeignType region name False rootType tipe
68
71
69
72
70-- CHECK INBOUND AND OUTBOUND TYPES
73-- CHECK INBOUND AND OUTBOUND TYPES
71
74
72validForeignType
75validForeignType
76+ :: R.Region
73− :: String
77+ -> String
74 -> Bool
78 -> Bool
75 -> T.Canonical
79 -> T.Canonical
76 -> T.Canonical
80 -> T.Canonical
77 -> Result.ResultErr ()
81 -> Result.ResultErr ()
78−validForeignType name isInbound rootType tipe =
82+validForeignType region name isInbound rootType tipe =
79 let valid localType =
83 let valid localType =
80− validForeignType name isInbound rootType localType
84+ validForeignType region name isInbound rootType localType
81
85
82 err problem =
86 err problem =
83− Result.err $ A.A undefined $
87+ Result.err $ A.A region $
84 Error.port name isInbound rootType tipe problem
88 Error.port name isInbound rootType tipe problem
85 in
89 in
86 case tipe of
90 case tipe of