X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fparser%2FParserCoreUtils.hs;h=8f67d962396d602506804e8cf5e3a8637af9e6b8;hp=4aa33410bc4c3cb0ed776640cd5c4c634fc1aef2;hb=2d4d636af091b8da27466b5cf90011395a9c2f66;hpb=819d8189dddeb05e881bc641f0a6ab2cd14ee1ad diff --git a/compiler/parser/ParserCoreUtils.hs b/compiler/parser/ParserCoreUtils.hs index 4aa3341..8f67d96 100644 --- a/compiler/parser/ParserCoreUtils.hs +++ b/compiler/parser/ParserCoreUtils.hs @@ -1,6 +1,7 @@ module ParserCoreUtils where -import IO +import Exception +import System.IO data ParseResult a = OkP a | FailP String type P a = String -> Int -> ParseResult a @@ -19,7 +20,7 @@ failP s s' _ = FailP (s ++ ":" ++ s') getCoreModuleName :: FilePath -> IO String getCoreModuleName fpath = - catch (do + catchIO (do h <- openFile fpath ReadMode ls <- hGetContents h let mo = findMod (words ls) @@ -30,6 +31,7 @@ getCoreModuleName fpath = (\ _ -> return "Main") where findMod [] = "Main" + -- TODO: this should just return the module name, without the package name findMod ("%module":m:_) = m findMod (_:xs) = findMod xs @@ -47,6 +49,7 @@ data Token = | TKcast | TKnote | TKexternal + | TKlocal | TKwild | TKoparen | TKcparen @@ -54,7 +57,9 @@ data Token = | TKcbrace | TKhash | TKeq + | TKcolon | TKcoloncolon + | TKcoloneqcolon | TKstar | TKrarrow | TKlambda