module Data.SpirV.Enum.FunctionParameterAttribute where import Data.String (IsString(..)) import Data.Word (Word32) import Foreign (Storable(..)) import GHC.Read (Read(..)) import Text.ParserCombinators.ReadPrec (pfail) import qualified GHC.Read as Read import qualified Text.Read.Lex as Lex newtype FunctionParameterAttribute = FunctionParameterAttribute Word32 deriving (Eq, Ord, Storable) pattern Zext :: FunctionParameterAttribute pattern Zext = FunctionParameterAttribute 0 pattern Sext :: FunctionParameterAttribute pattern Sext = FunctionParameterAttribute 1 pattern ByVal :: FunctionParameterAttribute pattern ByVal = FunctionParameterAttribute 2 pattern Sret :: FunctionParameterAttribute pattern Sret = FunctionParameterAttribute 3 pattern NoAlias :: FunctionParameterAttribute pattern NoAlias = FunctionParameterAttribute 4 pattern NoCapture :: FunctionParameterAttribute pattern NoCapture = FunctionParameterAttribute 5 pattern NoWrite :: FunctionParameterAttribute pattern NoWrite = FunctionParameterAttribute 6 pattern NoReadWrite :: FunctionParameterAttribute pattern NoReadWrite = FunctionParameterAttribute 7 pattern RuntimeAlignedINTEL :: FunctionParameterAttribute pattern RuntimeAlignedINTEL = FunctionParameterAttribute 5940 toName :: IsString a => FunctionParameterAttribute -> a toName x = case x of Zext -> "Zext" Sext -> "Sext" ByVal -> "ByVal" Sret -> "Sret" NoAlias -> "NoAlias" NoCapture -> "NoCapture" NoWrite -> "NoWrite" NoReadWrite -> "NoReadWrite" RuntimeAlignedINTEL -> "RuntimeAlignedINTEL" unknown -> fromString $ "FunctionParameterAttribute " ++ show unknown instance Show FunctionParameterAttribute where show = toName fromName :: (IsString a, Eq a) => a -> Maybe FunctionParameterAttribute fromName x = case x of "Zext" -> Just Zext "Sext" -> Just Sext "ByVal" -> Just ByVal "Sret" -> Just Sret "NoAlias" -> Just NoAlias "NoCapture" -> Just NoCapture "NoWrite" -> Just NoWrite "NoReadWrite" -> Just NoReadWrite "RuntimeAlignedINTEL" -> Just RuntimeAlignedINTEL _unknown -> Nothing instance Read FunctionParameterAttribute where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s