jvm-binary-0.1.0: A library for reading Java class-files

Copyright(c) Christian Gram Kalhauge 2018
LicenseMIT
Maintainerkalhuage@cs.ucla.edu
Safe HaskellNone
LanguageHaskell2010

Language.JVM.ByteCode

Contents

Description

 

Synopsis

Documentation

newtype ByteCode i Source #

ByteCode is a newtype wrapper around a list of ByteCode instructions. if the ByteCode is in the Low stage then the byte code instructions are annotated with the byte code offsets.

Instances

Eq (ByteCode High) Source # 
Eq (ByteCode Low) Source # 
Ord (ByteCode Low) Source # 
Show (ByteCode High) Source # 
Show (ByteCode Low) Source # 
Generic (ByteCode High) Source # 

Associated Types

type Rep (ByteCode High) :: * -> * #

Generic (ByteCode Low) Source # 

Associated Types

type Rep (ByteCode Low) :: * -> * #

Methods

from :: ByteCode Low -> Rep (ByteCode Low) x #

to :: Rep (ByteCode Low) x -> ByteCode Low #

Binary (ByteCode Low) Source # 
NFData (ByteCode High) Source # 

Methods

rnf :: ByteCode High -> () #

NFData (ByteCode Low) Source # 

Methods

rnf :: ByteCode Low -> () #

type Rep (ByteCode High) Source # 
type Rep (ByteCode High) = D1 * (MetaData "ByteCode" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" True) (C1 * (MetaCons "ByteCode" PrefixI True) (S1 * (MetaSel (Just Symbol "unByteCode") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Choice (Word32, Vector (ByteCodeInst Low)) (Vector (ByteCodeOpr High)) High))))
type Rep (ByteCode Low) Source # 
type Rep (ByteCode Low) = D1 * (MetaData "ByteCode" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" True) (C1 * (MetaCons "ByteCode" PrefixI True) (S1 * (MetaSel (Just Symbol "unByteCode") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Choice (Word32, Vector (ByteCodeInst Low)) (Vector (ByteCodeOpr High)) Low))))

evolve and devolve

evolveOffset :: EvolveM m => OffsetMap -> ByteCodeOffset -> m ByteCodeIndex Source #

Given an OffsetMap turn a offset into a bytecode index

devolveOffset :: DevolveM m => ByteCode Low -> ByteCodeIndex -> m ByteCodeOffset Source #

Given an OffsetMap turn a offset into a bytecode index

Managing offsets

data ByteCodeInst r Source #

The byte code instruction is mostly used to succinctly read and write an bytecode instruction from a bytestring.

Constructors

ByteCodeInst 

Instances

ByteCodeStaged ByteCodeInst Source # 
Eq (ByteCodeInst High) Source # 
Eq (ByteCodeInst Low) Source # 
Ord (ByteCodeInst Low) Source # 
Show (ByteCodeInst High) Source # 
Show (ByteCodeInst Low) Source # 
Generic (ByteCodeInst High) Source # 

Associated Types

type Rep (ByteCodeInst High) :: * -> * #

Generic (ByteCodeInst Low) Source # 

Associated Types

type Rep (ByteCodeInst Low) :: * -> * #

Binary (ByteCodeInst Low) Source # 
NFData (ByteCodeInst High) Source # 

Methods

rnf :: ByteCodeInst High -> () #

NFData (ByteCodeInst Low) Source # 

Methods

rnf :: ByteCodeInst Low -> () #

type Rep (ByteCodeInst High) Source # 
type Rep (ByteCodeInst High) = D1 * (MetaData "ByteCodeInst" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) (C1 * (MetaCons "ByteCodeInst" PrefixI True) ((:*:) * (S1 * (MetaSel (Just Symbol "offset") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * ByteCodeOffset)) (S1 * (MetaSel (Just Symbol "opcode") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * (ByteCodeOpr High)))))
type Rep (ByteCodeInst Low) Source # 
type Rep (ByteCodeInst Low) = D1 * (MetaData "ByteCodeInst" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) (C1 * (MetaCons "ByteCodeInst" PrefixI True) ((:*:) * (S1 * (MetaSel (Just Symbol "offset") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * ByteCodeOffset)) (S1 * (MetaSel (Just Symbol "opcode") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 * (ByteCodeOpr Low)))))

type ByteCodeRef i = Choice ByteCodeOffset ByteCodeIndex i Source #

A ByteCode reference is either byte code offset in the low stage, and a byte code index in the high state

type ByteCodeOffset = Word16 Source #

The offset in the byte code

type ByteCodeIndex = Int Source #

The index of the byte code.

type OffsetMap = IntMap ByteCodeIndex Source #

The offset map, maps offset to instruction ids.

indexOffset :: ByteCode Low -> ByteCodeIndex -> Maybe ByteCodeOffset Source #

Return the bytecode offset from the bytecode.

offsetIndex :: OffsetMap -> ByteCodeOffset -> Maybe ByteCodeIndex Source #

Given an OffsetMap turn a offset into a bytecode index

offsetMap :: ByteCode Low -> OffsetMap Source #

Given low byte code we can create an OffsetMap

ByteCode Operations

data ByteCodeOpr r Source #

Constructors

ArrayLoad ArrayType

aaload baload ...

ArrayStore ArrayType

aastore bastore ...

Push (BConstant r) 
Load LocalType LocalAddress

aload_0, bload_2, iload 5 ...

Store LocalType LocalAddress

aload, bload ...

BinaryOpr BinOpr ArithmeticType

iadd ...

Neg ArithmeticType

ineg ...

BitOpr BitOpr WordSize

Exclusively on int and long, identified by the word-size

IncrLocal !LocalAddress !IncrementAmount

Only works on ints, increment local 2

Cast CastOpr

Only valid on different types

CompareLongs 
CompareFloating Bool WordSize

Compare two floating values, 2 is if float or double should be used.

If CmpOpr OneOrTwo (ShortRelativeRef r)

compare with 0 if #2 is False, and two ints from the stack if True. the last value is the offset

IfRef Bool OneOrTwo (ShortRelativeRef r)

check if two objects are equal, or not equal. If #2 is True, compare with null.

Goto (LongRelativeRef r) 
Jsr (LongRelativeRef r) 
Ret LocalAddress 
TableSwitch Int32 (SwitchTable r)

a table switch has 2 values a `default` and a SwitchTable

LookupSwitch Int32 (Vector (Int32, Int32))

a lookup switch has a `default` value and a list of pairs.

Get FieldAccess (DeepRef (InClass FieldId) r) 
Put FieldAccess (DeepRef (InClass FieldId) r) 
Invoke (Invocation r) 
New (Ref ClassName r) 
NewArray (ExactArrayType r) 
ArrayLength 
Throw 
CheckCast (Ref ClassName r) 
InstanceOf (Ref ClassName r) 
Monitor Bool

True => Enter, False => Exit

MultiNewArray (Ref ClassName r) Word8

Create a new multi array of 2 dimensions ^ This might point to an array type.

Return (Maybe LocalType) 
Nop 
Pop WordSize 
Dup WordSize 
DupX1 WordSize 
DupX2 WordSize 
Swap 

Instances

Eq (ByteCodeOpr High) Source # 
Eq (ByteCodeOpr Low) Source # 
Ord (ByteCodeOpr Low) Source # 
Show (ByteCodeOpr High) Source # 
Show (ByteCodeOpr Low) Source # 
Generic (ByteCodeOpr High) Source # 

Associated Types

type Rep (ByteCodeOpr High) :: * -> * #

Generic (ByteCodeOpr Low) Source # 

Associated Types

type Rep (ByteCodeOpr Low) :: * -> * #

Binary (ByteCodeOpr Low) Source # 
NFData (ByteCodeOpr High) Source # 

Methods

rnf :: ByteCodeOpr High -> () #

NFData (ByteCodeOpr Low) Source # 

Methods

rnf :: ByteCodeOpr Low -> () #

type Rep (ByteCodeOpr High) Source # 
type Rep (ByteCodeOpr Low) Source # 

data CConstant r Source #

Instances

Staged CConstant Source # 

Methods

stage :: LabelM m => (forall (s' :: * -> *). Staged s' => s' r -> m (s' r')) -> CConstant r -> m (CConstant r') Source #

evolve :: EvolveM m => CConstant Low -> m (CConstant High) Source #

devolve :: DevolveM m => CConstant High -> m (CConstant Low) Source #

Eq (CConstant High) Source # 
Eq (CConstant Low) Source # 
Ord (CConstant Low) Source # 
Show (CConstant High) Source # 
Show (CConstant Low) Source # 
Generic (CConstant High) Source # 

Associated Types

type Rep (CConstant High) :: * -> * #

Generic (CConstant Low) Source # 

Associated Types

type Rep (CConstant Low) :: * -> * #

NFData (CConstant High) Source # 

Methods

rnf :: CConstant High -> () #

NFData (CConstant Low) Source # 

Methods

rnf :: CConstant Low -> () #

type Rep (CConstant High) Source # 
type Rep (CConstant High) = D1 * (MetaData "CConstant" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "CNull" PrefixI False) (U1 *)) (C1 * (MetaCons "CIntM1" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CInt0" PrefixI False) (U1 *)) (C1 * (MetaCons "CInt1" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "CInt2" PrefixI False) (U1 *)) (C1 * (MetaCons "CInt3" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CInt4" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "CInt5" PrefixI False) (U1 *)) (C1 * (MetaCons "CLong0" PrefixI False) (U1 *)))))) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "CLong1" PrefixI False) (U1 *)) (C1 * (MetaCons "CFloat0" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CFloat1" PrefixI False) (U1 *)) (C1 * (MetaCons "CFloat2" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "CDouble0" PrefixI False) (U1 *)) (C1 * (MetaCons "CDouble1" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CByte" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Int8))) ((:+:) * (C1 * (MetaCons "CShort" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Int16))) (C1 * (MetaCons "CRef" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Maybe WordSize))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Ref JValue High))))))))))
type Rep (CConstant Low) Source # 
type Rep (CConstant Low) = D1 * (MetaData "CConstant" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "CNull" PrefixI False) (U1 *)) (C1 * (MetaCons "CIntM1" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CInt0" PrefixI False) (U1 *)) (C1 * (MetaCons "CInt1" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "CInt2" PrefixI False) (U1 *)) (C1 * (MetaCons "CInt3" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CInt4" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "CInt5" PrefixI False) (U1 *)) (C1 * (MetaCons "CLong0" PrefixI False) (U1 *)))))) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "CLong1" PrefixI False) (U1 *)) (C1 * (MetaCons "CFloat0" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CFloat1" PrefixI False) (U1 *)) (C1 * (MetaCons "CFloat2" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "CDouble0" PrefixI False) (U1 *)) (C1 * (MetaCons "CDouble1" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "CByte" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Int8))) ((:+:) * (C1 * (MetaCons "CShort" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * Int16))) (C1 * (MetaCons "CRef" PrefixI False) ((:*:) * (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Maybe WordSize))) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Ref JValue Low))))))))))

data SwitchTable r Source #

Constructors

SwitchTable 

Fields

Instances

Eq (SwitchTable High) Source # 
Eq (SwitchTable Low) Source # 
Ord (SwitchTable Low) Source # 
Show (SwitchTable High) Source # 
Show (SwitchTable Low) Source # 
Generic (SwitchTable High) Source # 

Associated Types

type Rep (SwitchTable High) :: * -> * #

Generic (SwitchTable Low) Source # 

Associated Types

type Rep (SwitchTable Low) :: * -> * #

NFData (SwitchTable High) Source # 

Methods

rnf :: SwitchTable High -> () #

NFData (SwitchTable Low) Source # 

Methods

rnf :: SwitchTable Low -> () #

type Rep (SwitchTable High) Source # 
type Rep (SwitchTable Low) Source # 

data Invocation r Source #

Instances

Staged Invocation Source # 

Methods

stage :: LabelM m => (forall (s' :: * -> *). Staged s' => s' r -> m (s' r')) -> Invocation r -> m (Invocation r') Source #

evolve :: EvolveM m => Invocation Low -> m (Invocation High) Source #

devolve :: DevolveM m => Invocation High -> m (Invocation Low) Source #

Eq (Invocation High) Source # 
Eq (Invocation Low) Source # 
Ord (Invocation Low) Source # 
Show (Invocation High) Source # 
Show (Invocation Low) Source # 
Generic (Invocation High) Source # 

Associated Types

type Rep (Invocation High) :: * -> * #

Generic (Invocation Low) Source # 

Associated Types

type Rep (Invocation Low) :: * -> * #

NFData (Invocation High) Source # 

Methods

rnf :: Invocation High -> () #

NFData (Invocation Low) Source # 

Methods

rnf :: Invocation Low -> () #

type Rep (Invocation High) Source # 
type Rep (Invocation Low) Source # 

Operations

data BinOpr Source #

Constructors

Add 
Sub 
Mul 
Div 
Rem 

Instances

Eq BinOpr Source # 

Methods

(==) :: BinOpr -> BinOpr -> Bool #

(/=) :: BinOpr -> BinOpr -> Bool #

Ord BinOpr Source # 
Show BinOpr Source # 
Generic BinOpr Source # 

Associated Types

type Rep BinOpr :: * -> * #

Methods

from :: BinOpr -> Rep BinOpr x #

to :: Rep BinOpr x -> BinOpr #

NFData BinOpr Source # 

Methods

rnf :: BinOpr -> () #

type Rep BinOpr Source # 
type Rep BinOpr = D1 * (MetaData "BinOpr" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * (C1 * (MetaCons "Add" PrefixI False) (U1 *)) (C1 * (MetaCons "Sub" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "Mul" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "Div" PrefixI False) (U1 *)) (C1 * (MetaCons "Rem" PrefixI False) (U1 *)))))

data BitOpr Source #

Constructors

ShL 
ShR 
UShR 
And 
Or 
XOr 

Instances

Eq BitOpr Source # 

Methods

(==) :: BitOpr -> BitOpr -> Bool #

(/=) :: BitOpr -> BitOpr -> Bool #

Ord BitOpr Source # 
Show BitOpr Source # 
Generic BitOpr Source # 

Associated Types

type Rep BitOpr :: * -> * #

Methods

from :: BitOpr -> Rep BitOpr x #

to :: Rep BitOpr x -> BitOpr #

NFData BitOpr Source # 

Methods

rnf :: BitOpr -> () #

type Rep BitOpr Source # 
type Rep BitOpr = D1 * (MetaData "BitOpr" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * (C1 * (MetaCons "ShL" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "ShR" PrefixI False) (U1 *)) (C1 * (MetaCons "UShR" PrefixI False) (U1 *)))) ((:+:) * (C1 * (MetaCons "And" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "Or" PrefixI False) (U1 *)) (C1 * (MetaCons "XOr" PrefixI False) (U1 *)))))

data CmpOpr Source #

Constructors

CEq 
CNe 
CLt 
CGe 
CGt 
CLe 

Instances

Eq CmpOpr Source # 

Methods

(==) :: CmpOpr -> CmpOpr -> Bool #

(/=) :: CmpOpr -> CmpOpr -> Bool #

Ord CmpOpr Source # 
Show CmpOpr Source # 
Generic CmpOpr Source # 

Associated Types

type Rep CmpOpr :: * -> * #

Methods

from :: CmpOpr -> Rep CmpOpr x #

to :: Rep CmpOpr x -> CmpOpr #

NFData CmpOpr Source # 

Methods

rnf :: CmpOpr -> () #

type Rep CmpOpr Source # 
type Rep CmpOpr = D1 * (MetaData "CmpOpr" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * (C1 * (MetaCons "CEq" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "CNe" PrefixI False) (U1 *)) (C1 * (MetaCons "CLt" PrefixI False) (U1 *)))) ((:+:) * (C1 * (MetaCons "CGe" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "CGt" PrefixI False) (U1 *)) (C1 * (MetaCons "CLe" PrefixI False) (U1 *)))))

data CastOpr Source #

Constructors

CastDown SmallArithmeticType

Cast from Int to a smaller type

CastTo ArithmeticType ArithmeticType

Cast from any to any arithmetic type. Cannot be the same type.

Type sets

data ArithmeticType Source #

Constructors

MInt 
MLong 
MFloat 
MDouble 

Instances

Bounded ArithmeticType Source # 
Enum ArithmeticType Source # 
Eq ArithmeticType Source # 
Ord ArithmeticType Source # 
Show ArithmeticType Source # 
Generic ArithmeticType Source # 

Associated Types

type Rep ArithmeticType :: * -> * #

NFData ArithmeticType Source # 

Methods

rnf :: ArithmeticType -> () #

type Rep ArithmeticType Source # 
type Rep ArithmeticType = D1 * (MetaData "ArithmeticType" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * (C1 * (MetaCons "MInt" PrefixI False) (U1 *)) (C1 * (MetaCons "MLong" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "MFloat" PrefixI False) (U1 *)) (C1 * (MetaCons "MDouble" PrefixI False) (U1 *))))

data SmallArithmeticType Source #

Constructors

MByte 
MChar 
MShort 

Instances

Bounded SmallArithmeticType Source # 
Enum SmallArithmeticType Source # 
Eq SmallArithmeticType Source # 
Ord SmallArithmeticType Source # 
Show SmallArithmeticType Source # 
Generic SmallArithmeticType Source # 
NFData SmallArithmeticType Source # 

Methods

rnf :: SmallArithmeticType -> () #

type Rep SmallArithmeticType Source # 
type Rep SmallArithmeticType = D1 * (MetaData "SmallArithmeticType" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * (C1 * (MetaCons "MByte" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "MChar" PrefixI False) (U1 *)) (C1 * (MetaCons "MShort" PrefixI False) (U1 *))))

data LocalType Source #

Constructors

LInt 
LLong 
LFloat 
LDouble 
LRef 

Instances

Bounded LocalType Source # 
Enum LocalType Source # 
Eq LocalType Source # 
Ord LocalType Source # 
Show LocalType Source # 
Generic LocalType Source # 

Associated Types

type Rep LocalType :: * -> * #

NFData LocalType Source # 

Methods

rnf :: LocalType -> () #

type Rep LocalType Source # 
type Rep LocalType = D1 * (MetaData "LocalType" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * (C1 * (MetaCons "LInt" PrefixI False) (U1 *)) (C1 * (MetaCons "LLong" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "LFloat" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "LDouble" PrefixI False) (U1 *)) (C1 * (MetaCons "LRef" PrefixI False) (U1 *)))))

data ArrayType Source #

Constructors

AByte 
AChar 
AShort 
AInt 
ALong 
AFloat 
ADouble 
ARef 

Instances

Eq ArrayType Source # 
Ord ArrayType Source # 
Show ArrayType Source # 
Generic ArrayType Source # 

Associated Types

type Rep ArrayType :: * -> * #

NFData ArrayType Source # 

Methods

rnf :: ArrayType -> () #

type Rep ArrayType Source # 
type Rep ArrayType = D1 * (MetaData "ArrayType" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "AByte" PrefixI False) (U1 *)) (C1 * (MetaCons "AChar" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "AShort" PrefixI False) (U1 *)) (C1 * (MetaCons "AInt" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "ALong" PrefixI False) (U1 *)) (C1 * (MetaCons "AFloat" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "ADouble" PrefixI False) (U1 *)) (C1 * (MetaCons "ARef" PrefixI False) (U1 *)))))

data ExactArrayType r Source #

Instances

Staged ExactArrayType Source # 

Methods

stage :: LabelM m => (forall (s' :: * -> *). Staged s' => s' r -> m (s' r')) -> ExactArrayType r -> m (ExactArrayType r') Source #

evolve :: EvolveM m => ExactArrayType Low -> m (ExactArrayType High) Source #

devolve :: DevolveM m => ExactArrayType High -> m (ExactArrayType Low) Source #

Eq (ExactArrayType High) Source # 
Eq (ExactArrayType Low) Source # 
Ord (ExactArrayType Low) Source # 
Show (ExactArrayType High) Source # 
Show (ExactArrayType Low) Source # 
Generic (ExactArrayType High) Source # 

Associated Types

type Rep (ExactArrayType High) :: * -> * #

Generic (ExactArrayType Low) Source # 

Associated Types

type Rep (ExactArrayType Low) :: * -> * #

NFData (ExactArrayType High) Source # 

Methods

rnf :: ExactArrayType High -> () #

NFData (ExactArrayType Low) Source # 

Methods

rnf :: ExactArrayType Low -> () #

type Rep (ExactArrayType High) Source # 
type Rep (ExactArrayType High) = D1 * (MetaData "ExactArrayType" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "EABoolean" PrefixI False) (U1 *)) (C1 * (MetaCons "EAByte" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "EAChar" PrefixI False) (U1 *)) (C1 * (MetaCons "EAShort" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "EAInt" PrefixI False) (U1 *)) (C1 * (MetaCons "EALong" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "EAFloat" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "EADouble" PrefixI False) (U1 *)) (C1 * (MetaCons "EARef" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Ref ClassName High))))))))
type Rep (ExactArrayType Low) Source # 
type Rep (ExactArrayType Low) = D1 * (MetaData "ExactArrayType" "Language.JVM.ByteCode" "jvm-binary-0.1.0-JJ8Rr7ERir79pQaBJvdiXV" False) ((:+:) * ((:+:) * ((:+:) * (C1 * (MetaCons "EABoolean" PrefixI False) (U1 *)) (C1 * (MetaCons "EAByte" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "EAChar" PrefixI False) (U1 *)) (C1 * (MetaCons "EAShort" PrefixI False) (U1 *)))) ((:+:) * ((:+:) * (C1 * (MetaCons "EAInt" PrefixI False) (U1 *)) (C1 * (MetaCons "EALong" PrefixI False) (U1 *))) ((:+:) * (C1 * (MetaCons "EAFloat" PrefixI False) (U1 *)) ((:+:) * (C1 * (MetaCons "EADouble" PrefixI False) (U1 *)) (C1 * (MetaCons "EARef" PrefixI False) (S1 * (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 * (Ref ClassName Low))))))))

Renames

type ByteOffset = Int64 #

An offset, counted in bytes.