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 = choose <=< numeric
where
choose :: Match Int Linkage
choose n = case n of
0 -> return External
1 -> return Weak
2 -> return Appending
3 -> return Internal
4 -> return Linkonce
5 -> return DLLImport
6 -> return DLLExport
7 -> return ExternWeak
8 -> return Common
9 -> return Private
10 -> return WeakODR
11 -> return LinkonceODR
12 -> return AvailableExternally
13 -> return LinkerPrivate
14 -> return LinkerPrivateWeak
15 -> return LinkerPrivateWeakDefAuto
16 -> return Weak
17 -> return WeakODR
18 -> return Linkonce
19 -> return LinkonceODR
_ -> mzero