X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fmain%2FParsePkgConf.y;h=c61d31c80f7a2c14747e8c653f7d2bac8a74bf97;hb=e8964a486b2d0915617116eedf8b34670d443fbf;hp=a3e569dd28c63769e755150d611e5dfa944967c9;hpb=f86cb6a687090154668d2290c21ea6609fda5936;p=ghc-hetmet.git diff --git a/ghc/compiler/main/ParsePkgConf.y b/ghc/compiler/main/ParsePkgConf.y index a3e569d..c61d31c 100644 --- a/ghc/compiler/main/ParsePkgConf.y +++ b/ghc/compiler/main/ParsePkgConf.y @@ -1,12 +1,17 @@ { -module ParsePkgConf (parsePkgConf) where -import CmStaticInfo +module ParsePkgConf( loadPackageConfig ) where + +import Packages ( PackageConfig(..), defaultPackageConfig ) import Lex import FastString import StringBuffer import SrcLoc import Outputable +import Panic ( GhcException(..) ) +import Exception ( throwDyn ) + #include "HsVersions.h" + } %token @@ -26,21 +31,21 @@ import Outputable %tokentype { Token } %% -pkgconf :: { [ Package ] } +pkgconf :: { [ PackageConfig ] } : '[' pkgs ']' { reverse $2 } -pkgs :: { [ Package ] } +pkgs :: { [ PackageConfig ] } : pkg { [ $1 ] } | pkgs ',' pkg { $3 : $1 } -pkg :: { Package } - : CONID '{' fields '}' { $3 defaultPackage } +pkg :: { PackageConfig } + : CONID '{' fields '}' { $3 defaultPackageConfig } -fields :: { Package -> Package } +fields :: { PackageConfig -> PackageConfig } : field { \p -> $1 p } | fields ',' field { \p -> $1 ($3 p) } -field :: { Package -> Package } +field :: { PackageConfig -> PackageConfig } : VARID '=' STRING {\p -> case unpackFS $1 of "name" -> p{name = unpackFS $3} } @@ -72,17 +77,17 @@ strs :: { [String] } happyError :: P a happyError buf PState{ loc = loc } = PFailed (srcParseErr buf loc) -parsePkgConf :: FilePath -> IO (Either SDoc [Package]) -parsePkgConf conf_filename = do +loadPackageConfig :: FilePath -> IO [PackageConfig] +loadPackageConfig conf_filename = do buf <- hGetStringBuffer False conf_filename case parse buf PState{ bol = 0#, atbol = 1#, context = [], glasgow_exts = 0#, loc = mkSrcLoc (_PK_ conf_filename) 1 } of PFailed err -> do freeStringBuffer buf - return (Left err) + throwDyn (InstallationError (showSDoc err)) POk _ pkg_details -> do freeStringBuffer buf - return (Right pkg_details) + return pkg_details }