Copyright | (c) 2013-2016 Galois Inc. |
---|---|
License | BSD3 |
Maintainer | cryptol@galois.com |
Stability | provisional |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Cryptol.ModuleSystem.Renamer.Monad
Description
Synopsis
- data NameType
- data RenamerInfo = RenamerInfo {}
- newtype RenameM a = RenameM {}
- data RO = RO {
- roLoc :: Range
- roNames :: NamingEnv
- roExternal :: Map ModName (Maybe Iface, Map (ImpName Name) (Mod ()))
- roCurMod :: ModPath
- roNestedMods :: Map ModPath Name
- roResolvedModules :: Map (ImpName Name) ResolvedLocal
- roModParams :: Map Ident RenModParam
- roFromModParam :: Map Name DepName
- data RW = RW {
- rwWarnings :: ![RenamerWarning]
- rwErrors :: !(Set RenamerError)
- rwSupply :: !Supply
- rwNameUseCount :: !(Map Name Int)
- rwCurrentDeps :: Set Name
- rwDepGraph :: Map DepName (Set Name)
- rwExternalDeps :: !IfaceDecls
- data RenModParam = RenModParam {}
- runRenamer :: RenamerInfo -> RenameM a -> (Either [RenamerError] (a, Supply), [RenamerWarning])
- setCurMod :: ModPath -> RenameM a -> RenameM a
- getCurMod :: RenameM ModPath
- getNamingEnv :: RenameM NamingEnv
- setResolvedLocals :: Map (ImpName Name) ResolvedLocal -> RenameM a -> RenameM a
- lookupResolved :: ImpName Name -> RenameM ResolvedLocal
- setModParams :: [RenModParam] -> RenameM a -> RenameM a
- foldLoop :: [a] -> b -> (a -> b -> b) -> b
- getModParam :: Ident -> RenameM RenModParam
- getNamesFromModParams :: RenameM (Map Name DepName)
- getLocalModParamDeps :: RenameM (Map Ident DepName)
- setNestedModule :: Map ModPath Name -> RenameM a -> RenameM a
- nestedModuleOrig :: ModPath -> RenameM (Maybe Name)
- recordError :: RenamerError -> RenameM ()
- recordWarning :: RenamerWarning -> RenameM ()
- collectIfaceDeps :: RenameM a -> RenameM (IfaceDecls, a)
- depsOf :: DepName -> RenameM a -> RenameM a
- depGroup :: RenameM a -> RenameM (a, Map DepName (Set Name))
- curLoc :: RenameM Range
- located :: a -> RenameM (Located a)
- withLoc :: HasLoc loc => loc -> RenameM a -> RenameM a
- shadowNames :: BindsNames env => env -> RenameM a -> RenameM a
- data EnvCheck
- checkOverlap :: NamingEnv -> RenameM NamingEnv
- checkShadowing :: NamingEnv -> NamingEnv -> RenameM ()
- shadowNames' :: BindsNames env => EnvCheck -> env -> RenameM a -> RenameM a
- recordUse :: Name -> RenameM ()
- addDep :: Name -> RenameM ()
- warnUnused :: ModPath -> NamingEnv -> RW -> [RenamerWarning]
- getExternal :: RenameM (ImpName Name -> Mod ())
- getExternalMod :: ImpName Name -> RenameM (Mod ())
- getTopModuleIface :: ImpName Name -> RenameM (Maybe Iface)
- recordImport :: Range -> ImpName Name -> RenameM ()
- lookupModuleThing :: ImpName Name -> RenameM (Either ResolvedLocal (Mod ()))
- lookupDefines :: ImpName Name -> RenameM NamingEnv
- checkIsModule :: Range -> ImpName Name -> ModKind -> RenameM ()
- lookupDefinesAndSubs :: ImpName Name -> RenameM (NamingEnv, Set Name)
Documentation
Indicates if a name is in a binding poisition or a use site
Constructors
RO | |
Fields
|
Constructors
RW | |
Fields
|
data RenModParam Source #
Constructors
RenModParam | |
Fields
|
runRenamer :: RenamerInfo -> RenameM a -> (Either [RenamerError] (a, Supply), [RenamerWarning]) Source #
setResolvedLocals :: Map (ImpName Name) ResolvedLocal -> RenameM a -> RenameM a Source #
setModParams :: [RenModParam] -> RenameM a -> RenameM a Source #
getModParam :: Ident -> RenameM RenModParam Source #
recordError :: RenamerError -> RenameM () Source #
Record an error.
recordWarning :: RenamerWarning -> RenameM () Source #
collectIfaceDeps :: RenameM a -> RenameM (IfaceDecls, a) Source #
depsOf :: DepName -> RenameM a -> RenameM a Source #
Rename something. All name uses in the sub-computation are assumed to be dependenices of the thing.
depGroup :: RenameM a -> RenameM (a, Map DepName (Set Name)) Source #
This is used when renaming a group of things. The result contains dependencies between names defined in the group, and is intended to be used to order the group members in dependency order.
withLoc :: HasLoc loc => loc -> RenameM a -> RenameM a Source #
Do the given computation using the source code range from loc
if any.
shadowNames :: BindsNames env => env -> RenameM a -> RenameM a Source #
Shadow the current naming environment with some more names.
Constructors
CheckAll | Check for overlap and shadowing |
CheckOverlap | Only check for overlap |
CheckNone | Don't check the environment |
checkOverlap :: NamingEnv -> RenameM NamingEnv Source #
Report errors if the given naming environemnt contains multiple definitions for the same symbol
checkShadowing :: NamingEnv -> NamingEnv -> RenameM () Source #
Issue warnings if entries in the first environment would shadow something in the second.
shadowNames' :: BindsNames env => EnvCheck -> env -> RenameM a -> RenameM a Source #
Shadow the current naming environment with some more names. XXX: The checks are really confusing
addDep :: Name -> RenameM () Source #
Mark something as a dependency. This is similar but different from
recordUse
, in particular:
* We only record use sites, not bindings
* We record all namespaces, not just types
* We only keep track of actual uses mentioned in the code.
Otoh, recordUse
also considers exported entities to be used.
* If we depend on a name from a sibling submodule we add a dependency on
the module in our common ancestor. Examples:
- A::B::x
depends on A::B::C::D::y
, x
depends on A::B::C
- A::B::x
depends on A::P::Q::y
,
x depends on
A::P@
warnUnused :: ModPath -> NamingEnv -> RW -> [RenamerWarning] Source #
getTopModuleIface :: ImpName Name -> RenameM (Maybe Iface) Source #
Returns Nothing
if the name does not refer to a module (i.e., it is a sig)
recordImport :: Range -> ImpName Name -> RenameM () Source #
Record an import: * record external dependency if the name refers to an external import * record an error if the imported thing is a functor
lookupModuleThing :: ImpName Name -> RenameM (Either ResolvedLocal (Mod ())) Source #
Lookup a name either in the locally resolved thing or in an external module