jvm-binary-0.9.0: src/Language/JVM/AccessFlag.hs
{-|
Module : Language.JVM.AccessFlag
Copyright : (c) Christian Gram Kalhauge, 2017
License : MIT
Maintainer : kalhuage@cs.ucla.edu
Contains the AccessFlags used in the different modules.
-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DeriveAnyClass #-}
module Language.JVM.AccessFlag
( MAccessFlag(..)
, mflags
, FAccessFlag(..)
, fflags
, CAccessFlag(..)
, cflags
, ICAccessFlag(..)
, icflags
, PAccessFlag(..)
, pflags
)
where
import Language.JVM.Utils
import GHC.Generics ( Generic )
import Control.DeepSeq ( NFData )
-- | Access flags for the 'Language.JVM.Method.Method'
data MAccessFlag
= MPublic
| MPrivate
| MProtected
| MStatic
| MFinal
| MSynchronized
| MBridge
| MVarargs
| MNative
| MAbstract
| MStrictFP
| MSynthetic
deriving (Ord, Show, Eq, NFData, Generic)
-- | The 'Enumish' mapping of the 'MAccessFlag'
mflags :: [(Int, MAccessFlag)]
mflags =
[ (0 , MPublic)
, (1 , MPrivate)
, (2 , MProtected)
, (3 , MStatic)
, (4 , MFinal)
, (5 , MSynchronized)
, (6 , MBridge)
, (7 , MVarargs)
, (8 , MNative)
, (10, MAbstract)
, (11, MStrictFP)
, (12, MSynthetic)
]
instance Enumish MAccessFlag where
inOrder = mflags
-- | Access flags for the 'Language.JVM.ClassFile.ClassFile'
data CAccessFlag
= CPublic
| CFinal
| CSuper
| CInterface
| CAbstract
| CSynthetic
| CAnnotation
| CEnum
| CModule
deriving (Ord, Show, Eq, NFData, Generic)
-- | The 'Enumish' mapping of the 'CAccessFlag'
cflags :: [(Int, CAccessFlag)]
cflags =
[ (0 , CPublic)
, (4 , CFinal)
, (5 , CSuper)
, (9 , CInterface)
, (10, CAbstract)
, (12, CSynthetic)
, (13, CAnnotation)
, (14, CEnum)
, (15, CModule)
]
instance Enumish CAccessFlag where
inOrder = cflags
-- | Access flags for the 'Language.JVM.Attribute.InnerClass'
data ICAccessFlag
= ICPublic
| ICPrivate
| ICProtected
| ICStatic
| ICFinal
| ICInterface
| ICAbstract
| ICSynthetic
| ICAnnotation
| ICEnum
deriving (Ord, Show, Eq, NFData, Generic)
-- | The 'Enumish' mapping of the 'CAccessFlag'
icflags :: [(Int, ICAccessFlag)]
icflags =
[ (0 , ICPublic)
, (1 , ICPrivate)
, (2 , ICProtected)
, (3 , ICStatic)
, (4 , ICFinal)
, (9 , ICInterface)
, (10, ICAbstract)
, (12, ICSynthetic)
, (13, ICAnnotation)
, (14, ICEnum)
]
instance Enumish ICAccessFlag where
inOrder = icflags
-- | Access flags for the 'Language.JVM.Field.Field'
data FAccessFlag
= FPublic
| FPrivate
| FProtected
| FStatic
| FFinal
| FVolatile
| FTransient
| FSynthetic
| FEnum
deriving (Ord, Show, Eq, NFData, Generic)
-- | The 'Enumish' mapping of the 'FAccessFlag'
fflags :: [(Int, FAccessFlag)]
fflags =
[ (0 , FPublic)
, (1 , FPrivate)
, (2 , FProtected)
, (3 , FStatic)
, (4 , FFinal)
, (6 , FVolatile)
, (7 , FTransient)
, (12, FSynthetic)
, (14, FEnum)
]
instance Enumish FAccessFlag where
inOrder = fflags
-- | Access flags for parameters, as declared in the documentation.
data PAccessFlag
= PFinal
-- ^ Indicates that the formal parameter was declared final.
| PSynthetic
-- ^ Indicates that the formal parameter was not explicitly or
-- implicitly declared in source code, according to the specification
-- of the language in which the source code was written (JLS §13.1).
-- (The formal parameter is an implementation artifact of the compiler
-- which produced this class file.)
| PMandated
-- ^ Indicates that the formal parameter was implicitly declared in
-- source code, according to the specification of the language in which
-- the source code was written (JLS §13.1). (The formal parameter is
-- mandated by a language specification, so all compilers for the
-- language must emit it.)
deriving (Ord, Show, Eq, NFData, Generic)
instance Enumish PAccessFlag where
inOrder = pflags
-- | The 'Enumish' mapping of the 'PAccessFlag'
pflags :: [(Int, PAccessFlag)]
pflags = [(4, PFinal), (12, PSynthetic), (15, PMandated)]