[project @ 2001-08-03 20:40:43 by sof]
[ghc-hetmet.git] / ghc / compiler / main / ParsePkgConf.y
index a3e569d..c61d31c 100644 (file)
@@ -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
 }