Copyright | (c) Christian Gram Kalhauge 2017 |
---|---|
License | MIT |
Maintainer | kalhuage@cs.ucla.edu |
Safe Haskell | None |
Language | Haskell2010 |
This module contains the Constant
type and the ConstantPool
. These
are essential for accessing data in the class-file.
- data Constant r
- = CString !SizedByteString16
- | CInteger !Int32
- | CFloat !Float
- | CLong !Int64
- | CDouble !Double
- | CClassRef !(Ref Text r)
- | CStringRef !(Ref ByteString r)
- | CFieldRef !(InClass FieldId r)
- | CMethodRef !(InClass MethodId r)
- | CInterfaceMethodRef !(InClass MethodId r)
- | CNameAndType !(Ref Text r) !(Ref Text r)
- | CMethodHandle !(MethodHandle r)
- | CMethodType !(Ref MethodDescriptor r)
- | CInvokeDynamic !(InvokeDynamic r)
- constantSize :: Constant r -> Int
- typeToStr :: Constant r -> String
- class Referenceable a where
- data JValue
- newtype ClassName = ClassName {}
- data InClass a r = InClass {
- inClassName :: !(Ref ClassName r)
- inClassId :: !(Ref a r)
- type AbsMethodId = InClass MethodId
- type AbsFieldId = InClass FieldId
- newtype AbsInterfaceMethodId r = AbsInterfaceMethodId {}
- data AbsVariableMethodId r
- = VInterfaceMethodId !(AbsInterfaceMethodId r)
- | VMethodId !(AbsMethodId r)
- newtype MethodId = MethodId (NameAndType MethodDescriptor)
- newtype FieldId = FieldId (NameAndType FieldDescriptor)
- data NameAndType a = NameAndType {
- ntName :: Text
- ntDescriptor :: a
- data MethodDescriptor
- data FieldDescriptor
- data MethodHandle r
- = MHField !(MethodHandleField r)
- | MHMethod !(MethodHandleMethod r)
- | MHInterface !(MethodHandleInterface r)
- data MethodHandleField r = MethodHandleField {}
- data MethodHandleMethod r
- data MethodHandleInterface r = MethodHandleInterface {}
- data MethodHandleFieldKind
- data InvokeDynamic r = InvokeDynamic {
- invokeDynamicAttrIndex :: !Word16
- invokeDynamicMethod :: !(Ref MethodId r)
- data High
- data Low
Documentation
A constant is a multi word item in the ConstantPool
. Each of
the constructors are pretty much self-explanatory from the types.
CString !SizedByteString16 | |
CInteger !Int32 | |
CFloat !Float | |
CLong !Int64 | |
CDouble !Double | |
CClassRef !(Ref Text r) | |
CStringRef !(Ref ByteString r) | |
CFieldRef !(InClass FieldId r) | |
CMethodRef !(InClass MethodId r) | |
CInterfaceMethodRef !(InClass MethodId r) | |
CNameAndType !(Ref Text r) !(Ref Text r) | |
CMethodHandle !(MethodHandle r) | |
CMethodType !(Ref MethodDescriptor r) | |
CInvokeDynamic !(InvokeDynamic r) |
Staged Constant Source # | |
Eq (Constant High) Source # | |
Eq (Constant Low) Source # | |
Ord (Constant Low) Source # | |
Show (Constant High) Source # | |
Show (Constant Low) Source # | |
Generic (Constant High) Source # | |
Generic (Constant Low) Source # | |
Binary (Constant Low) Source # | |
NFData (Constant High) Source # | |
NFData (Constant Low) Source # | |
Referenceable (Constant High) Source # | |
type Rep (Constant High) Source # | |
type Rep (Constant Low) Source # | |
constantSize :: Constant r -> Int Source #
Some of the Constant
s 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.
class Referenceable a where Source #
Referenceable
is something that can exist in the constant pool.
A constant pool value in java
Special constants
A class name
Anything pointing inside a class
type AbsMethodId = InClass MethodId Source #
A method id in a class.
type AbsFieldId = InClass FieldId Source #
A field id in a class
newtype AbsInterfaceMethodId r Source #
An interface method, which is a class in a method.
data AbsVariableMethodId r Source #
In some cases we can both point to interface methods and regular methods.
Eq MethodId Source # | |
Ord MethodId Source # | |
Show MethodId Source # | |
IsString MethodId Source # | |
Generic MethodId Source # | |
NFData MethodId Source # | |
Referenceable MethodId Source # | |
Eq (InClass MethodId High) Source # | |
Eq (InClass MethodId Low) Source # | |
Ord (InClass MethodId Low) Source # | |
Show (InClass MethodId High) Source # | |
Show (InClass MethodId Low) Source # | |
Generic (InClass MethodId High) Source # | |
Generic (InClass MethodId Low) Source # | |
Binary (InClass MethodId Low) Source # | |
NFData (InClass MethodId High) Source # | |
NFData (InClass MethodId Low) Source # | |
Referenceable (InClass MethodId High) Source # | |
type Rep MethodId Source # | |
type Rep (InClass MethodId High) Source # | |
type Rep (InClass MethodId Low) Source # | |
Eq FieldId Source # | |
Ord FieldId Source # | |
Show FieldId Source # | |
IsString FieldId Source # | |
Generic FieldId Source # | |
NFData FieldId Source # | |
Referenceable FieldId Source # | |
Eq (InClass FieldId High) Source # | |
Eq (InClass FieldId Low) Source # | |
Ord (InClass FieldId Low) Source # | |
Show (InClass FieldId High) Source # | |
Show (InClass FieldId Low) Source # | |
Generic (InClass FieldId High) Source # | |
Generic (InClass FieldId Low) Source # | |
Binary (InClass FieldId Low) Source # | |
NFData (InClass FieldId High) Source # | |
NFData (InClass FieldId Low) Source # | |
Referenceable (InClass FieldId High) Source # | |
type Rep FieldId Source # | |
type Rep (InClass FieldId High) Source # | |
type Rep (InClass FieldId Low) Source # | |
data NameAndType a Source #
A name and a type
NameAndType | |
|
Eq a => Eq (NameAndType a) Source # | |
Ord a => Ord (NameAndType a) Source # | |
Show a => Show (NameAndType a) Source # | |
TypeParse t => IsString (NameAndType t) Source # | |
Generic (NameAndType a) Source # | |
NFData a => NFData (NameAndType a) Source # | |
TypeParse t => TypeParse (NameAndType t) Source # | |
TypeParse a => Referenceable (NameAndType a) Source # | |
type Rep (NameAndType a) Source # | |
data MethodDescriptor Source #
Method Descriptor
data FieldDescriptor Source #
Field Descriptor
data MethodHandle r Source #
The union type over the different method handles.
MHField !(MethodHandleField r) | |
MHMethod !(MethodHandleMethod r) | |
MHInterface !(MethodHandleInterface r) |
Staged MethodHandle Source # | |
Eq (MethodHandle High) Source # | |
Eq (MethodHandle Low) Source # | |
Ord (MethodHandle Low) Source # | |
Show (MethodHandle High) Source # | |
Show (MethodHandle Low) Source # | |
Generic (MethodHandle High) Source # | |
Generic (MethodHandle Low) Source # | |
Binary (MethodHandle Low) Source # | |
NFData (MethodHandle High) Source # | |
NFData (MethodHandle Low) Source # | |
Referenceable (MethodHandle High) Source # | |
type Rep (MethodHandle High) Source # | |
type Rep (MethodHandle Low) Source # | |
data MethodHandleField r Source #
data MethodHandleMethod r Source #
MHInvokeVirtual !(DeepRef AbsMethodId r) | |
MHInvokeStatic !(DeepRef AbsVariableMethodId r) | Since version 52.0 |
MHInvokeSpecial !(DeepRef AbsVariableMethodId r) | Since version 52.0 |
MHNewInvokeSpecial !(DeepRef AbsMethodId r) |
data MethodHandleInterface r Source #
data MethodHandleFieldKind Source #
data InvokeDynamic r Source #
Staged InvokeDynamic Source # | |
Eq (InvokeDynamic High) Source # | |
Eq (InvokeDynamic Low) Source # | |
Ord (InvokeDynamic Low) Source # | |
Show (InvokeDynamic High) Source # | |
Show (InvokeDynamic Low) Source # | |
Generic (InvokeDynamic High) Source # | |
Generic (InvokeDynamic Low) Source # | |
Binary (InvokeDynamic Low) Source # | |
NFData (InvokeDynamic High) Source # | |
NFData (InvokeDynamic Low) Source # | |
Referenceable (InvokeDynamic High) Source # | |
type Rep (InvokeDynamic High) Source # | |
type Rep (InvokeDynamic Low) Source # | |
re-exports
Any data structure in the High
stage, is easier to read.
Any data structure that is in the low stage should be serializable using the binary library.