module Data.LLVM.BitCode.IR.Attrs where
import Data.LLVM.BitCode.Bitstream
import Data.LLVM.BitCode.Match
import Data.LLVM.BitCode.Record
import Text.LLVM.AST
import Control.Monad ((<=<),mzero)
linkage :: Match Field Linkage
linkage :: Match Field Linkage
linkage = Match Int Linkage
choose Match Int Linkage -> (Field -> Maybe Int) -> Match Field Linkage
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< Field -> Maybe Int
forall a. (Num a, Bits a) => Match Field a
numeric
where
choose :: Match Int Linkage
choose :: Match Int Linkage
choose Int
n = case Int
n of
Int
0 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
External
Int
1 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Weak
Int
2 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Appending
Int
3 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Internal
Int
4 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Linkonce
Int
5 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
DLLImport
Int
6 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
DLLExport
Int
7 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
ExternWeak
Int
8 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Common
Int
9 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Private
Int
10 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
WeakODR
Int
11 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
LinkonceODR
Int
12 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
AvailableExternally
Int
13 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
LinkerPrivate
Int
14 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
LinkerPrivateWeak
Int
15 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
LinkerPrivateWeakDefAuto
Int
16 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Weak
Int
17 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
WeakODR
Int
18 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
Linkonce
Int
19 -> Linkage -> Maybe Linkage
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Linkage
LinkonceODR
Int
_ -> Maybe Linkage
forall a. Maybe a
forall (m :: * -> *) a. MonadPlus m => m a
mzero
visibility :: Match Field Visibility
visibility :: Match Field Visibility
visibility = Match Int Visibility
choose Match Int Visibility
-> (Field -> Maybe Int) -> Match Field Visibility
forall (m :: * -> *) b c a.
Monad m =>
(b -> m c) -> (a -> m b) -> a -> m c
<=< Field -> Maybe Int
forall a. (Num a, Bits a) => Match Field a
numeric
where
choose :: Match Int Visibility
choose :: Match Int Visibility
choose Int
n = case Int
n of
Int
0 -> Visibility -> Maybe Visibility
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Visibility
DefaultVisibility
Int
1 -> Visibility -> Maybe Visibility
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Visibility
HiddenVisibility
Int
2 -> Visibility -> Maybe Visibility
forall a. a -> Maybe a
forall (m :: * -> *) a. Monad m => a -> m a
return Visibility
ProtectedVisibility
Int
_ -> Maybe Visibility
forall a. Maybe a
forall (m :: * -> *) a. MonadPlus m => m a
mzero