X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fmain%2FParsePkgConf.y;h=d05a6d54c050566120af9aedebcbcad21926b0e2;hb=72547264724117d689a7fa400104185557fb2a0c;hp=ac0cebbf6471ad5218e3c4d90fcafab5c6682101;hpb=a8624a9d185bd3d08d318596e134042224859a6b;p=ghc-hetmet.git diff --git a/compiler/main/ParsePkgConf.y b/compiler/main/ParsePkgConf.y index ac0cebb..d05a6d5 100644 --- a/compiler/main/ParsePkgConf.y +++ b/compiler/main/ParsePkgConf.y @@ -1,5 +1,5 @@ { -{-# OPTIONS -fno-warn-unused-binds -fno-warn-unused-matches -fno-warn-missing-signatures #-} +{-# OPTIONS -fno-warn-unused-binds -fno-warn-unused-matches -fno-warn-missing-signatures -fno-warn-incomplete-patterns -Wwarn #-} -- The above warning supression flag is a temporary kludge. -- While working on this module you are encouraged to remove it and fix -- any warnings in the module. See @@ -10,6 +10,7 @@ module ParsePkgConf( loadPackageConfig ) where #include "HsVersions.h" +import Distribution.Package hiding ( depends ) import PackageConfig import Lexer import Module @@ -19,11 +20,12 @@ import StringBuffer import ErrUtils ( mkLocMessage ) import SrcLoc import Outputable -import Panic ( GhcException(..) ) -import Control.Exception ( throwDyn ) +import Panic } +%expect 0 + %token '{' { L _ ITocurly } '}' { L _ ITccurly } @@ -79,8 +81,12 @@ field :: { PackageConfig -> PackageConfig } _ -> happyError } } - | VARID '=' CONID STRING { id } - -- another case of license + | VARID '=' CONID STRING + { \p -> case unpackFS $1 of + "installedPackageId" -> + p{installedPackageId = InstalledPackageId (unpackFS $4)} + _ -> p -- another case of license + } | VARID '=' strlist {\p -> case unpackFS $1 of @@ -105,29 +111,42 @@ field :: { PackageConfig -> PackageConfig } _ -> p } - | VARID '=' pkgidlist + | VARID '=' ipidlist {% case unpackFS $1 of "depends" -> return (\p -> p{depends = $3}) _ -> happyError } pkgid :: { PackageIdentifier } - : CONID '{' VARID '=' STRING ',' VARID '=' version '}' - { PackageIdentifier{ pkgName = unpackFS $5, - pkgVersion = $9 } } + : CONID '{' VARID '=' CONID STRING ',' VARID '=' version '}' + {% case unpackFS $5 of + "PackageName" -> + return $ PackageIdentifier { + pkgName = PackageName (unpackFS $6), + pkgVersion = $10 + } + _ -> happyError + } version :: { Version } : CONID '{' VARID '=' intlist ',' VARID '=' strlist '}' { Version{ versionBranch=$5, versionTags=map unpackFS $9 } } -pkgidlist :: { [PackageIdentifier] } - : '[' pkgids ']' { $2 } +ipid :: { InstalledPackageId } + : CONID STRING + {% case unpackFS $1 of + "InstalledPackageId" -> return (InstalledPackageId (unpackFS $2)) + _ -> happyError + } + +ipidlist :: { [InstalledPackageId] } + : '[' ipids ']' { $2 } -- empty list case is covered by strlist, to avoid conflicts -pkgids :: { [PackageIdentifier] } - : pkgid { [ $1 ] } - | pkgid ',' pkgids { $1 : $3 } +ipids :: { [InstalledPackageId] } + : ipid { [ $1 ] } + | ipid ',' ipids { $1 : $3 } intlist :: { [Int] } : '[' ']' { [] } @@ -155,7 +174,7 @@ loadPackageConfig dflags conf_filename = do let loc = mkSrcLoc (mkFastString conf_filename) 1 0 case unP parse (mkPState buf loc dflags) of PFailed span err -> - throwDyn (InstallationError (showSDoc (mkLocMessage span err))) + ghcError (InstallationError (showSDoc (mkLocMessage span err))) POk _ pkg_details -> do return pkg_details