-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A library for reading Java class-files
--
-- A library for reading Java class-files.
@package jvm-binary
@version 0.9.0
-- | This module contains the stages, there are two stages; Low and
-- High. Low represents closest to the metal and
-- High represents closer to the conceptual representation.
module Language.JVM.Stage
-- | Any data structure that is in the low stage should be serializable
-- using the binary library.
data Low
-- | Any data structure in the High stage, is easier to read.
data High
-- | A reference is a choice between an index and a value.
type Ref v r = Choice Index v r
-- | An index into the constant pool.
type Index = Word16
-- | A deep reference points to something that itself is staged.
type DeepRef v r = Ref (v r) r
-- | The basic part of the stage system is the choice. The Choice
-- chooses between two types depending on the stage.
type family Choice a b r
-- | This module contains some Template Haskell functions for internal use.
module Language.JVM.TH
-- | Derives the NFData, Show, Eq, and Generic
-- from something that is Staged
deriveBase :: Name -> Q [Dec]
-- | Derives the bases of a list of names
deriveBases :: [Name] -> Q [Dec]
-- | Derives the NFData, Show, Eq, and Generic
-- from something that is Staged
deriveThese :: Name -> [Name] -> Q [Dec]
-- | Derives the NFData, Show, Eq, and Generic
-- from something that is Staged
deriveBaseWithBinary :: Name -> Q [Dec]
-- | This module can parse and serialize text to structures
module Language.JVM.TextSerializable
-- | A class that indicates that something can be turned from and to text.
class TextSerializable a
-- | A TypeParse should be parsable
parseText :: TextSerializable a => Parser a
-- | A TypeParse should be printable
toBuilder :: TextSerializable a => a -> Builder
-- | Parse a type from text
deserialize :: TextSerializable a => Text -> Either String a
-- | Print a type from text
serialize :: TextSerializable a => a -> Text
-- | Parse a type from text
deserializeWith :: Parser a -> Text -> Either String a
-- | Print a type from text
serializeWith :: (a -> Builder) -> a -> Text
showViaTextSerializable :: TextSerializable a => a -> String
fromStringViaTextSerializable :: TextSerializable a => String -> a
deriveFromTextSerializable :: Name -> Q [Dec]
-- | This module contains the JType, ClassName,
-- MethodDescriptor, and FieldDescriptor.
module Language.JVM.Type
-- | A class name
data ClassName
-- | Parses a ClassName from Text, might fail.
textCls :: Text -> Either String ClassName
-- | Parses a ClassName from String, might fail with an exception.
-- *warning* Unpure.
textClsOrFail :: Text -> ClassName
-- | Parses a ClassName from String, might fail with an exception.
-- *warning* Unpure.
strClsOrFail :: String -> ClassName
-- | Takes the dot representation and converts it into a class.
dotCls :: Text -> Either String ClassName
-- | Converts a text directly into a ClassName, will fail silently and
-- might corrupt data.
unsafeTextCls :: Text -> ClassName
-- | Parse a ClassName, should not be any of '.;[<>:',
--
--
-- >>> deserialize parseClassName "java/lang/Object"
-- Right "java/lang/Object"
--
--
--
-- >>> deserialize parseClassName "java;"
-- Left "endOfInput"
--
parseClassName :: Parser ClassName
-- | Display a ClassName
serializeClassName :: ClassName -> Builder
-- | A JType is either a simple type or a Reftype
data JType
JTBase :: !JBaseType -> JType
JTRef :: !JRefType -> JType
-- | jTypes also have different sizes.
jTypeSize :: JType -> Int
-- | Parse a JType
parseJType :: Parser JType
-- | Serialize JType
serializeJType :: JType -> Builder
-- | The Jvm Primitive Types
data JBaseType
JTByte :: JBaseType
JTChar :: JBaseType
JTDouble :: JBaseType
JTFloat :: JBaseType
JTInt :: JBaseType
JTLong :: JBaseType
JTShort :: JBaseType
JTBoolean :: JBaseType
-- | Get the corresponding Char of a JBaseType
jBaseTypeToChar :: JBaseType -> Char
-- | Doubles and Longs have size two in the stack.
jBaseTypeSize :: JBaseType -> Int
-- | Parse a JBaseType
parseJBaseType :: Parser JBaseType
-- | Serializes JBaseType
serializeJBaseType :: JBaseType -> Builder
-- | A JRefType is a Class or an Array.
data JRefType
JTClass :: !ClassName -> JRefType
JTArray :: !JType -> JRefType
-- | The number of nested arrays
refTypeDepth :: JRefType -> Int
-- | Parses a JRefType
parseJRefType :: Parser JRefType
serializeJRefType :: JRefType -> Builder
-- | Parses a JRefType but does not require an L infront of
-- the class name, and ';' >>> deserialize parseFlatJRefType
-- "javalangObject" Right "LjavalangObject;" >>>
-- deserialize parseFlatJRefType "[I" Right "[I"
parseFlatJRefType :: Parser JRefType
serializeFlatJRefType :: JRefType -> Builder
-- | Method Descriptor
data MethodDescriptor
MethodDescriptor :: ![JType] -> !ReturnDescriptor -> MethodDescriptor
[methodDescriptorArguments] :: MethodDescriptor -> ![JType]
[methodDescriptorReturnType] :: MethodDescriptor -> !ReturnDescriptor
-- | A MethodDescriptor is just a list of types
--
--
-- >>> deserialize parseMethodDescriptor "(II)V"
-- Right "(II)V"
--
parseMethodDescriptor :: Parser MethodDescriptor
serializeMethodDescriptor :: MethodDescriptor -> Builder
-- | A ReturnDescriptor is maybe a type, otherwise it is void.
-- https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3
newtype ReturnDescriptor
ReturnDescriptor :: Maybe JType -> ReturnDescriptor
[asMaybeJType] :: ReturnDescriptor -> Maybe JType
-- | A ReturnDescriptor is either A JType or A void V annotaiton:
--
--
-- >>> deserialize parseReturnDescriptor "V"
-- Right Nothing
--
--
--
-- >>> parseTest parseReturnDescriptor "[I"
-- Right (Just "[I")
--
parseReturnDescriptor :: Parser ReturnDescriptor
serializeReturnDescriptor :: ReturnDescriptor -> Builder
-- | Field Descriptor
newtype FieldDescriptor
FieldDescriptor :: JType -> FieldDescriptor
[fieldDescriptorType] :: FieldDescriptor -> JType
-- | A FieldDescriptor is just a JType
--
--
-- >>> deserialize parseMethodDescriptor "I"
-- Right "I"
--
parseFieldDescriptor :: Parser FieldDescriptor
serializeFieldDescriptor :: FieldDescriptor -> Builder
-- | A name and a type
data NameAndType a
NameAndType :: !Text -> !a -> NameAndType a
-- | A FieldDescriptor is just a JType
--
--
-- >>> deserialize (parseNameAndType parseMethodDescriptor) "method:(I)V"
-- Right "method:(I)V"
--
parseNameAndType :: Parser a -> Parser (NameAndType a)
serializeNameAndType :: (a -> Builder) -> NameAndType a -> Builder
class WithName n where {
type family WithNameId n;
}
(<:>) :: WithName n => Text -> n -> WithNameId n
class AsNameAndType n where {
type family TypeDescriptor n;
}
toNameAndType :: AsNameAndType n => n -> NameAndType (TypeDescriptor n)
ntDescriptor :: AsNameAndType n => n -> TypeDescriptor n
ntName :: AsNameAndType n => n -> Text
-- | A MethodId
newtype MethodId
MethodId :: NameAndType MethodDescriptor -> MethodId
[methodIdAsNameAndType] :: MethodId -> NameAndType MethodDescriptor
parseMethodId :: Parser MethodId
serializeMethodId :: MethodId -> Builder
-- | A FieldId
newtype FieldId
FieldId :: NameAndType FieldDescriptor -> FieldId
[fieldIdAsNameAndType] :: FieldId -> NameAndType FieldDescriptor
parseFieldId :: Parser FieldId
serializeFieldId :: FieldId -> Builder
-- | A method or Field in a Class
data InClass a
InClass :: !ClassName -> !a -> InClass a
[inClassName] :: InClass a -> !ClassName
[inClassId] :: InClass a -> !a
parseInClass :: Parser a -> Parser (InClass a)
serializeInClass :: (a -> Builder) -> InClass a -> Builder
-- | A method or Field in a Class
data InRefType a
InRefType :: !JRefType -> !a -> InRefType a
[inRefType] :: InRefType a -> !JRefType
[inRefTypeId] :: InRefType a -> !a
parseInRefType :: Parser a -> Parser (InRefType a)
serializeInRefType :: (a -> Builder) -> InRefType a -> Builder
-- | Convert a InRefType to a InClass by casting all arrays to classes.
inRefTypeAsInClass :: InRefType a -> InClass a
-- | A MethodId
newtype AbsMethodId
AbsMethodId :: InClass MethodId -> AbsMethodId
[absMethodAsInClass] :: AbsMethodId -> InClass MethodId
parseAbsMethodId :: Parser AbsMethodId
serializeAbsMethodId :: AbsMethodId -> Builder
-- | A FieldId
newtype AbsFieldId
AbsFieldId :: InClass FieldId -> AbsFieldId
[absFieldAsInClass] :: AbsFieldId -> InClass FieldId
parseAbsFieldId :: Parser AbsFieldId
serializeAbsFieldId :: AbsFieldId -> Builder
instance GHC.Show.Show a => GHC.Show.Show (Language.JVM.Type.InClass a)
instance GHC.Show.Show a => GHC.Show.Show (Language.JVM.Type.InRefType a)
instance GHC.Show.Show Language.JVM.Type.AbsFieldId
instance Data.String.IsString Language.JVM.Type.AbsFieldId
instance GHC.Show.Show Language.JVM.Type.AbsMethodId
instance Data.String.IsString Language.JVM.Type.AbsMethodId
instance GHC.Show.Show Language.JVM.Type.FieldId
instance Data.String.IsString Language.JVM.Type.FieldId
instance GHC.Show.Show Language.JVM.Type.MethodId
instance Data.String.IsString Language.JVM.Type.MethodId
instance GHC.Show.Show Language.JVM.Type.ReturnDescriptor
instance Data.String.IsString Language.JVM.Type.ReturnDescriptor
instance GHC.Show.Show Language.JVM.Type.MethodDescriptor
instance Data.String.IsString Language.JVM.Type.MethodDescriptor
instance GHC.Show.Show Language.JVM.Type.FieldDescriptor
instance Data.String.IsString Language.JVM.Type.FieldDescriptor
instance GHC.Show.Show Language.JVM.Type.JBaseType
instance Data.String.IsString Language.JVM.Type.JBaseType
instance GHC.Show.Show Language.JVM.Type.JRefType
instance Data.String.IsString Language.JVM.Type.JRefType
instance GHC.Show.Show Language.JVM.Type.JType
instance Data.String.IsString Language.JVM.Type.JType
instance GHC.Show.Show Language.JVM.Type.ClassName
instance Data.String.IsString Language.JVM.Type.ClassName
instance Control.DeepSeq.NFData Language.JVM.Type.AbsMethodId
instance GHC.Generics.Generic Language.JVM.Type.AbsMethodId
instance GHC.Classes.Eq Language.JVM.Type.AbsMethodId
instance GHC.Classes.Ord Language.JVM.Type.AbsMethodId
instance Control.DeepSeq.NFData Language.JVM.Type.AbsFieldId
instance GHC.Generics.Generic Language.JVM.Type.AbsFieldId
instance GHC.Classes.Eq Language.JVM.Type.AbsFieldId
instance GHC.Classes.Ord Language.JVM.Type.AbsFieldId
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Language.JVM.Type.InRefType a)
instance GHC.Generics.Generic (Language.JVM.Type.InRefType a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.JVM.Type.InRefType a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JVM.Type.InRefType a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Language.JVM.Type.InClass a)
instance GHC.Generics.Generic (Language.JVM.Type.InClass a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.JVM.Type.InClass a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JVM.Type.InClass a)
instance Control.DeepSeq.NFData Language.JVM.Type.MethodId
instance GHC.Generics.Generic Language.JVM.Type.MethodId
instance GHC.Classes.Eq Language.JVM.Type.MethodId
instance GHC.Classes.Ord Language.JVM.Type.MethodId
instance Control.DeepSeq.NFData Language.JVM.Type.FieldId
instance GHC.Generics.Generic Language.JVM.Type.FieldId
instance GHC.Classes.Eq Language.JVM.Type.FieldId
instance GHC.Classes.Ord Language.JVM.Type.FieldId
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Language.JVM.Type.NameAndType a)
instance GHC.Generics.Generic (Language.JVM.Type.NameAndType a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.JVM.Type.NameAndType a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JVM.Type.NameAndType a)
instance GHC.Show.Show a => GHC.Show.Show (Language.JVM.Type.NameAndType a)
instance Control.DeepSeq.NFData Language.JVM.Type.FieldDescriptor
instance GHC.Generics.Generic Language.JVM.Type.FieldDescriptor
instance GHC.Classes.Eq Language.JVM.Type.FieldDescriptor
instance GHC.Classes.Ord Language.JVM.Type.FieldDescriptor
instance Control.DeepSeq.NFData Language.JVM.Type.MethodDescriptor
instance GHC.Generics.Generic Language.JVM.Type.MethodDescriptor
instance GHC.Classes.Eq Language.JVM.Type.MethodDescriptor
instance GHC.Classes.Ord Language.JVM.Type.MethodDescriptor
instance Control.DeepSeq.NFData Language.JVM.Type.ReturnDescriptor
instance GHC.Generics.Generic Language.JVM.Type.ReturnDescriptor
instance GHC.Classes.Eq Language.JVM.Type.ReturnDescriptor
instance GHC.Classes.Ord Language.JVM.Type.ReturnDescriptor
instance Control.DeepSeq.NFData Language.JVM.Type.JRefType
instance GHC.Generics.Generic Language.JVM.Type.JRefType
instance GHC.Classes.Ord Language.JVM.Type.JRefType
instance GHC.Classes.Eq Language.JVM.Type.JRefType
instance Control.DeepSeq.NFData Language.JVM.Type.JType
instance GHC.Generics.Generic Language.JVM.Type.JType
instance GHC.Classes.Ord Language.JVM.Type.JType
instance GHC.Classes.Eq Language.JVM.Type.JType
instance Control.DeepSeq.NFData Language.JVM.Type.JBaseType
instance GHC.Generics.Generic Language.JVM.Type.JBaseType
instance GHC.Classes.Ord Language.JVM.Type.JBaseType
instance GHC.Classes.Eq Language.JVM.Type.JBaseType
instance Control.DeepSeq.NFData Language.JVM.Type.ClassName
instance GHC.Generics.Generic Language.JVM.Type.ClassName
instance GHC.Classes.Ord Language.JVM.Type.ClassName
instance GHC.Classes.Eq Language.JVM.Type.ClassName
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.AbsMethodId
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.AbsFieldId
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.MethodId
instance Language.JVM.Type.WithName Language.JVM.Type.MethodDescriptor
instance Language.JVM.Type.AsNameAndType Language.JVM.Type.MethodId
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.FieldId
instance Language.JVM.Type.WithName Language.JVM.Type.FieldDescriptor
instance Language.JVM.Type.AsNameAndType Language.JVM.Type.FieldId
instance Language.JVM.Type.AsNameAndType (Language.JVM.Type.NameAndType a)
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.FieldDescriptor
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.MethodDescriptor
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.ReturnDescriptor
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.JRefType
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.JType
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.JBaseType
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Type.ClassName
-- | This module contains utilities missing not in other libraries.
module Language.JVM.Utils
-- | SizedList is a binary type, that reads a list of elements. It first
-- reads a length N of type w and then N items of type
-- a.
newtype SizedList w a
SizedList :: [a] -> SizedList w a
[unSizedList] :: SizedList w a -> [a]
-- | Get the size of the sized list.
listSize :: Num w => SizedList w a -> w
-- | A byte string with a size w.
newtype SizedByteString w
SizedByteString :: ByteString -> SizedByteString w
[unSizedByteString] :: SizedByteString w -> ByteString
-- | Get the size of a SizedByteString
byteStringSize :: Num w => SizedByteString w -> w
-- | A sized list using a 8 bit word as length
type SizedList8 = SizedList Word8
-- | A sized list using a 16 bit word as length
type SizedList16 = SizedList Word16
-- | A sized bytestring using a 32 bit word as length
type SizedByteString32 = SizedByteString Word32
-- | A sized bytestring using a 16 bit word as length
type SizedByteString16 = SizedByteString Word16
-- | Convert a Sized bytestring from Utf8 Text.
sizedByteStringFromText :: Text -> SizedByteString w
-- | Convert a Sized bytestring to Utf8 Text.
sizedByteStringToText :: SizedByteString w -> Either UnicodeException Text
tryDecode :: ByteString -> Either UnicodeException Text
-- | A bit set of size w
newtype BitSet w a
BitSet :: Set a -> BitSet w a
[toSet] :: BitSet w a -> Set a
-- | An Enumish value, all maps to a number, but not all integers maps to a
-- enumsish value. There is no guarantee that the integers will be
-- subsequent.
class (Eq a, Ord a) => Enumish a
-- | The only needed implementation is a list of integer-enum pairs in
-- ascending order, corresponding to their integer value.
inOrder :: Enumish a => [(Int, a)]
fromEnumish :: Enumish a => a -> Int
toEnumish :: Enumish a => Int -> Maybe a
-- | A BitSet using a 16 bit word
type BitSet16 = BitSet Word16
-- | Takes the third element of a triple.
trd :: (a, b, c) -> c
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Language.JVM.Utils.BitSet w a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JVM.Utils.BitSet w a)
instance GHC.Show.Show a => GHC.Show.Show (Language.JVM.Utils.BitSet w a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.JVM.Utils.BitSet w a)
instance Data.String.IsString (Language.JVM.Utils.SizedByteString w)
instance GHC.Classes.Ord (Language.JVM.Utils.SizedByteString w)
instance Control.DeepSeq.NFData (Language.JVM.Utils.SizedByteString w)
instance GHC.Classes.Eq (Language.JVM.Utils.SizedByteString w)
instance GHC.Show.Show (Language.JVM.Utils.SizedByteString w)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.JVM.Utils.SizedList w a)
instance Control.DeepSeq.NFData a => Control.DeepSeq.NFData (Language.JVM.Utils.SizedList w a)
instance GHC.Base.Functor (Language.JVM.Utils.SizedList w)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.JVM.Utils.SizedList w a)
instance GHC.Show.Show a => GHC.Show.Show (Language.JVM.Utils.SizedList w a)
instance (GHC.Show.Show w, Data.Bits.Bits w, Data.Binary.Class.Binary w, Language.JVM.Utils.Enumish a) => Data.Binary.Class.Binary (Language.JVM.Utils.BitSet w a)
instance (Data.Binary.Class.Binary w, GHC.Real.Integral w) => Data.Binary.Class.Binary (Language.JVM.Utils.SizedByteString w)
instance Data.Foldable.Foldable (Language.JVM.Utils.SizedList w)
instance Data.Traversable.Traversable (Language.JVM.Utils.SizedList w)
instance (Data.Binary.Class.Binary w, GHC.Real.Integral w, Data.Binary.Class.Binary a) => Data.Binary.Class.Binary (Language.JVM.Utils.SizedList w a)
-- | This module contains the Constant type and the
-- ConstantPool. These are essential for accessing data in the
-- class-file.
module Language.JVM.Constant
-- | A constant is a multi word item in the ConstantPool. Each of
-- the constructors are pretty much self-explanatory from the types.
data Constant r
CString :: !SizedByteString16 -> Constant r
CInteger :: !Int32 -> Constant r
CFloat :: !Float -> Constant r
CLong :: !Int64 -> Constant r
CDouble :: !Double -> Constant r
CClassRef :: !Ref Text r -> Constant r
CStringRef :: !Ref ByteString r -> Constant r
CFieldRef :: !Choice (Index, Index) AbsFieldId r -> Constant r
CMethodRef :: !Choice (Index, Index) (InRefType MethodId) r -> Constant r
CInterfaceMethodRef :: !Choice (Index, Index) (InRefType MethodId) r -> Constant r
CNameAndType :: !Ref Text r -> !Ref Text r -> Constant r
CMethodHandle :: !MethodHandle r -> Constant r
CMethodType :: !Ref MethodDescriptor r -> Constant r
CInvokeDynamic :: !InvokeDynamic r -> Constant r
-- | Some of the Constants take up more space in the constant pool
-- than other. Notice that String and MethodType is not
-- of size 32, but is still awarded value 1. This is due to an
-- inconsistency in JVM.
constantSize :: Constant r -> Index
-- | Hack that returns the name of a constant.
typeToStr :: Constant r -> String
-- | Referenceable is something that can exist in the constant pool.
class Referenceable a
fromConst :: (Referenceable a, Monad m) => (forall a'. String -> m a') -> Constant High -> m a
toConst :: (Referenceable a, Monad m) => a -> m (Constant High)
-- | A constant pool value in java
data JValue
VInteger :: VInteger -> JValue
VLong :: VLong -> JValue
VFloat :: VFloat -> JValue
VDouble :: VDouble -> JValue
VString :: VString -> JValue
VClass :: JRefType -> JValue
VMethodType :: MethodDescriptor -> JValue
VMethodHandle :: MethodHandle High -> JValue
type VInteger = Int32
type VLong = Int64
type VDouble = Double
type VFloat = Float
type VString = ByteString
-- | A class name
data ClassName
-- | A method or Field in a Class
data InClass a
InClass :: !ClassName -> !a -> InClass a
[inClassName] :: InClass a -> !ClassName
[inClassId] :: InClass a -> !a
-- | A method or Field in a Class
data InRefType a
InRefType :: !JRefType -> !a -> InRefType a
[inRefType] :: InRefType a -> !JRefType
[inRefTypeId] :: InRefType a -> !a
parseAbsMethodId :: Parser AbsMethodId
-- | A FieldId
newtype AbsFieldId
AbsFieldId :: InClass FieldId -> AbsFieldId
[absFieldAsInClass] :: AbsFieldId -> InClass FieldId
-- | An method which is from an interface
newtype AbsInterfaceMethodId
AbsInterfaceMethodId :: InRefType MethodId -> AbsInterfaceMethodId
[interfaceMethodId] :: AbsInterfaceMethodId -> InRefType MethodId
-- | An method which can be from an interface
data AbsVariableMethodId
AbsVariableMethodId :: !Bool -> !InRefType MethodId -> AbsVariableMethodId
[variableIsInterface] :: AbsVariableMethodId -> !Bool
[variableMethodId] :: AbsVariableMethodId -> !InRefType MethodId
-- | A MethodId
newtype MethodId
MethodId :: NameAndType MethodDescriptor -> MethodId
[methodIdAsNameAndType] :: MethodId -> NameAndType MethodDescriptor
-- | A FieldId
newtype FieldId
FieldId :: NameAndType FieldDescriptor -> FieldId
[fieldIdAsNameAndType] :: FieldId -> NameAndType FieldDescriptor
-- | A name and a type
data NameAndType a
NameAndType :: !Text -> !a -> NameAndType a
-- | Method Descriptor
data MethodDescriptor
-- | Field Descriptor
data FieldDescriptor
-- | The union type over the different method handles.
data MethodHandle r
MHField :: !MethodHandleField r -> MethodHandle r
MHMethod :: !MethodHandleMethod r -> MethodHandle r
MHInterface :: !MethodHandleInterface r -> MethodHandle r
data MethodHandleField r
MethodHandleField :: !MethodHandleFieldKind -> !Ref AbsFieldId r -> MethodHandleField r
[methodHandleFieldKind] :: MethodHandleField r -> !MethodHandleFieldKind
[methodHandleFieldRef] :: MethodHandleField r -> !Ref AbsFieldId r
data MethodHandleMethod r
MHInvokeVirtual :: !Ref (InRefType MethodId) r -> MethodHandleMethod r
-- | Since version 52.0
MHInvokeStatic :: !Ref AbsVariableMethodId r -> MethodHandleMethod r
-- | Since version 52.0
MHInvokeSpecial :: !Ref AbsVariableMethodId r -> MethodHandleMethod r
MHNewInvokeSpecial :: !Ref (InRefType MethodId) r -> MethodHandleMethod r
newtype MethodHandleInterface r
MethodHandleInterface :: Ref AbsInterfaceMethodId r -> MethodHandleInterface r
[methodHandleInterfaceRef] :: MethodHandleInterface r -> Ref AbsInterfaceMethodId r
data MethodHandleFieldKind
MHGetField :: MethodHandleFieldKind
MHGetStatic :: MethodHandleFieldKind
MHPutField :: MethodHandleFieldKind
MHPutStatic :: MethodHandleFieldKind
data InvokeDynamic r
InvokeDynamic :: !Word16 -> !Ref MethodId r -> InvokeDynamic r
[invokeDynamicAttrIndex] :: InvokeDynamic r -> !Word16
[invokeDynamicMethod] :: InvokeDynamic r -> !Ref MethodId r
-- | Any data structure in the High stage, is easier to read.
data High
-- | Any data structure that is in the low stage should be serializable
-- using the binary library.
data Low
instance Control.DeepSeq.NFData Language.JVM.Constant.JValue
instance GHC.Generics.Generic Language.JVM.Constant.JValue
instance GHC.Classes.Eq Language.JVM.Constant.JValue
instance GHC.Show.Show Language.JVM.Constant.JValue
instance GHC.Show.Show (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.Low)
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.JValue
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.VDouble
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.VFloat
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.VLong
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.VInteger
instance GHC.Show.Show (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandleInterface Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandleMethod Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandleField Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandle Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandle Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandle Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandle Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Constant.MethodHandle Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Constant.MethodHandle Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Constant.MethodHandle Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Constant.MethodHandle Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Constant.MethodHandle Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Constant.Constant Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Constant.Constant Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Constant.Constant Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Constant.Constant Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Constant.Constant Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Constant.Constant Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Constant.Constant Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Constant.Constant Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Constant.Constant Language.JVM.Stage.High)
instance GHC.Classes.Ord Language.JVM.Constant.MethodHandleFieldKind
instance GHC.Generics.Generic Language.JVM.Constant.MethodHandleFieldKind
instance Control.DeepSeq.NFData Language.JVM.Constant.MethodHandleFieldKind
instance GHC.Show.Show Language.JVM.Constant.MethodHandleFieldKind
instance GHC.Classes.Eq Language.JVM.Constant.MethodHandleFieldKind
instance Control.DeepSeq.NFData Language.JVM.Constant.AbsVariableMethodId
instance GHC.Generics.Generic Language.JVM.Constant.AbsVariableMethodId
instance GHC.Classes.Eq Language.JVM.Constant.AbsVariableMethodId
instance GHC.Show.Show Language.JVM.Constant.AbsVariableMethodId
instance Control.DeepSeq.NFData Language.JVM.Constant.AbsInterfaceMethodId
instance GHC.Generics.Generic Language.JVM.Constant.AbsInterfaceMethodId
instance GHC.Classes.Eq Language.JVM.Constant.AbsInterfaceMethodId
instance GHC.Show.Show Language.JVM.Constant.AbsInterfaceMethodId
instance Language.JVM.Constant.Referenceable (Language.JVM.Constant.Constant Language.JVM.Stage.High)
instance Language.JVM.TextSerializable.TextSerializable a => Language.JVM.Constant.Referenceable (Language.JVM.Type.NameAndType a)
instance Language.JVM.Constant.Referenceable Data.Text.Internal.Text
instance Language.JVM.Constant.Referenceable Data.ByteString.Internal.ByteString
instance Language.JVM.Constant.Referenceable Language.JVM.Type.ClassName
instance Language.JVM.Constant.Referenceable Language.JVM.Type.JRefType
instance Language.JVM.Constant.Referenceable Language.JVM.Type.ReturnDescriptor
instance Language.JVM.Constant.Referenceable Language.JVM.Type.MethodDescriptor
instance Language.JVM.Constant.Referenceable Language.JVM.Type.FieldDescriptor
instance Language.JVM.Constant.Referenceable Language.JVM.Type.MethodId
instance Language.JVM.Constant.Referenceable Language.JVM.Type.FieldId
instance Language.JVM.Constant.Referenceable Language.JVM.Type.AbsFieldId
instance Language.JVM.Constant.Referenceable (Language.JVM.Type.InRefType Language.JVM.Type.MethodId)
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.AbsVariableMethodId
instance Language.JVM.Constant.Referenceable Language.JVM.Constant.AbsInterfaceMethodId
instance Language.JVM.Constant.Referenceable (Language.JVM.Constant.InvokeDynamic Language.JVM.Stage.High)
instance Language.JVM.Constant.Referenceable (Language.JVM.Constant.MethodHandle Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Constant.Constant Language.JVM.Stage.Low)
instance Data.Binary.Class.Binary (Language.JVM.Constant.MethodHandle Language.JVM.Stage.Low)
module Language.JVM.Staged
class Staged s
stage :: (Staged s, LabelM m) => (forall s'. Staged s' => s' r -> m (s' r')) -> s r -> m (s r')
evolve :: (Staged s, EvolveM m) => s Low -> m (s High)
devolve :: (Staged s, DevolveM m) => s High -> m (s Low)
class Monad m => LabelM m
-- | label the current position in the class-file, good for debugging
label :: LabelM m => String -> m a -> m a
class LabelM m => EvolveM m
link :: (EvolveM m, Referenceable r) => Index -> m r
attributeFilter :: EvolveM m => m ((AttributeLocation, Text) -> Bool)
evolveError :: EvolveM m => String -> m r
class LabelM m => DevolveM m
unlink :: (DevolveM m, Referenceable r) => r -> m Index
data AttributeLocation
ClassAttribute :: AttributeLocation
MethodAttribute :: AttributeLocation
CodeAttribute :: AttributeLocation
FieldAttribute :: AttributeLocation
instance GHC.Classes.Ord Language.JVM.Staged.AttributeLocation
instance GHC.Classes.Eq Language.JVM.Staged.AttributeLocation
instance GHC.Show.Show Language.JVM.Staged.AttributeLocation
instance Language.JVM.Staged.Staged Language.JVM.Constant.Constant
instance Language.JVM.Staged.Staged Language.JVM.Constant.InvokeDynamic
instance Language.JVM.Staged.Staged Language.JVM.Constant.MethodHandle
instance Language.JVM.Staged.Staged Language.JVM.Constant.MethodHandleMethod
instance Language.JVM.Staged.Staged Language.JVM.Constant.MethodHandleField
instance Language.JVM.Staged.Staged Language.JVM.Constant.MethodHandleInterface
-- | This module contains the ConstantPool data structure and
-- multiple other types, and classes.
module Language.JVM.ConstantPool
-- | A ConstantPool is just an IntMap. A IntMap is used,
-- because constants are accessed using their byte-offset, and sometimes
-- the offset depends on the constant size. See constantSize.
newtype ConstantPool r
ConstantPool :: IntMap (Constant r) -> ConstantPool r
[unConstantPool] :: ConstantPool r -> IntMap (Constant r)
-- | Access a constant in the constant pool
access :: Index -> ConstantPool r -> Either PoolAccessError (Constant r)
growPool :: forall b. (ConstantPool High -> Constant Low -> Either b (Constant High)) -> ConstantPool Low -> (ConstantPool High, [(b, (Index, Constant Low))])
poolCount :: ConstantPool r -> Int
nextIndex :: ConstantPool r -> Index
listConstants :: ConstantPool r -> [(Index, Constant r)]
fromConstants :: Foldable f => f (Constant r) -> ConstantPool r
-- | Creates an empty constant pool
empty :: ConstantPool r
-- | A pool access error
data PoolAccessError
PoolAccessError :: !Word16 -> String -> PoolAccessError
[paErrorRef] :: PoolAccessError -> !Word16
[paErrorMsg] :: PoolAccessError -> String
-- | An index into the constant pool.
type Index = Word16
instance GHC.Show.Show (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.High)
instance GHC.Generics.Generic Language.JVM.ConstantPool.PoolAccessError
instance GHC.Classes.Eq Language.JVM.ConstantPool.PoolAccessError
instance GHC.Show.Show Language.JVM.ConstantPool.PoolAccessError
instance Control.DeepSeq.NFData Language.JVM.ConstantPool.PoolAccessError
instance Data.Binary.Class.Binary (Language.JVM.ConstantPool.ConstantPool Language.JVM.Stage.Low)
module Language.JVM.ByteCode
-- | ByteCode constains a list of ByteCode instructions and the size of the
-- bytecode. if the ByteCode is in the Low stage then the byte code
-- instructions are annotated with the byte code offsets.
data ByteCode i
ByteCode :: !Word32 -> Vector (ByteCodeInst i) -> ByteCode i
[byteCodeSize] :: ByteCode i -> !Word32
[byteCodeInstructions] :: ByteCode i -> Vector (ByteCodeInst i)
unByteCode :: ByteCode i -> Vector (ByteCodeInst i)
evolveByteCode :: EvolveM m => ByteCode Low -> m (OffsetMap, ByteCode High)
devolveByteCode :: DevolveM m => ByteCode High -> m (ByteCode Low)
-- | Given an OffsetMap turn a offset into a bytecode index
evolveOffset :: EvolveM m => OffsetMap -> ByteCodeOffset -> m ByteCodeIndex
-- | Given an OffsetMap turn a offset into a bytecode index
devolveOffset :: DevolveM m => ByteCode Low -> ByteCodeIndex -> m ByteCodeOffset
class ByteCodeStaged s
evolveBC :: (ByteCodeStaged s, EvolveM m) => (ByteCodeOffset -> m ByteCodeIndex) -> s Low -> m (s High)
devolveBC :: (ByteCodeStaged s, DevolveM m) => (ByteCodeIndex -> m ByteCodeOffset) -> s High -> m (s Low)
-- | The byte code instruction is mostly used to succinctly read and write
-- an bytecode instruction from a bytestring.
data ByteCodeInst r
ByteCodeInst :: !ByteCodeOffset -> !ByteCodeOpr r -> ByteCodeInst r
[offset] :: ByteCodeInst r -> !ByteCodeOffset
[opcode] :: ByteCodeInst r -> !ByteCodeOpr r
-- | A ByteCode reference is either byte code offset in the low stage, and
-- a byte code index in the high state
type ByteCodeRef i = Choice ByteCodeOffset ByteCodeIndex i
-- | The offset in the byte code
type ByteCodeOffset = Word16
-- | The index of the byte code.
type ByteCodeIndex = Int
-- | The offset map, maps offset to instruction ids.
type OffsetMap = IntMap ByteCodeIndex
-- | Return the bytecode offset from the bytecode.
indexOffset :: ByteCode Low -> ByteCodeIndex -> Maybe ByteCodeOffset
-- | Given an OffsetMap turn a offset into a bytecode index
offsetIndex :: OffsetMap -> ByteCodeOffset -> Maybe ByteCodeIndex
-- | Given low byte code we can create an OffsetMap
offsetMap :: ByteCode Low -> OffsetMap
generateOffsets :: DevolveM m => Vector (ByteCodeOpr High) -> m (Word16, Vector ByteCodeOffset)
data ByteCodeOpr r
-- | aaload baload ...
ArrayLoad :: !ArrayType -> ByteCodeOpr r
-- | aastore bastore ...
ArrayStore :: !ArrayType -> ByteCodeOpr r
Push :: !BConstant r -> ByteCodeOpr r
-- | aload_0, bload_2, iload 5 ...
Load :: !LocalType -> !LocalAddress -> ByteCodeOpr r
-- | aload, bload ...
Store :: !LocalType -> !LocalAddress -> ByteCodeOpr r
-- | iadd ...
BinaryOpr :: !BinOpr -> !ArithmeticType -> ByteCodeOpr r
-- | ineg ...
Neg :: !ArithmeticType -> ByteCodeOpr r
-- | Exclusively on int and long, identified by the word-size
BitOpr :: !BitOpr -> !WordSize -> ByteCodeOpr r
-- | Only works on ints, increment local 2
IncrLocal :: !LocalAddress -> !IncrementAmount -> ByteCodeOpr r
-- | Only valid on different types
Cast :: !CastOpr -> ByteCodeOpr r
CompareLongs :: ByteCodeOpr r
-- | Compare two floating values, 2 is if float or double should be used.
CompareFloating :: !Bool -> !WordSize -> ByteCodeOpr r
-- | compare with 0 if #2 is False, and two ints from the stack if True.
-- the last value is the offset
If :: !CmpOpr -> !OneOrTwo -> !ShortRelativeRef r -> ByteCodeOpr r
-- | check if two objects are equal, or not equal. If #2 is True, compare
-- with null.
IfRef :: !Bool -> !OneOrTwo -> !ShortRelativeRef r -> ByteCodeOpr r
Goto :: !LongRelativeRef r -> ByteCodeOpr r
Jsr :: !LongRelativeRef r -> ByteCodeOpr r
Ret :: !LocalAddress -> ByteCodeOpr r
-- | a table switch has 2 values a `default` and a SwitchTable
TableSwitch :: !LongRelativeRef r -> !SwitchTable r -> ByteCodeOpr r
-- | a lookup switch has a `default` value and a list of pairs.
LookupSwitch :: !LongRelativeRef r -> Vector (Int32, LongRelativeRef r) -> ByteCodeOpr r
Get :: !FieldAccess -> !Ref AbsFieldId r -> ByteCodeOpr r
Put :: !FieldAccess -> !Ref AbsFieldId r -> ByteCodeOpr r
Invoke :: !Invocation r -> ByteCodeOpr r
New :: !Ref ClassName r -> ByteCodeOpr r
-- | the first argument is the number of dimentions of the array that have
-- to be instantiatied. The JType indicates the type of the instantiated
-- array
NewArray :: !Choice LowNewArrayType NewArrayType r -> ByteCodeOpr r
ArrayLength :: ByteCodeOpr r
Throw :: ByteCodeOpr r
CheckCast :: !Ref JRefType r -> ByteCodeOpr r
InstanceOf :: !Ref JRefType r -> ByteCodeOpr r
-- | True => Enter, False => Exit
Monitor :: !Bool -> ByteCodeOpr r
Return :: !Maybe LocalType -> ByteCodeOpr r
Nop :: ByteCodeOpr r
Pop :: !WordSize -> ByteCodeOpr r
Dup :: !WordSize -> ByteCodeOpr r
DupX1 :: !WordSize -> ByteCodeOpr r
DupX2 :: !WordSize -> ByteCodeOpr r
Swap :: ByteCodeOpr r
-- | A Wrapper around CConstant.
type BConstant r = Choice (CConstant r) (Maybe JValue) r
data CConstant r
CNull :: CConstant r
-- |
CIntM1 :: CConstant r
CInt0 :: CConstant r
CInt1 :: CConstant r
CInt2 :: CConstant r
CInt3 :: CConstant r
CInt4 :: CConstant r
CInt5 :: CConstant r
CLong0 :: CConstant r
CLong1 :: CConstant r
CFloat0 :: CConstant r
CFloat1 :: CConstant r
CFloat2 :: CConstant r
CDouble0 :: CConstant r
CDouble1 :: CConstant r
CByte :: Int8 -> CConstant r
CShort :: Int16 -> CConstant r
CRef :: Maybe WordSize -> Ref JValue r -> CConstant r
data OneOrTwo
One :: OneOrTwo
Two :: OneOrTwo
data SwitchTable r
SwitchTable :: Int32 -> Vector (LongRelativeRef r) -> SwitchTable r
[switchLow] :: SwitchTable r -> Int32
[switchOffsets] :: SwitchTable r -> Vector (LongRelativeRef r)
switchHigh :: SwitchTable Low -> Int32
data FieldAccess
FldStatic :: FieldAccess
FldField :: FieldAccess
data Invocation r
-- | Variable since 52.0
InvkSpecial :: !Ref AbsVariableMethodId r -> Invocation r
InvkVirtual :: !Ref (InRefType MethodId) r -> Invocation r
-- | Variable since 52.0
InvkStatic :: !Ref AbsVariableMethodId r -> Invocation r
-- | Should be a positive number
InvkInterface :: !Word8 -> !Ref AbsInterfaceMethodId r -> Invocation r
InvkDynamic :: !DeepRef InvokeDynamic r -> Invocation r
-- | A short relative bytecode ref is defined in correspondence with the
type ShortRelativeRef i = Choice Int16 ByteCodeIndex i
-- | A Long relative reference. The only reason this exist because the
-- signed nature of int, looses a bit.
type LongRelativeRef i = Choice Int32 ByteCodeIndex i
data NewArrayType
NewArrayType :: Word8 -> JType -> NewArrayType
newArrayTypeType :: NewArrayType -> JRefType
data LowNewArrayType
ArrayBaseType :: JBaseType -> LowNewArrayType
ArrayReference :: Ref JRefType Low -> Word8 -> LowNewArrayType
data BinOpr
Add :: BinOpr
Sub :: BinOpr
Mul :: BinOpr
Div :: BinOpr
Rem :: BinOpr
data BitOpr
ShL :: BitOpr
ShR :: BitOpr
UShR :: BitOpr
And :: BitOpr
Or :: BitOpr
XOr :: BitOpr
data CmpOpr
CEq :: CmpOpr
CNe :: CmpOpr
CLt :: CmpOpr
CGe :: CmpOpr
CGt :: CmpOpr
CLe :: CmpOpr
data CastOpr
-- | Cast from Int to a smaller type
CastDown :: SmallArithmeticType -> CastOpr
-- | Cast from any to any arithmetic type. Cannot be the same type.
CastTo :: ArithmeticType -> ArithmeticType -> CastOpr
data ArithmeticType
MInt :: ArithmeticType
MLong :: ArithmeticType
MFloat :: ArithmeticType
MDouble :: ArithmeticType
data SmallArithmeticType
MByte :: SmallArithmeticType
MChar :: SmallArithmeticType
MShort :: SmallArithmeticType
data LocalType
LInt :: LocalType
LLong :: LocalType
LFloat :: LocalType
LDouble :: LocalType
LRef :: LocalType
data ArrayType
AByte :: ArrayType
AChar :: ArrayType
AShort :: ArrayType
AInt :: ArrayType
ALong :: ArrayType
AFloat :: ArrayType
ADouble :: ArrayType
ARef :: ArrayType
type WordSize = OneOrTwo
-- | An offset, counted in bytes.
type ByteOffset = Int64
type LocalAddress = Word16
type IncrementAmount = Int16
instance GHC.Show.Show (Language.JVM.ByteCode.CConstant Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ByteCode.CConstant Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ByteCode.CConstant Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.CConstant Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ByteCode.CConstant Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ByteCode.CConstant Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ByteCode.CConstant Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ByteCode.CConstant Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.CConstant Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.ByteCode.Invocation Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ByteCode.Invocation Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ByteCode.Invocation Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.Invocation Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ByteCode.Invocation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ByteCode.Invocation Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ByteCode.Invocation Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ByteCode.Invocation Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.Invocation Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.SwitchTable Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData Language.JVM.ByteCode.CastOpr
instance GHC.Generics.Generic Language.JVM.ByteCode.CastOpr
instance GHC.Classes.Eq Language.JVM.ByteCode.CastOpr
instance GHC.Classes.Ord Language.JVM.ByteCode.CastOpr
instance GHC.Show.Show Language.JVM.ByteCode.CastOpr
instance Control.DeepSeq.NFData Language.JVM.ByteCode.CmpOpr
instance GHC.Generics.Generic Language.JVM.ByteCode.CmpOpr
instance GHC.Classes.Eq Language.JVM.ByteCode.CmpOpr
instance GHC.Classes.Ord Language.JVM.ByteCode.CmpOpr
instance GHC.Show.Show Language.JVM.ByteCode.CmpOpr
instance Control.DeepSeq.NFData Language.JVM.ByteCode.BitOpr
instance GHC.Generics.Generic Language.JVM.ByteCode.BitOpr
instance GHC.Classes.Eq Language.JVM.ByteCode.BitOpr
instance GHC.Classes.Ord Language.JVM.ByteCode.BitOpr
instance GHC.Show.Show Language.JVM.ByteCode.BitOpr
instance Control.DeepSeq.NFData Language.JVM.ByteCode.BinOpr
instance GHC.Generics.Generic Language.JVM.ByteCode.BinOpr
instance GHC.Classes.Eq Language.JVM.ByteCode.BinOpr
instance GHC.Classes.Ord Language.JVM.ByteCode.BinOpr
instance GHC.Show.Show Language.JVM.ByteCode.BinOpr
instance Control.DeepSeq.NFData Language.JVM.ByteCode.OneOrTwo
instance GHC.Generics.Generic Language.JVM.ByteCode.OneOrTwo
instance GHC.Enum.Enum Language.JVM.ByteCode.OneOrTwo
instance GHC.Classes.Eq Language.JVM.ByteCode.OneOrTwo
instance GHC.Enum.Bounded Language.JVM.ByteCode.OneOrTwo
instance GHC.Classes.Ord Language.JVM.ByteCode.OneOrTwo
instance GHC.Show.Show Language.JVM.ByteCode.OneOrTwo
instance Control.DeepSeq.NFData Language.JVM.ByteCode.FieldAccess
instance GHC.Generics.Generic Language.JVM.ByteCode.FieldAccess
instance GHC.Classes.Eq Language.JVM.ByteCode.FieldAccess
instance GHC.Classes.Ord Language.JVM.ByteCode.FieldAccess
instance GHC.Show.Show Language.JVM.ByteCode.FieldAccess
instance Control.DeepSeq.NFData Language.JVM.ByteCode.ArrayType
instance GHC.Generics.Generic Language.JVM.ByteCode.ArrayType
instance GHC.Classes.Ord Language.JVM.ByteCode.ArrayType
instance GHC.Classes.Eq Language.JVM.ByteCode.ArrayType
instance GHC.Show.Show Language.JVM.ByteCode.ArrayType
instance Control.DeepSeq.NFData Language.JVM.ByteCode.LocalType
instance GHC.Generics.Generic Language.JVM.ByteCode.LocalType
instance GHC.Enum.Bounded Language.JVM.ByteCode.LocalType
instance GHC.Enum.Enum Language.JVM.ByteCode.LocalType
instance GHC.Classes.Eq Language.JVM.ByteCode.LocalType
instance GHC.Classes.Ord Language.JVM.ByteCode.LocalType
instance GHC.Show.Show Language.JVM.ByteCode.LocalType
instance Control.DeepSeq.NFData Language.JVM.ByteCode.NewArrayType
instance GHC.Generics.Generic Language.JVM.ByteCode.NewArrayType
instance GHC.Classes.Eq Language.JVM.ByteCode.NewArrayType
instance GHC.Classes.Ord Language.JVM.ByteCode.NewArrayType
instance GHC.Show.Show Language.JVM.ByteCode.NewArrayType
instance Control.DeepSeq.NFData Language.JVM.ByteCode.LowNewArrayType
instance GHC.Generics.Generic Language.JVM.ByteCode.LowNewArrayType
instance GHC.Classes.Eq Language.JVM.ByteCode.LowNewArrayType
instance GHC.Classes.Ord Language.JVM.ByteCode.LowNewArrayType
instance GHC.Show.Show Language.JVM.ByteCode.LowNewArrayType
instance Control.DeepSeq.NFData Language.JVM.ByteCode.SmallArithmeticType
instance GHC.Generics.Generic Language.JVM.ByteCode.SmallArithmeticType
instance GHC.Enum.Bounded Language.JVM.ByteCode.SmallArithmeticType
instance GHC.Enum.Enum Language.JVM.ByteCode.SmallArithmeticType
instance GHC.Classes.Eq Language.JVM.ByteCode.SmallArithmeticType
instance GHC.Classes.Ord Language.JVM.ByteCode.SmallArithmeticType
instance GHC.Show.Show Language.JVM.ByteCode.SmallArithmeticType
instance Control.DeepSeq.NFData Language.JVM.ByteCode.ArithmeticType
instance GHC.Generics.Generic Language.JVM.ByteCode.ArithmeticType
instance GHC.Enum.Bounded Language.JVM.ByteCode.ArithmeticType
instance GHC.Enum.Enum Language.JVM.ByteCode.ArithmeticType
instance GHC.Classes.Eq Language.JVM.ByteCode.ArithmeticType
instance GHC.Classes.Ord Language.JVM.ByteCode.ArithmeticType
instance GHC.Show.Show Language.JVM.ByteCode.ArithmeticType
instance GHC.Classes.Ord (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.Low)
instance Data.Binary.Class.Binary (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ByteCode.ByteCode Language.JVM.Stage.Low)
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.ByteCode.ByteCodeInst
instance Data.Binary.Class.Binary (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ByteCode.ByteCodeInst Language.JVM.Stage.Low)
instance Data.Binary.Class.Binary (Language.JVM.ByteCode.ByteCodeOpr Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.ByteCode.CConstant
instance Language.JVM.Staged.Staged Language.JVM.ByteCode.Invocation
module Language.JVM.Attribute.Base
-- | An Attribute, simply contains of a reference to a name and contains
-- info.
data Attribute r
Attribute :: !Ref Text r -> !SizedByteString32 -> Attribute r
[aName] :: Attribute r -> !Ref Text r
[aInfo'] :: Attribute r -> !SizedByteString32
-- | A small helper function to extract the info as a lazy
-- ByteString.
aInfo :: Attribute r -> ByteString
toAttribute :: (IsAttribute (a Low), Staged a, DevolveM m) => a High -> m (Attribute Low)
toBCAttribute :: (IsAttribute (a Low), ByteCodeStaged a, DevolveM m) => (ByteCodeIndex -> m ByteCodeOffset) -> a High -> m (Attribute Low)
devolveAttribute :: (IsAttribute (a Low), DevolveM m) => (a High -> m (a Low)) -> a High -> m (Attribute Low)
-- | Generate an attribute in a low stage Low.
fromAttribute' :: IsAttribute a => Attribute r -> Either String a
toAttribute' :: forall a. IsAttribute a => a -> Attribute High
-- | A class-type that describes a data-type a as an Attribute.
-- Most notable it provides the fromAttribute' method that enables
-- converting an Attribute to a data-type a.
class (Binary a) => IsAttribute a
-- | The name of an attribute. This is used to lookup an attribute.
attrName :: IsAttribute a => Const Text a
-- | A list of attributes and described by the expected values.
type Attributes b r = Choice (SizedList16 (Attribute r)) (b r) r
-- | Given a Foldable structure f, and a function that can
-- calculate a monoid given an Attribute calculate the monoid over
-- all attributes.
fromAttributes :: (Foldable f, EvolveM m, Monoid a) => AttributeLocation -> f (Attribute Low) -> (Attribute High -> m a) -> m a
collect :: forall c m. EvolveM m => [AttributeCollector c] -> (Attribute High -> c -> c) -> Attribute High -> m (Endo c)
collectBC :: forall c m. EvolveM m => (ByteCodeOffset -> m ByteCodeIndex) -> [ByteCodeAttributeCollector c] -> (Attribute High -> c -> c) -> Attribute High -> m (Endo c)
data AttributeCollector c
Attr :: (a High -> c -> c) -> AttributeCollector c
data ByteCodeAttributeCollector c
BCAttr :: (a High -> c -> c) -> ByteCodeAttributeCollector c
-- | Maybe return the first element of a list
firstOne :: [a] -> Maybe a
-- | The Const functor.
newtype Const a (b :: k) :: forall k. () => Type -> k -> Type
Const :: a -> Const a
[getConst] :: Const a -> a
instance GHC.Show.Show (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Base.Attribute Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Base.Attribute
-- | Based on the StackMapTable Attribute, as documented here.
module Language.JVM.Attribute.StackMapTable
-- | An Exceptions attribute is a list of references into the constant
-- pool.
newtype StackMapTable r
StackMapTable :: Choice (SizedList16 (StackMapFrame Low)) [StackMapFrame High] r -> StackMapTable r
[stackMapTable] :: StackMapTable r -> Choice (SizedList16 (StackMapFrame Low)) [StackMapFrame High] r
-- | A delta offset
type DeltaOffset i = Choice Word16 Int i
-- | An stack map frame
data StackMapFrame r
StackMapFrame :: DeltaOffset r -> StackMapFrameType r -> StackMapFrame r
[deltaOffset] :: StackMapFrame r -> DeltaOffset r
[frameType] :: StackMapFrame r -> StackMapFrameType r
-- | An stack map frame type
data StackMapFrameType r
SameFrame :: StackMapFrameType r
SameLocals1StackItemFrame :: VerificationTypeInfo r -> StackMapFrameType r
ChopFrame :: Word8 -> StackMapFrameType r
AppendFrame :: [VerificationTypeInfo r] -> StackMapFrameType r
FullFrame :: SizedList16 (VerificationTypeInfo r) -> SizedList16 (VerificationTypeInfo r) -> StackMapFrameType r
emptyStackMapTable :: StackMapTable High
-- | The types info of the stack map frame.
data VerificationTypeInfo r
VTTop :: VerificationTypeInfo r
VTInteger :: VerificationTypeInfo r
VTFloat :: VerificationTypeInfo r
VTLong :: VerificationTypeInfo r
VTDouble :: VerificationTypeInfo r
VTNull :: VerificationTypeInfo r
VTUninitializedThis :: VerificationTypeInfo r
VTObject :: !Ref JRefType r -> VerificationTypeInfo r
-- | This ByteCodeRef refers to the "new" bytcode instruction which
-- created the object.
VTUninitialized :: !ByteCodeRef r -> VerificationTypeInfo r
offsetDelta :: Word16 -> Word16 -> Word16
offsetDeltaInv :: Word16 -> Word16 -> Word16
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.StackMapFrameType Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.StackMapTable.StackMapTable Language.JVM.Stage.Low)
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.StackMapTable.StackMapTable
instance Data.Binary.Class.Binary (Language.JVM.Attribute.StackMapTable.StackMapFrame Language.JVM.Stage.Low)
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.StackMapTable.StackMapFrameType
instance Data.Binary.Class.Binary (Language.JVM.Attribute.StackMapTable.VerificationTypeInfo Language.JVM.Stage.Low)
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.StackMapTable.VerificationTypeInfo
-- | Based on the Signature Attribute, as documented here, and the
-- signature syntax defined here.
module Language.JVM.Attribute.Signature
newtype Signature a
Signature :: Ref Text a -> Signature a
signatureToText :: Signature High -> Text
signatureFromText :: Text -> Signature High
data ClassSignature
ClassSignature :: [TypeParameter] -> ClassType -> [ClassType] -> ClassSignature
[csTypeParameters] :: ClassSignature -> [TypeParameter]
[csSuperclassSignature] :: ClassSignature -> ClassType
[csInterfaceSignatures] :: ClassSignature -> [ClassType]
isSimpleClassSignature :: ClassSignature -> Bool
classSignatureToText :: ClassSignature -> Text
classSignatureFromText :: Text -> Either String ClassSignature
data MethodSignature
MethodSignature :: [TypeParameter] -> [TypeSignature] -> Maybe TypeSignature -> [ThrowsSignature] -> MethodSignature
[msTypeParameters] :: MethodSignature -> [TypeParameter]
[msArguments] :: MethodSignature -> [TypeSignature]
[msResults] :: MethodSignature -> Maybe TypeSignature
[msThrows] :: MethodSignature -> [ThrowsSignature]
isSimpleMethodSignature :: MethodSignature -> Bool
methodSignatureToText :: MethodSignature -> Text
methodSignatureFromText :: Text -> Either String MethodSignature
newtype FieldSignature
FieldSignature :: ReferenceType -> FieldSignature
[fsRefType] :: FieldSignature -> ReferenceType
isSimpleFieldSignature :: FieldSignature -> Bool
fieldSignatureToText :: FieldSignature -> Text
fieldSignatureFromText :: Text -> Either String FieldSignature
data ClassType
ClassType :: !ClassName -> !Maybe InnerClassType -> [Maybe TypeArgument] -> ClassType
[ctsName] :: ClassType -> !ClassName
[ctsInnerClass] :: ClassType -> !Maybe InnerClassType
[ctsTypeArguments] :: ClassType -> [Maybe TypeArgument]
isSimpleClassType :: ClassType -> Bool
classTypeToName :: ClassType -> ClassName
-- | Create a classType from a Name Note the language is wierd here! Main.A
-- is not Main$A, but MainT.A is!
classTypeFromName :: ClassName -> ClassType
data InnerClassType
InnerClassType :: !Text -> !Maybe InnerClassType -> [Maybe TypeArgument] -> InnerClassType
[ictsName] :: InnerClassType -> !Text
[ictsInnerClass] :: InnerClassType -> !Maybe InnerClassType
[ictsTypeArguments] :: InnerClassType -> [Maybe TypeArgument]
data ReferenceType
RefClassType :: ClassType -> ReferenceType
RefTypeVariable :: TypeVariable -> ReferenceType
RefArrayType :: TypeSignature -> ReferenceType
isSimpleReferenceType :: ReferenceType -> Bool
referenceTypeFromRefType :: JRefType -> ReferenceType
data ThrowsSignature
ThrowsClass :: ClassType -> ThrowsSignature
ThrowsTypeVariable :: TypeVariable -> ThrowsSignature
isSimpleThrowsSignature :: ThrowsSignature -> Bool
throwsSignatureFromName :: ClassName -> ThrowsSignature
data TypeSignature
ReferenceType :: ReferenceType -> TypeSignature
BaseType :: JBaseType -> TypeSignature
isSimpleTypeSignature :: TypeSignature -> Bool
typeSignatureFromType :: JType -> TypeSignature
data TypeArgument
TypeArgument :: Maybe Wildcard -> ReferenceType -> TypeArgument
[taWildcard] :: TypeArgument -> Maybe Wildcard
[taType] :: TypeArgument -> ReferenceType
data TypeParameter
TypeParameter :: Text -> Maybe ReferenceType -> [ReferenceType] -> TypeParameter
[tpIdentifier] :: TypeParameter -> Text
[tpClassBound] :: TypeParameter -> Maybe ReferenceType
[tpInterfaceBound] :: TypeParameter -> [ReferenceType]
newtype TypeVariable
TypeVariable :: Text -> TypeVariable
[tvAsText] :: TypeVariable -> Text
data Wildcard
WildPlus :: Wildcard
WildMinus :: Wildcard
classSignatureP :: Parser ClassSignature
methodSignatureP :: Parser MethodSignature
fieldSignatureP :: Parser FieldSignature
classTypeP :: Parser ClassType
classTypeT :: ClassType -> Builder
referenceTypeP :: Parser ReferenceType
referenceTypeT :: ReferenceType -> Builder
throwsSignatureP :: Parser ThrowsSignature
throwsSignatureT :: ThrowsSignature -> Builder
typeArgumentsT :: [Maybe TypeArgument] -> Builder
typeArgumentsP :: Parser [Maybe TypeArgument]
typeArgumentP :: Parser (Maybe TypeArgument)
typeArgumentT :: Maybe TypeArgument -> Builder
typeParameterP :: Parser TypeParameter
typeParameterT :: TypeParameter -> Builder
typeParametersT :: [TypeParameter] -> Builder
typeParametersP :: Parser [TypeParameter]
typeSignatureP :: Parser TypeSignature
typeSignatureT :: TypeSignature -> Builder
typeVariableP :: Parser TypeVariable
instance GHC.Show.Show (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.MethodSignature
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.MethodSignature
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.MethodSignature
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.MethodSignature
instance GHC.Show.Show Language.JVM.Attribute.Signature.MethodSignature
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.ThrowsSignature
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.ThrowsSignature
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.ThrowsSignature
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.ThrowsSignature
instance GHC.Show.Show Language.JVM.Attribute.Signature.ThrowsSignature
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.ClassSignature
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.ClassSignature
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.ClassSignature
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.ClassSignature
instance GHC.Show.Show Language.JVM.Attribute.Signature.ClassSignature
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.TypeParameter
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.TypeParameter
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.TypeParameter
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.TypeParameter
instance GHC.Show.Show Language.JVM.Attribute.Signature.TypeParameter
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.FieldSignature
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.FieldSignature
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.FieldSignature
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.FieldSignature
instance GHC.Show.Show Language.JVM.Attribute.Signature.FieldSignature
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.TypeSignature
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.TypeSignature
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.TypeSignature
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.TypeSignature
instance GHC.Show.Show Language.JVM.Attribute.Signature.TypeSignature
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.InnerClassType
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.InnerClassType
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.InnerClassType
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.InnerClassType
instance GHC.Show.Show Language.JVM.Attribute.Signature.InnerClassType
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.TypeArgument
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.TypeArgument
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.TypeArgument
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.TypeArgument
instance GHC.Show.Show Language.JVM.Attribute.Signature.TypeArgument
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.ClassType
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.ClassType
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.ClassType
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.ClassType
instance GHC.Show.Show Language.JVM.Attribute.Signature.ClassType
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.ReferenceType
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.ReferenceType
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.ReferenceType
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.ReferenceType
instance GHC.Show.Show Language.JVM.Attribute.Signature.ReferenceType
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.TypeVariable
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.TypeVariable
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.TypeVariable
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.TypeVariable
instance GHC.Show.Show Language.JVM.Attribute.Signature.TypeVariable
instance Control.DeepSeq.NFData Language.JVM.Attribute.Signature.Wildcard
instance GHC.Generics.Generic Language.JVM.Attribute.Signature.Wildcard
instance GHC.Classes.Ord Language.JVM.Attribute.Signature.Wildcard
instance GHC.Classes.Eq Language.JVM.Attribute.Signature.Wildcard
instance GHC.Show.Show Language.JVM.Attribute.Signature.Wildcard
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.MethodSignature
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.ThrowsSignature
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.ClassSignature
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.TypeParameter
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.FieldSignature
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.TypeSignature
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.ReferenceType
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.ClassType
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.TypeVariable
instance Language.JVM.TextSerializable.TextSerializable Language.JVM.Attribute.Signature.Wildcard
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Signature.Signature Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Signature.Signature
-- | Based on the LineNumberTable Attribute, as documented here.
module Language.JVM.Attribute.LineNumberTable
-- | The LineNumberTable is just a mapping from offsets to
-- linenumbers.
newtype LineNumberTable r
LineNumberTable :: IntMap LineNumber -> LineNumberTable r
[lineNumberTable] :: LineNumberTable r -> IntMap LineNumber
type LineNumber = Word16
type BinaryFormat = SizedList16 (Word16, LineNumber)
-- | Returns the line number of an offset.
linenumber :: Int -> LineNumberTable r -> Maybe LineNumber
-- | Returns the line number of an offset. Helper function that also does
-- the conversion from integral to int.
linenumber' :: Integral a => a -> LineNumberTable r -> Maybe LineNumber
instance Control.DeepSeq.NFData (Language.JVM.Attribute.LineNumberTable.LineNumberTable r)
instance GHC.Generics.Generic (Language.JVM.Attribute.LineNumberTable.LineNumberTable r)
instance GHC.Classes.Ord (Language.JVM.Attribute.LineNumberTable.LineNumberTable r)
instance GHC.Classes.Eq (Language.JVM.Attribute.LineNumberTable.LineNumberTable r)
instance GHC.Show.Show (Language.JVM.Attribute.LineNumberTable.LineNumberTable r)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.LineNumberTable.LineNumberTable Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.LineNumberTable.LineNumberTable Language.JVM.Stage.Low)
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.LineNumberTable.LineNumberTable
-- | Based on the Exceptions Attribute, as documented here. It
-- describes the checked exceptions that a method can make.
module Language.JVM.Attribute.Exceptions
-- | An Exceptions attribute is a list of references into the constant
-- pool.
newtype Exceptions r
Exceptions :: SizedList16 (Ref ClassName r) -> Exceptions r
[exceptions] :: Exceptions r -> SizedList16 (Ref ClassName r)
instance GHC.Show.Show (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Exceptions.Exceptions Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Exceptions.Exceptions
-- | Based on the EnclosingMethod Attribute, as documented here.
module Language.JVM.Attribute.EnclosingMethod
-- | The EnclosingMethod is a reference to the enclosing method of
-- the class
data EnclosingMethod r
EnclosingMethod :: !Ref ClassName r -> !Ref (Maybe MethodId) r -> EnclosingMethod r
[enclosingClassName] :: EnclosingMethod r -> !Ref ClassName r
[enclosingMethodName] :: EnclosingMethod r -> !Ref (Maybe MethodId) r
instance GHC.Show.Show (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.EnclosingMethod.EnclosingMethod Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.EnclosingMethod.EnclosingMethod
-- | Based on the ConstantValue, as documented here.
module Language.JVM.Attribute.ConstantValue
-- | A constant value is just a index into the constant pool.
newtype ConstantValue r
ConstantValue :: Ref JValue r -> ConstantValue r
[constantValue] :: ConstantValue r -> Ref JValue r
instance GHC.Show.Show (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.ConstantValue.ConstantValue Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.ConstantValue.ConstantValue
-- | Based on the BootstrapMethods Attribute, as documented
-- [here](http:/docs.oracle.comjavasespecsjvmsse8html/jvms-4.html#jvms-4.7.23).
module Language.JVM.Attribute.BootstrapMethods
-- | Is a list of bootstrapped methods.
newtype BootstrapMethods r
BootstrapMethods :: SizedList16 (BootstrapMethod r) -> BootstrapMethods r
[methods'] :: BootstrapMethods r -> SizedList16 (BootstrapMethod r)
-- | The methods as list
methods :: BootstrapMethods r -> [BootstrapMethod r]
-- | A bootstraped methods.
data BootstrapMethod r
BootstrapMethod :: !DeepRef MethodHandle r -> !SizedList16 (Ref JValue r) -> BootstrapMethod r
[method] :: BootstrapMethod r -> !DeepRef MethodHandle r
[arguments] :: BootstrapMethod r -> !SizedList16 (Ref JValue r)
instance GHC.Show.Show (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.BootstrapMethods.BootstrapMethod Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.BootstrapMethods.BootstrapMethods Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.BootstrapMethods.BootstrapMethods
instance Language.JVM.Staged.Staged Language.JVM.Attribute.BootstrapMethods.BootstrapMethod
-- | Based on the Annotations Attribute, as documented
-- [here](https:/docs.oracle.comjavasespecsjvmsse8html/jvms-4.html#jvms-4.7.16).
module Language.JVM.Attribute.Annotations
-- | RuntimeVisibleAnnotations
newtype RuntimeVisibleAnnotations r
RuntimeVisibleAnnotations :: SizedList16 (Annotation r) -> RuntimeVisibleAnnotations r
[asListOfRuntimeVisibleAnnotations] :: RuntimeVisibleAnnotations r -> SizedList16 (Annotation r)
newtype RuntimeInvisibleAnnotations r
RuntimeInvisibleAnnotations :: SizedList16 (Annotation r) -> RuntimeInvisibleAnnotations r
[asListOfRuntimeInvisibleAnnotations] :: RuntimeInvisibleAnnotations r -> SizedList16 (Annotation r)
newtype RuntimeVisibleParameterAnnotations r
RuntimeVisibleParameterAnnotations :: SizedList8 (SizedList16 (Annotation r)) -> RuntimeVisibleParameterAnnotations r
[asListOfVisibleParameterAnnotations] :: RuntimeVisibleParameterAnnotations r -> SizedList8 (SizedList16 (Annotation r))
newtype RuntimeInvisibleParameterAnnotations r
RuntimeInvisibleParameterAnnotations :: SizedList8 (SizedList16 (Annotation r)) -> RuntimeInvisibleParameterAnnotations r
[asListOfInvisibleParameterAnnotations] :: RuntimeInvisibleParameterAnnotations r -> SizedList8 (SizedList16 (Annotation r))
data Annotation r
Annotation :: !Ref FieldDescriptor r -> !SizedList16 (ValuePair r) -> Annotation r
[annotationType] :: Annotation r -> !Ref FieldDescriptor r
[annotationValuePairs] :: Annotation r -> !SizedList16 (ValuePair r)
data ElementValue r
EByte :: !Ref VInteger r -> ElementValue r
EChar :: !Ref VInteger r -> ElementValue r
EDouble :: !Ref VDouble r -> ElementValue r
EFloat :: !Ref VFloat r -> ElementValue r
EInt :: !Ref VInteger r -> ElementValue r
ELong :: !Ref VLong r -> ElementValue r
EShort :: !Ref VInteger r -> ElementValue r
EBoolean :: !Ref VInteger r -> ElementValue r
EString :: !Ref VString r -> ElementValue r
EEnum :: !EnumValue r -> ElementValue r
EClass :: !Ref ReturnDescriptor r -> ElementValue r
EAnnotationType :: !Annotation r -> ElementValue r
EArrayType :: !SizedList16 (ElementValue r) -> ElementValue r
data EnumValue r
EnumValue :: !Ref FieldDescriptor r -> !Ref Text r -> EnumValue r
[enumTypeName] :: EnumValue r -> !Ref FieldDescriptor r
[enunConstName] :: EnumValue r -> !Ref Text r
data ValuePair r
ValuePair :: !Ref Text r -> !ElementValue r -> ValuePair r
[name] :: ValuePair r -> !Ref Text r
[value] :: ValuePair r -> !ElementValue r
-- | A TypeAnnotation is targeting different types.
data TypeAnnotation m r
TypeAnnotation :: !m r -> !TypePath -> !Ref FieldDescriptor r -> SizedList16 (ValuePair r) -> TypeAnnotation m r
[typeAnnotationTarget] :: TypeAnnotation m r -> !m r
[typeAnnotationPath] :: TypeAnnotation m r -> !TypePath
[typeAnnotationType] :: TypeAnnotation m r -> !Ref FieldDescriptor r
[typeAnnotationValuePairs] :: TypeAnnotation m r -> SizedList16 (ValuePair r)
type TypePath = SizedList8 TypePathItem
data TypePathItem
TypePathItem :: !TypePathKind -> !Word8 -> TypePathItem
[typePathKind] :: TypePathItem -> !TypePathKind
[typePathIndex] :: TypePathItem -> !Word8
data TypePathKind
TPathInArray :: TypePathKind
TPathInNested :: TypePathKind
TPathWildcard :: TypePathKind
TPathTypeArgument :: TypePathKind
newtype RuntimeVisibleTypeAnnotations m r
RuntimeVisibleTypeAnnotations :: SizedList16 (TypeAnnotation m r) -> RuntimeVisibleTypeAnnotations m r
[asListOfVisibleTypeAnnotations] :: RuntimeVisibleTypeAnnotations m r -> SizedList16 (TypeAnnotation m r)
newtype RuntimeInvisibleTypeAnnotations m r
RuntimeInvisibleTypeAnnotations :: SizedList16 (TypeAnnotation m r) -> RuntimeInvisibleTypeAnnotations m r
[asListOfInvisibleTypeAnnotations] :: RuntimeInvisibleTypeAnnotations m r -> SizedList16 (TypeAnnotation m r)
-- | From here
data ClassTypeAnnotation r
-- | type parameter declaration of generic class or interface (0x00)
ClassTypeParameterDeclaration :: !TypeParameterTarget -> ClassTypeAnnotation r
-- | type in extends clause of class or interface declaration, or in
-- implements clause of interface declaration (0x10)
ClassSuperType :: !SupertypeTarget -> ClassTypeAnnotation r
-- | type in bound of type parameter declaration of generic class or
-- interface (0x11)
ClassBoundTypeParameterDeclaration :: !TypeParameterBoundTarget -> ClassTypeAnnotation r
data MethodTypeAnnotation r
-- | type parameter declaration of generic method or constructor (0x01)
MethodTypeParameterDeclaration :: !TypeParameterTarget -> MethodTypeAnnotation r
-- | type in bound of type parameter declaration of generic method or
-- constructor (0x12)
MethodBoundTypeParameterDeclaration :: !TypeParameterBoundTarget -> MethodTypeAnnotation r
-- | return type of method or constructor (0x14)
MethodReturnType :: MethodTypeAnnotation r
-- | receiver type of method or constructor (0x15)
MethodReceiverType :: MethodTypeAnnotation r
-- | type in formal parameter declaration of method, constructor, or lambda
-- expression (0x16)
MethodFormalParameter :: !FormalParameterTarget -> MethodTypeAnnotation r
-- | type in throws clause of method or constructor (0x17)
MethodThrowsClause :: !ThrowsTarget -> MethodTypeAnnotation r
data FieldTypeAnnotation r
-- | type in field declaration (0x13)
FieldTypeAnnotation :: FieldTypeAnnotation r
data CodeTypeAnnotation r
-- | type in local variable declaration (0x40)
LocalVariableDeclaration :: !LocalvarTarget r -> CodeTypeAnnotation r
-- | type in resource variable declaration (0x41)
ResourceVariableDeclaration :: !LocalvarTarget r -> CodeTypeAnnotation r
-- | type in exception parameter declaration (0x42)
ExceptionParameterDeclaration :: !CatchTarget -> CodeTypeAnnotation r
-- | type in instanceof expression (0x43)
InstanceOfExpression :: !OffsetTarget r -> CodeTypeAnnotation r
-- | type in new expression (0x44)
NewExpression :: !OffsetTarget r -> CodeTypeAnnotation r
-- | type in method reference expression using ::new (0x45)
NewMethodReferenceExpression :: !OffsetTarget r -> CodeTypeAnnotation r
-- | type in method reference expression using ::Identifier (0x46)
IdentifierMethodReferenceExpression :: !OffsetTarget r -> CodeTypeAnnotation r
-- | type in cast expression (0x47)
CastExpression :: !TypeArgumentTarget r -> CodeTypeAnnotation r
-- | type argument for generic constructor in new expression or explicit
-- constructor invocation statement (0x48)
ConstructorExpression :: !TypeArgumentTarget r -> CodeTypeAnnotation r
-- | type argument for generic method in method invocation expression
-- (0x49)
MethodIncovationExpression :: !TypeArgumentTarget r -> CodeTypeAnnotation r
-- | type argument for generic constructor in method reference expression
-- using ::new (0x4A)
GenericNewMethodReferenceExpression :: !TypeArgumentTarget r -> CodeTypeAnnotation r
-- | type argument for generic method in method reference expression using
-- ::Identifier (0x4B)
GenericIdentifierwMethodReferenceExpression :: !TypeArgumentTarget r -> CodeTypeAnnotation r
-- | The TypeParameterTarget item indicates that an annotation
-- appears on the declaration of the i'th type parameter of a generic
-- class, generic interface, generic method, or generic constructor.
type TypeParameterTarget = Word8
-- | The SupertypeTarget item indicates that an annotation appears
-- on a type in the extends or implements clause of a class or interface
-- declaration.
--
-- A value of 65535 specifies that the annotation appears on the
-- superclass in an extends clause of a class declaration.
type SupertypeTarget = Word16
-- | Check if the SupertypeTarget is in the extends clauses
isInExtendsClause :: SupertypeTarget -> Bool
-- | The TypeParameterBoundTarget item indicates that an annotation
-- appears on the i'th bound of the j'th type parameter declaration of a
-- generic class, interface, method, or constructor.
data TypeParameterBoundTarget
TypeParameterBoundTarget :: !TypeParameterTarget -> !Word8 -> TypeParameterBoundTarget
[typeParameter] :: TypeParameterBoundTarget -> !TypeParameterTarget
[typeBound] :: TypeParameterBoundTarget -> !Word8
-- | The FormalParameterTarget item indicates that an annotation
-- appears on the type in a formal parameter declaration of a method,
-- constructor, or lambda expression. The target is 0-indexed.
type FormalParameterTarget = Word8
-- | The ThrowsTarget item indicates that an annotation appears on
-- the i'th type in the throws clause of a method or constructor
-- declaration.
--
-- The value is an index into the Exceptions attribute
type ThrowsTarget = Word16
-- | The LocalvarTarget item indicates that an annotation appears on
-- the type in a local variable declaration, including a variable
-- declared as a resource in a try-with-resources statement.
--
-- The table is needed because a variable might span multiple live
-- ranges.
type LocalvarTarget r = SizedList16 (LocalvarEntry r)
-- | An entry in the Localvar Table
data LocalvarEntry r
LocalvarEntry :: !ByteCodeRef r -> !Word16 -> !Word16 -> LocalvarEntry r
[lvStartPc] :: LocalvarEntry r -> !ByteCodeRef r
[lvLength] :: LocalvarEntry r -> !Word16
[lvLocalVarIndex] :: LocalvarEntry r -> !Word16
-- | The CatchTarget item indicates that an annotation appears on
-- the i'th type in an exception parameter declaration.
type CatchTarget = Word16
-- | The OffsetTarget item indicates that an annotation appears on
-- either the type in an instanceof expression or a new expression, or
-- the type before the :: in a method reference expression.
type OffsetTarget r = ByteCodeRef r
-- | The TypeArgumentTarget item indicates that an annotation
-- appears either on the i'th type in a cast expression, or on the i'th
-- type argument in the explicit type argument list for any of the
-- following: a new expression, an explicit constructor invocation
-- statement, a method invocation expression, or a method reference
-- expression.
data TypeArgumentTarget r
TypeArgumentTarget :: !ByteCodeRef r -> Word8 -> TypeArgumentTarget r
[typeArgumentOffset] :: TypeArgumentTarget r -> !ByteCodeRef r
[typeArgumentIndex] :: TypeArgumentTarget r -> Word8
-- | The AnnotationDefault attribute is a variable-length attribute in the
-- attributes table of certain method_info structures (§4.6), namely
-- those representing elements of annotation types (JLS §9.6.1). The
-- AnnotationDefault attribute records the default value (JLS §9.6.2) for
-- the element represented by the method_info structure. The Java Virtual
-- Machine must make this default value available so it can be applied by
-- appropriate reflective APIs.
newtype AnnotationDefault r
AnnotationDefault :: ElementValue r -> AnnotationDefault r
[defaultValue] :: AnnotationDefault r -> ElementValue r
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.TypeArgumentTarget Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.LocalvarEntry Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Ord (a Language.JVM.Stage.High) => GHC.Classes.Ord (Language.JVM.Attribute.Annotations.TypeAnnotation a Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.EnumValue Language.JVM.Stage.High)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.ValuePair Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.Annotation Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData Language.JVM.Attribute.Annotations.TypeParameterBoundTarget
instance GHC.Generics.Generic Language.JVM.Attribute.Annotations.TypeParameterBoundTarget
instance GHC.Classes.Ord Language.JVM.Attribute.Annotations.TypeParameterBoundTarget
instance GHC.Show.Show Language.JVM.Attribute.Annotations.TypeParameterBoundTarget
instance GHC.Classes.Eq Language.JVM.Attribute.Annotations.TypeParameterBoundTarget
instance Control.DeepSeq.NFData Language.JVM.Attribute.Annotations.TypePathItem
instance GHC.Generics.Generic Language.JVM.Attribute.Annotations.TypePathItem
instance GHC.Classes.Ord Language.JVM.Attribute.Annotations.TypePathItem
instance GHC.Classes.Eq Language.JVM.Attribute.Annotations.TypePathItem
instance GHC.Show.Show Language.JVM.Attribute.Annotations.TypePathItem
instance Control.DeepSeq.NFData Language.JVM.Attribute.Annotations.TypePathKind
instance GHC.Generics.Generic Language.JVM.Attribute.Annotations.TypePathKind
instance GHC.Classes.Ord Language.JVM.Attribute.Annotations.TypePathKind
instance GHC.Classes.Eq Language.JVM.Attribute.Annotations.TypePathKind
instance GHC.Show.Show Language.JVM.Attribute.Annotations.TypePathKind
instance GHC.Show.Show (m Language.JVM.Stage.High) => GHC.Show.Show (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.High)
instance GHC.Classes.Eq (m Language.JVM.Stage.High) => GHC.Classes.Eq (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.High)
instance GHC.Generics.Generic (m Language.JVM.Stage.High) => GHC.Generics.Generic (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.High)
instance (GHC.Generics.Generic (m Language.JVM.Stage.High), Control.DeepSeq.NFData (m Language.JVM.Stage.High)) => Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.High)
instance GHC.Show.Show (m Language.JVM.Stage.Low) => GHC.Show.Show (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.Low)
instance GHC.Classes.Eq (m Language.JVM.Stage.Low) => GHC.Classes.Eq (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.Low)
instance GHC.Classes.Ord (m Language.JVM.Stage.Low) => GHC.Classes.Ord (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.Low)
instance GHC.Generics.Generic (m Language.JVM.Stage.Low) => GHC.Generics.Generic (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.Low)
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Control.DeepSeq.NFData (m Language.JVM.Stage.Low)) => Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.Low)
instance GHC.Show.Show (m Language.JVM.Stage.High) => GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.High)
instance GHC.Classes.Eq (m Language.JVM.Stage.High) => GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.High)
instance GHC.Generics.Generic (m Language.JVM.Stage.High) => GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.High)
instance (GHC.Generics.Generic (m Language.JVM.Stage.High), Control.DeepSeq.NFData (m Language.JVM.Stage.High)) => Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.High)
instance GHC.Show.Show (m Language.JVM.Stage.Low) => GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Classes.Eq (m Language.JVM.Stage.Low) => GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Classes.Ord (m Language.JVM.Stage.Low) => GHC.Classes.Ord (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Generics.Generic (m Language.JVM.Stage.Low) => GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Control.DeepSeq.NFData (m Language.JVM.Stage.Low)) => Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Data.Binary.Class.Binary (m Language.JVM.Stage.Low)) => Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Show.Show (m Language.JVM.Stage.High) => GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.High)
instance GHC.Classes.Eq (m Language.JVM.Stage.High) => GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.High)
instance GHC.Generics.Generic (m Language.JVM.Stage.High) => GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.High)
instance (GHC.Generics.Generic (m Language.JVM.Stage.High), Control.DeepSeq.NFData (m Language.JVM.Stage.High)) => Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.High)
instance GHC.Show.Show (m Language.JVM.Stage.Low) => GHC.Show.Show (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Classes.Eq (m Language.JVM.Stage.Low) => GHC.Classes.Eq (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Classes.Ord (m Language.JVM.Stage.Low) => GHC.Classes.Ord (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance GHC.Generics.Generic (m Language.JVM.Stage.Low) => GHC.Generics.Generic (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Control.DeepSeq.NFData (m Language.JVM.Stage.Low)) => Control.DeepSeq.NFData (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Data.Binary.Class.Binary (m Language.JVM.Stage.Low)) => Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.AnnotationDefault Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.AnnotationDefault
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Data.Binary.Class.Binary (m Language.JVM.Stage.Low)) => Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged m => Language.JVM.Staged.Staged (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m)
instance Language.JVM.ByteCode.ByteCodeStaged m => Language.JVM.ByteCode.ByteCodeStaged (Language.JVM.Attribute.Annotations.RuntimeInvisibleTypeAnnotations m)
instance (GHC.Generics.Generic (m Language.JVM.Stage.Low), Data.Binary.Class.Binary (m Language.JVM.Stage.Low)) => Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged m => Language.JVM.Staged.Staged (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m)
instance Language.JVM.ByteCode.ByteCodeStaged m => Language.JVM.ByteCode.ByteCodeStaged (Language.JVM.Attribute.Annotations.RuntimeVisibleTypeAnnotations m)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.CodeTypeAnnotation Language.JVM.Stage.Low)
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.Annotations.CodeTypeAnnotation
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.Annotations.TypeArgumentTarget
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.Annotations.LocalvarEntry
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.MethodTypeAnnotation Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.MethodTypeAnnotation
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.ClassTypeAnnotation Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.ClassTypeAnnotation
instance Data.Binary.Class.Binary Language.JVM.Attribute.Annotations.TypeParameterBoundTarget
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.FieldTypeAnnotation
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.FieldTypeAnnotation Language.JVM.Stage.Low)
instance Data.Binary.Class.Binary (m Language.JVM.Stage.Low) => Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.TypeAnnotation m Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged m => Language.JVM.Staged.Staged (Language.JVM.Attribute.Annotations.TypeAnnotation m)
instance Language.JVM.ByteCode.ByteCodeStaged m => Language.JVM.ByteCode.ByteCodeStaged (Language.JVM.Attribute.Annotations.TypeAnnotation m)
instance Data.Binary.Class.Binary Language.JVM.Attribute.Annotations.TypePathItem
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.RuntimeVisibleAnnotations
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.RuntimeInvisibleAnnotations
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.RuntimeVisibleParameterAnnotations
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.RuntimeInvisibleParameterAnnotations
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.Annotation
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.ValuePair
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.ElementValue
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Annotations.ElementValue Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Annotations.EnumValue
module Language.JVM.Attribute.Code
-- | Code contains the actual byte-code. The i type parameter is
-- added to allow indicate the two stages of the code file, before and
-- after access to the ConstantPool. i should be either
-- Ref or Deref.
data Code r
Code :: !Word16 -> !Word16 -> !ByteCode r -> !SizedList16 (ExceptionTable r) -> !Attributes CodeAttributes r -> Code r
[codeMaxStack] :: Code r -> !Word16
[codeMaxLocals] :: Code r -> !Word16
[codeByteCode] :: Code r -> !ByteCode r
[codeExceptionTable] :: Code r -> !SizedList16 (ExceptionTable r)
[codeAttributes] :: Code r -> !Attributes CodeAttributes r
data CodeAttributes r
CodeAttributes :: [StackMapTable r] -> [LineNumberTable r] -> [RuntimeVisibleTypeAnnotations CodeTypeAnnotation r] -> [RuntimeInvisibleTypeAnnotations CodeTypeAnnotation r] -> [Attribute r] -> CodeAttributes r
[caStackMapTable] :: CodeAttributes r -> [StackMapTable r]
[caLineNumberTable] :: CodeAttributes r -> [LineNumberTable r]
[caVisibleTypeAnnotations] :: CodeAttributes r -> [RuntimeVisibleTypeAnnotations CodeTypeAnnotation r]
[caInvisibleTypeAnnotations] :: CodeAttributes r -> [RuntimeInvisibleTypeAnnotations CodeTypeAnnotation r]
[caOthers] :: CodeAttributes r -> [Attribute r]
emptyCodeAttributes :: CodeAttributes High
data ExceptionTable r
ExceptionTable :: !ByteCodeRef r -> !ByteCodeRef r -> !ByteCodeRef r -> !Ref (Maybe ClassName) r -> ExceptionTable r
-- | Inclusive program counter into code
[start] :: ExceptionTable r -> !ByteCodeRef r
-- | Exclusive program counter into code
[end] :: ExceptionTable r -> !ByteCodeRef r
-- | A program counter into code indicating the handler.
[handler] :: ExceptionTable r -> !ByteCodeRef r
[catchType] :: ExceptionTable r -> !Ref (Maybe ClassName) r
-- | Returns the StackMapTable attribute if any
codeStackMapTable :: Code High -> Maybe (StackMapTable High)
-- | Extracts a list of bytecode operation
codeByteCodeOprs :: Code High -> Vector (ByteCodeOpr High)
-- | Extracts a list of bytecode instructions
codeByteCodeInsts :: Code i -> Vector (ByteCodeInst i)
instance GHC.Show.Show (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Code.CodeAttributes Language.JVM.Stage.High)
instance GHC.Show.Show (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Code.ExceptionTable Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.Code.Code Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.Code.Code Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.Code.Code Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.Code.Code Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.Code.Code Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.Code.Code
instance Language.JVM.ByteCode.ByteCodeStaged Language.JVM.Attribute.Code.ExceptionTable
-- | Contains the AccessFlags used in the different modules.
module Language.JVM.AccessFlag
-- | Access flags for the Method
data MAccessFlag
MPublic :: MAccessFlag
MPrivate :: MAccessFlag
MProtected :: MAccessFlag
MStatic :: MAccessFlag
MFinal :: MAccessFlag
MSynchronized :: MAccessFlag
MBridge :: MAccessFlag
MVarargs :: MAccessFlag
MNative :: MAccessFlag
MAbstract :: MAccessFlag
MStrictFP :: MAccessFlag
MSynthetic :: MAccessFlag
-- | The Enumish mapping of the MAccessFlag
mflags :: [(Int, MAccessFlag)]
-- | Access flags for the Field
data FAccessFlag
FPublic :: FAccessFlag
FPrivate :: FAccessFlag
FProtected :: FAccessFlag
FStatic :: FAccessFlag
FFinal :: FAccessFlag
FVolatile :: FAccessFlag
FTransient :: FAccessFlag
FSynthetic :: FAccessFlag
FEnum :: FAccessFlag
-- | The Enumish mapping of the FAccessFlag
fflags :: [(Int, FAccessFlag)]
-- | Access flags for the ClassFile
data CAccessFlag
CPublic :: CAccessFlag
CFinal :: CAccessFlag
CSuper :: CAccessFlag
CInterface :: CAccessFlag
CAbstract :: CAccessFlag
CSynthetic :: CAccessFlag
CAnnotation :: CAccessFlag
CEnum :: CAccessFlag
CModule :: CAccessFlag
-- | The Enumish mapping of the CAccessFlag
cflags :: [(Int, CAccessFlag)]
-- | Access flags for the InnerClass
data ICAccessFlag
ICPublic :: ICAccessFlag
ICPrivate :: ICAccessFlag
ICProtected :: ICAccessFlag
ICStatic :: ICAccessFlag
ICFinal :: ICAccessFlag
ICInterface :: ICAccessFlag
ICAbstract :: ICAccessFlag
ICSynthetic :: ICAccessFlag
ICAnnotation :: ICAccessFlag
ICEnum :: ICAccessFlag
-- | The Enumish mapping of the CAccessFlag
icflags :: [(Int, ICAccessFlag)]
-- | Access flags for parameters, as declared in the documentation.
data PAccessFlag
-- | Indicates that the formal parameter was declared final.
PFinal :: PAccessFlag
-- | 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.)
PSynthetic :: PAccessFlag
-- | 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.)
PMandated :: PAccessFlag
-- | The Enumish mapping of the PAccessFlag
pflags :: [(Int, PAccessFlag)]
instance GHC.Generics.Generic Language.JVM.AccessFlag.PAccessFlag
instance Control.DeepSeq.NFData Language.JVM.AccessFlag.PAccessFlag
instance GHC.Classes.Eq Language.JVM.AccessFlag.PAccessFlag
instance GHC.Show.Show Language.JVM.AccessFlag.PAccessFlag
instance GHC.Classes.Ord Language.JVM.AccessFlag.PAccessFlag
instance GHC.Generics.Generic Language.JVM.AccessFlag.FAccessFlag
instance Control.DeepSeq.NFData Language.JVM.AccessFlag.FAccessFlag
instance GHC.Classes.Eq Language.JVM.AccessFlag.FAccessFlag
instance GHC.Show.Show Language.JVM.AccessFlag.FAccessFlag
instance GHC.Classes.Ord Language.JVM.AccessFlag.FAccessFlag
instance GHC.Generics.Generic Language.JVM.AccessFlag.ICAccessFlag
instance Control.DeepSeq.NFData Language.JVM.AccessFlag.ICAccessFlag
instance GHC.Classes.Eq Language.JVM.AccessFlag.ICAccessFlag
instance GHC.Show.Show Language.JVM.AccessFlag.ICAccessFlag
instance GHC.Classes.Ord Language.JVM.AccessFlag.ICAccessFlag
instance GHC.Generics.Generic Language.JVM.AccessFlag.CAccessFlag
instance Control.DeepSeq.NFData Language.JVM.AccessFlag.CAccessFlag
instance GHC.Classes.Eq Language.JVM.AccessFlag.CAccessFlag
instance GHC.Show.Show Language.JVM.AccessFlag.CAccessFlag
instance GHC.Classes.Ord Language.JVM.AccessFlag.CAccessFlag
instance GHC.Generics.Generic Language.JVM.AccessFlag.MAccessFlag
instance Control.DeepSeq.NFData Language.JVM.AccessFlag.MAccessFlag
instance GHC.Classes.Eq Language.JVM.AccessFlag.MAccessFlag
instance GHC.Show.Show Language.JVM.AccessFlag.MAccessFlag
instance GHC.Classes.Ord Language.JVM.AccessFlag.MAccessFlag
instance Language.JVM.Utils.Enumish Language.JVM.AccessFlag.PAccessFlag
instance Language.JVM.Utils.Enumish Language.JVM.AccessFlag.FAccessFlag
instance Language.JVM.Utils.Enumish Language.JVM.AccessFlag.ICAccessFlag
instance Language.JVM.Utils.Enumish Language.JVM.AccessFlag.CAccessFlag
instance Language.JVM.Utils.Enumish Language.JVM.AccessFlag.MAccessFlag
-- | Based on the MethodParameters Attribute, as documented
-- [here](http:/docs.oracle.comjavasespecsjvmsse8html/jvms-4.html#jvms-4.7.24).
module Language.JVM.Attribute.MethodParameters
-- | Is a list of method parameters, one for each parameter
newtype MethodParameters r
MethodParameters :: SizedList8 (MethodParameter r) -> MethodParameters r
[methodParameters] :: MethodParameters r -> SizedList8 (MethodParameter r)
-- | A method parameter
data MethodParameter r
MethodParameter :: !Ref Text r -> !BitSet16 PAccessFlag -> MethodParameter r
[parameterName] :: MethodParameter r -> !Ref Text r
[parameterAccessFlags] :: MethodParameter r -> !BitSet16 PAccessFlag
instance GHC.Show.Show (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.MethodParameters.MethodParameter Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.MethodParameters.MethodParameters Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.MethodParameters.MethodParameters
instance Language.JVM.Staged.Staged Language.JVM.Attribute.MethodParameters.MethodParameter
-- | This is the main module for accessing all kinds of Attributes.
module Language.JVM.Attribute
-- | Is a list of bootstrapped methods.
data BootstrapMethods r
-- | Code contains the actual byte-code. The i type parameter is
-- added to allow indicate the two stages of the code file, before and
-- after access to the ConstantPool. i should be either
-- Ref or Deref.
data Code r
-- | A constant value is just a index into the constant pool.
data ConstantValue r
-- | An Exceptions attribute is a list of references into the constant
-- pool.
data Exceptions r
-- | The LineNumberTable is just a mapping from offsets to
-- linenumbers.
data LineNumberTable r
-- | An Exceptions attribute is a list of references into the constant
-- pool.
data StackMapTable r
data Signature a
-- | RuntimeVisibleAnnotations
data RuntimeVisibleAnnotations r
data RuntimeInvisibleAnnotations r
data RuntimeVisibleParameterAnnotations r
data RuntimeInvisibleParameterAnnotations r
data RuntimeVisibleTypeAnnotations m r
data RuntimeInvisibleTypeAnnotations m r
-- | From here
data ClassTypeAnnotation r
data MethodTypeAnnotation r
data FieldTypeAnnotation r
data CodeTypeAnnotation r
-- | The AnnotationDefault attribute is a variable-length attribute in the
-- attributes table of certain method_info structures (§4.6), namely
-- those representing elements of annotation types (JLS §9.6.1). The
-- AnnotationDefault attribute records the default value (JLS §9.6.2) for
-- the element represented by the method_info structure. The Java Virtual
-- Machine must make this default value available so it can be applied by
-- appropriate reflective APIs.
data AnnotationDefault r
-- | Is a list of method parameters, one for each parameter
data MethodParameters r
module Language.JVM.Method
-- | A Method in the class-file, as described here.
data Method r
Method :: !BitSet16 MAccessFlag -> !Ref Text r -> !Ref MethodDescriptor r -> !Attributes MethodAttributes r -> Method r
[mAccessFlags'] :: Method r -> !BitSet16 MAccessFlag
[mName] :: Method r -> !Ref Text r
[mDescriptor] :: Method r -> !Ref MethodDescriptor r
[mAttributes] :: Method r -> !Attributes MethodAttributes r
-- | Unpack the BitSet and get the AccessFlags as a Set.
mAccessFlags :: Method r -> Set MAccessFlag
data MethodAttributes r
MethodAttributes :: [Code r] -> [Exceptions r] -> [Signature r] -> [AnnotationDefault r] -> [MethodParameters r] -> [RuntimeVisibleAnnotations r] -> [RuntimeInvisibleAnnotations r] -> [RuntimeVisibleParameterAnnotations r] -> [RuntimeInvisibleParameterAnnotations r] -> [RuntimeVisibleTypeAnnotations MethodTypeAnnotation r] -> [RuntimeInvisibleTypeAnnotations MethodTypeAnnotation r] -> [Attribute r] -> MethodAttributes r
[maCode] :: MethodAttributes r -> [Code r]
[maExceptions] :: MethodAttributes r -> [Exceptions r]
[maSignatures] :: MethodAttributes r -> [Signature r]
[maAnnotationDefault] :: MethodAttributes r -> [AnnotationDefault r]
[maMethodParameters] :: MethodAttributes r -> [MethodParameters r]
[maVisibleAnnotations] :: MethodAttributes r -> [RuntimeVisibleAnnotations r]
[maInvisibleAnnotations] :: MethodAttributes r -> [RuntimeInvisibleAnnotations r]
[maVisibleParameterAnnotations] :: MethodAttributes r -> [RuntimeVisibleParameterAnnotations r]
[maInvisibleParameterAnnotations] :: MethodAttributes r -> [RuntimeInvisibleParameterAnnotations r]
[maVisibleTypeAnnotations] :: MethodAttributes r -> [RuntimeVisibleTypeAnnotations MethodTypeAnnotation r]
[maInvisibleTypeAnnotations] :: MethodAttributes r -> [RuntimeInvisibleTypeAnnotations MethodTypeAnnotation r]
[maOthers] :: MethodAttributes r -> [Attribute r]
emptyMethodAttributes :: MethodAttributes High
-- | Fetch the Code attribute, if any. There can only be one code
-- attribute in a method.
mCode :: Method High -> Maybe (Code High)
-- | Fetch the Exceptions attribute. There can only be one
-- exceptions attribute in a method.
mExceptions' :: Method High -> Maybe (Exceptions High)
-- | Fetches the Exceptions attribute, but turns it into an list of
-- exceptions. If no exceptions field where found the empty list is
-- returned
mExceptions :: Method High -> [ClassName]
-- | Fetches the Signature attribute, if any.
mSignature :: Method High -> Maybe (Signature High)
instance GHC.Show.Show (Language.JVM.Method.Method Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Method.Method Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Method.Method Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Method.Method Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Method.Method Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Method.Method Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Method.Method Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Method.Method Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Method.Method Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Method.Method Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Method.MethodAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Method.MethodAttributes Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Method.MethodAttributes Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Method.MethodAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Method.MethodAttributes Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Method.MethodAttributes Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Method.MethodAttributes Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Method.MethodAttributes Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Method.MethodAttributes Language.JVM.Stage.High)
instance Language.JVM.Staged.Staged Language.JVM.Method.Method
module Language.JVM.Field
-- | A Field in the class-file, as described here.
data Field r
Field :: !BitSet16 FAccessFlag -> !Ref Text r -> !Ref FieldDescriptor r -> !Attributes FieldAttributes r -> Field r
[fAccessFlags'] :: Field r -> !BitSet16 FAccessFlag
[fName] :: Field r -> !Ref Text r
[fDescriptor] :: Field r -> !Ref FieldDescriptor r
[fAttributes] :: Field r -> !Attributes FieldAttributes r
-- | Get the set of access flags
fAccessFlags :: Field r -> Set FAccessFlag
-- | Fetch the ConstantValue attribute.
fConstantValue :: Field High -> Maybe (ConstantValue High)
-- | Fetches the Signature attribute, if any.
fSignature :: Field High -> Maybe (Signature High)
data FieldAttributes r
FieldAttributes :: [ConstantValue r] -> [Signature r] -> [RuntimeVisibleAnnotations r] -> [RuntimeInvisibleAnnotations r] -> [RuntimeVisibleTypeAnnotations FieldTypeAnnotation r] -> [RuntimeInvisibleTypeAnnotations FieldTypeAnnotation r] -> [Attribute r] -> FieldAttributes r
[faConstantValues] :: FieldAttributes r -> [ConstantValue r]
[faSignatures] :: FieldAttributes r -> [Signature r]
[faVisibleAnnotations] :: FieldAttributes r -> [RuntimeVisibleAnnotations r]
[faInvisibleAnnotations] :: FieldAttributes r -> [RuntimeInvisibleAnnotations r]
[faVisibleTypeAnnotations] :: FieldAttributes r -> [RuntimeVisibleTypeAnnotations FieldTypeAnnotation r]
[faInvisibleTypeAnnotations] :: FieldAttributes r -> [RuntimeInvisibleTypeAnnotations FieldTypeAnnotation r]
[faOthers] :: FieldAttributes r -> [Attribute r]
emptyFieldAttributes :: FieldAttributes High
instance GHC.Show.Show (Language.JVM.Field.Field Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Field.Field Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Field.Field Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Field.Field Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Field.Field Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Field.Field Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Field.Field Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Field.Field Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Field.Field Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Field.Field Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Field.FieldAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Field.FieldAttributes Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Field.FieldAttributes Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Field.FieldAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Field.FieldAttributes Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Field.FieldAttributes Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Field.FieldAttributes Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Field.FieldAttributes Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Field.FieldAttributes Language.JVM.Stage.High)
instance Language.JVM.Staged.Staged Language.JVM.Field.Field
-- | Based on the InnerClasses Attribute, as documented here.
module Language.JVM.Attribute.InnerClasses
-- | The InnerClasses is a reference to the enclosing method of the
-- class
newtype InnerClasses r
InnerClasses :: Choice (SizedList16 (InnerClass Low)) [InnerClass High] r -> InnerClasses r
[innerClasses] :: InnerClasses r -> Choice (SizedList16 (InnerClass Low)) [InnerClass High] r
data InnerClass r
InnerClass :: !Ref ClassName r -> !Ref (Maybe ClassName) r -> !Ref (Maybe Text) r -> !BitSet16 ICAccessFlag -> InnerClass r
[icClassName] :: InnerClass r -> !Ref ClassName r
[icOuterClassName] :: InnerClass r -> !Ref (Maybe ClassName) r
[icInnerName] :: InnerClass r -> !Ref (Maybe Text) r
[icInnerAccessFlags] :: InnerClass r -> !BitSet16 ICAccessFlag
instance GHC.Show.Show (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.InnerClasses.InnerClass Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance Language.JVM.Attribute.Base.IsAttribute (Language.JVM.Attribute.InnerClasses.InnerClasses Language.JVM.Stage.Low)
instance Language.JVM.Staged.Staged Language.JVM.Attribute.InnerClasses.InnerClasses
instance Language.JVM.Staged.Staged Language.JVM.Attribute.InnerClasses.InnerClass
-- | The class file is described in this module.
module Language.JVM.ClassFile
-- | A ClassFile as described here.
data ClassFile r
ClassFile :: !Word32 -> !Word16 -> !Word16 -> !Choice (ConstantPool r) () r -> !BitSet16 CAccessFlag -> !Ref ClassName r -> !Ref ClassName r -> !SizedList16 (Ref ClassName r) -> !SizedList16 (Field r) -> !SizedList16 (Method r) -> !Attributes ClassAttributes r -> ClassFile r
[cMagicNumber] :: ClassFile r -> !Word32
[cMinorVersion] :: ClassFile r -> !Word16
[cMajorVersion] :: ClassFile r -> !Word16
[cConstantPool] :: ClassFile r -> !Choice (ConstantPool r) () r
[cAccessFlags'] :: ClassFile r -> !BitSet16 CAccessFlag
[cThisClass] :: ClassFile r -> !Ref ClassName r
[cSuperClass] :: ClassFile r -> !Ref ClassName r
[cInterfaces] :: ClassFile r -> !SizedList16 (Ref ClassName r)
[cFields'] :: ClassFile r -> !SizedList16 (Field r)
[cMethods'] :: ClassFile r -> !SizedList16 (Method r)
[cAttributes] :: ClassFile r -> !Attributes ClassAttributes r
-- | Get the set of access flags
cAccessFlags :: ClassFile r -> Set CAccessFlag
-- | Get a list of Fields of a ClassFile.
cFields :: ClassFile r -> [Field r]
-- | Get a list of Methods of a ClassFile.
cMethods :: ClassFile r -> [Method r]
cSignature :: ClassFile High -> Maybe (Signature High)
cEnclosingMethod :: ClassFile High -> Maybe (EnclosingMethod High)
cInnerClasses :: ClassFile High -> [InnerClass High]
data ClassAttributes r
ClassAttributes :: [BootstrapMethods r] -> [Signature r] -> [EnclosingMethod r] -> [InnerClasses r] -> [RuntimeVisibleAnnotations r] -> [RuntimeInvisibleAnnotations r] -> [RuntimeVisibleTypeAnnotations ClassTypeAnnotation r] -> [RuntimeInvisibleTypeAnnotations ClassTypeAnnotation r] -> [Attribute r] -> ClassAttributes r
[caBootstrapMethods] :: ClassAttributes r -> [BootstrapMethods r]
[caSignature] :: ClassAttributes r -> [Signature r]
[caEnclosingMethod] :: ClassAttributes r -> [EnclosingMethod r]
[caInnerClasses] :: ClassAttributes r -> [InnerClasses r]
[caVisibleAnnotations] :: ClassAttributes r -> [RuntimeVisibleAnnotations r]
[caInvisibleAnnotations] :: ClassAttributes r -> [RuntimeInvisibleAnnotations r]
[caVisibleTypeAnnotations] :: ClassAttributes r -> [RuntimeVisibleTypeAnnotations ClassTypeAnnotation r]
[caInvisibleTypeAnnotations] :: ClassAttributes r -> [RuntimeInvisibleTypeAnnotations ClassTypeAnnotation r]
[caOthers] :: ClassAttributes r -> [Attribute r]
emptyClassAttributes :: ClassAttributes High
cBootstrapMethods :: ClassFile High -> [BootstrapMethod High]
instance GHC.Show.Show (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.High)
instance Data.Binary.Class.Binary (Language.JVM.ClassFile.ClassFile Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Eq (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.Low)
instance GHC.Generics.Generic (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.Low)
instance Control.DeepSeq.NFData (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.Low)
instance GHC.Classes.Ord (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.Low)
instance GHC.Show.Show (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.High)
instance GHC.Classes.Eq (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.High)
instance GHC.Generics.Generic (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.High)
instance Control.DeepSeq.NFData (Language.JVM.ClassFile.ClassAttributes Language.JVM.Stage.High)
instance Language.JVM.Staged.Staged Language.JVM.ClassFile.ClassFile
module Language.JVM.ClassFileReader
-- | Top level command that combines decode and evolve.
readClassFile :: ByteString -> Either ClassFileError (ClassFile High)
-- | Top level command that combines devolve and encode.
writeClassFile :: ClassFile High -> ByteString
-- | Top level command that combines devolve and encode, but
-- tries to retain exact syntax of a previous run using the class pool.
writeClassFile' :: ConstantPool Low -> ClassFile High -> ByteString
-- | Decode a class file from a lazy ByteString. Ensures that the
-- lazy bytestring is read to EOF, and thereby closing any open files.
decodeClassFile :: ByteString -> Either ClassFileError (ClassFile Low)
-- | Create a lazy byte string from a class file
encodeClassFile :: ClassFile Low -> ByteString
-- | Evolve the class file to inline the references. A filter function is
-- provided to remove some attributes. This will sometimes give faster
-- loading times.
evolveClassFile :: ((AttributeLocation, Text) -> Bool) -> ClassFile Low -> Either ClassFileError (ClassFile High)
-- | Devolve a ClassFile from High to Low. This might make the
-- ClassFile contain invalid attributes, since we can't read all
-- attributes. If this this is a problem see devolveClassFile'.
devolveClassFile :: ClassFile High -> ClassFile Low
-- | Devolve a ClassFile form High to Low, while
-- maintaining the class pool of the original class file. This is useful
-- if we care that unread attributes are still valid. This can cause
-- untended bloat as we do not want to throw away anything in the program
devolveClassFile' :: ConstantPool Low -> ClassFile High -> ClassFile Low
-- | A test function, essentially reading the classfile and then writing it
-- to another file.
roundtripCopy :: FilePath -> FilePath -> IO ()
data Evolve a
-- | An error while reading a class file is represented using this data
-- structure
data ClassFileError
data EvolveConfig
EvolveConfig :: [String] -> ConstantPool High -> ((AttributeLocation, Text) -> Bool) -> EvolveConfig
[ecLabel] :: EvolveConfig -> [String]
[ecConstantPool] :: EvolveConfig -> ConstantPool High
[ecAttributeFilter] :: EvolveConfig -> (AttributeLocation, Text) -> Bool
runEvolve :: EvolveConfig -> Evolve a -> Either ClassFileError a
-- | Untie the constant pool, this requires a special operation as the
-- constant pool might reference itself.
bootstrapConstantPool :: ConstantPool Low -> Either ClassFileError (ConstantPool High)
data ConstantPoolBuilder a
runConstantPoolBuilder :: ConstantPoolBuilder a -> CPBuilder -> (a, CPBuilder)
data CPBuilder
CPBuilder :: Map (Constant Low) Index -> Index -> [Constant Low] -> CPBuilder
[cpbMapper] :: CPBuilder -> Map (Constant Low) Index
[cpbNextIndex] :: CPBuilder -> Index
[cpbConstants] :: CPBuilder -> [Constant Low]
builderFromConstantPool :: ConstantPool Low -> CPBuilder
constantPoolFromBuilder :: CPBuilder -> ConstantPool Low
cpbEmpty :: CPBuilder
instance GHC.Base.Applicative Language.JVM.ClassFileReader.ConstantPoolBuilder
instance GHC.Base.Functor Language.JVM.ClassFileReader.ConstantPoolBuilder
instance Control.Monad.State.Class.MonadState Language.JVM.ClassFileReader.CPBuilder Language.JVM.ClassFileReader.ConstantPoolBuilder
instance GHC.Base.Monad Language.JVM.ClassFileReader.ConstantPoolBuilder
instance GHC.Show.Show Language.JVM.ClassFileReader.CPBuilder
instance Control.Monad.Error.Class.MonadError Language.JVM.ClassFileReader.ClassFileError Language.JVM.ClassFileReader.Evolve
instance Control.Monad.Reader.Class.MonadReader Language.JVM.ClassFileReader.EvolveConfig Language.JVM.ClassFileReader.Evolve
instance GHC.Base.Monad Language.JVM.ClassFileReader.Evolve
instance GHC.Base.Applicative Language.JVM.ClassFileReader.Evolve
instance GHC.Base.Functor Language.JVM.ClassFileReader.Evolve
instance GHC.Generics.Generic Language.JVM.ClassFileReader.ClassFileError
instance GHC.Classes.Eq Language.JVM.ClassFileReader.ClassFileError
instance GHC.Show.Show Language.JVM.ClassFileReader.ClassFileError
instance Language.JVM.Staged.LabelM Language.JVM.ClassFileReader.ConstantPoolBuilder
instance Language.JVM.Staged.DevolveM Language.JVM.ClassFileReader.ConstantPoolBuilder
instance Language.JVM.Staged.LabelM Language.JVM.ClassFileReader.Evolve
instance Language.JVM.Staged.EvolveM Language.JVM.ClassFileReader.Evolve
instance Control.DeepSeq.NFData Language.JVM.ClassFileReader.ClassFileError
-- | The main entry point for using the library.
module Language.JVM