on master help sign in
Actually show error message for bad FFI imports and exports.
0f76e16evancz
compiler/Parse/Foreign.hs+8−8
@@ -12,21 +12,21 @@ import Parse.Types
12import Types.Types (signalOf)
12import Types.Types (signalOf)
13
13
14foreignDef = do try (reserved "foreign") ; whitespace
14foreignDef = do try (reserved "foreign") ; whitespace
15− try importEvent <|> exportEvent
15+ importEvent <|> exportEvent
16
16
17exportEvent = do
17exportEvent = do
18− reserved "export" >> whitespace >> reserved "jsevent" >> whitespace
18+ try (reserved "export") >> whitespace >> reserved "jsevent" >> whitespace
19 js <- jsVar ; whitespace
19 js <- jsVar ; whitespace
20 elm <- lowVar ; whitespace
20 elm <- lowVar ; whitespace
21 hasType ; whitespace
21 hasType ; whitespace
22 tipe <- typeExpr
22 tipe <- typeExpr
23 case tipe of
23 case tipe of
24 ADTPT "Signal" [pt] ->
24 ADTPT "Signal" [pt] ->
25− either fail (return . ExportEvent js elm . signalOf) (toForeignType pt)
25+ either error (return . ExportEvent js elm . signalOf) (toForeignType pt)
26− _ -> fail "When exporting events, the exported value must be a Signal."
26+ _ -> error "When exporting events, the exported value must be a Signal."
27
27
28importEvent = do
28importEvent = do
29− reserved "import" >> whitespace >> reserved "jsevent" >> whitespace
29+ try (reserved "import") >> whitespace >> reserved "jsevent" >> whitespace
30 js <- jsVar ; whitespace
30 js <- jsVar ; whitespace
31 base <- term <?> "Base case for imported signal (signals cannot be undefined)"
31 base <- term <?> "Base case for imported signal (signals cannot be undefined)"
32 whitespace
32 whitespace
@@ -35,15 +35,15 @@ importEvent = do
35 tipe <- typeExpr
35 tipe <- typeExpr
36 case tipe of
36 case tipe of
37 ADTPT "Signal" [pt] ->
37 ADTPT "Signal" [pt] ->
38− either fail (return . ImportEvent js base elm . signalOf) (toForeignType pt)
38+ either error (return . ImportEvent js base elm . signalOf) (toForeignType pt)
39− _ -> fail "When importing events, the imported value must be a Signal."
39+ _ -> error "When importing events, the imported value must be a Signal."
40
40
41
41
42jsVar :: (Monad m) => ParsecT [Char] u m String
42jsVar :: (Monad m) => ParsecT [Char] u m String
43jsVar = betwixt '"' '"' $ do
43jsVar = betwixt '"' '"' $ do
44 v <- (:) <$> (letter <|> char '_') <*> many (alphaNum <|> char '_')
44 v <- (:) <$> (letter <|> char '_') <*> many (alphaNum <|> char '_')
45 if v `notElem` jsReserveds then return v else
45 if v `notElem` jsReserveds then return v else
46− fail $ "'" ++ v ++
46+ error $ "'" ++ v ++
47 "' is not a good name for a importing or exporting JS values."
47 "' is not a good name for a importing or exporting JS values."
48
48
49jsReserveds =
49jsReserveds =