hs-java-0.4.1: Java .class files assembler/disassembler

Safe HaskellNone
LanguageHaskell98

JVM.ClassFile

Contents

Description

This module declares (low-level) data types for Java .class files structures, and Binary instances to read/write them.

Synopsis

About

Java .class file uses constants pool, which stores almost all source-code-level constants (strings, integer literals etc), and also all identifiers (class, method, field names etc). All other structures contain indexes of constants in the pool instead of constants theirself.

It's not convient to use that indexes programmatically. So, .class file is represented at two stages: File and Direct. At File stage, all data structures contain only indexes, not constants theirself. When we read a class from a file, we get structure at File stage. We only can write File stage structure to file.

At Direct stage, structures conain constants, not indexes. Convertion functions (File - Direct) are located in the JVM.Converter module.

data Attribute Source #

Any (class field method/ ...) attribute format. Some formats specify special formats for attributeValue.

Instances
Eq Attribute Source # 
Instance details

Defined in JVM.ClassFile

Show Attribute Source # 
Instance details

Defined in JVM.ClassFile

Binary Attribute Source # 
Instance details

Defined in JVM.ClassFile

BinaryState Integer Attribute Source # 
Instance details

Defined in JVM.Assembler

data FieldType Source #

Field signature format

Instances
Eq FieldType Source # 
Instance details

Defined in JVM.ClassFile

Ord FieldType Source # 
Instance details

Defined in JVM.ClassFile

Show FieldType Source # 
Instance details

Defined in JVM.ClassFile

Binary FieldType Source # 
Instance details

Defined in JVM.ClassFile

Signatures

type FieldSignature = FieldType Source #

Class field signature

type ArgumentSignature = FieldType Source #

Method argument signature

Stage types

data File Source #

File stage

Instances
Eq (Method File) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Field File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

(==) :: Field File -> Field File -> Bool #

(/=) :: Field File -> Field File -> Bool #

Eq (Class File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

(==) :: Class File -> Class File -> Bool #

(/=) :: Class File -> Class File -> Bool #

Eq (Constant File) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Attributes File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Method File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Field File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Class File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Constant File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Attributes File) Source # 
Instance details

Defined in JVM.ClassFile

Binary (Method File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: Method File -> Put #

get :: Get (Method File) #

putList :: [Method File] -> Put #

Binary (Field File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: Field File -> Put #

get :: Get (Field File) #

putList :: [Field File] -> Put #

Binary (Class File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: Class File -> Put #

get :: Get (Class File) #

putList :: [Class File] -> Put #

Default (Attributes File) Source # 
Instance details

Defined in JVM.ClassFile

data Attributes File Source #

At File stage, attributes are represented as list of Attribute structures.

Instance details

Defined in JVM.ClassFile

type AccessFlags File Source #

At File stage, access flags are represented as Word16

Instance details

Defined in JVM.ClassFile

type Link File a Source #

At File stage, Link contain index of object in the constants pool.

Instance details

Defined in JVM.ClassFile

type Link File a = Word16

data Direct Source #

Direct representation stage

Instances
Eq (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Class Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Constant Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Attributes Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Class Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Constant Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Attributes Direct) Source # 
Instance details

Defined in JVM.ClassFile

Default (Attributes Direct) Source # 
Instance details

Defined in JVM.ClassFile

HasSignature (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Associated Types

type Signature (Method Direct) :: Type Source #

HasSignature (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Associated Types

type Signature (Field Direct) :: Type Source #

data Attributes Direct Source #

At Direct stage, attributes are represented as a Map.

Instance details

Defined in JVM.ClassFile

type AccessFlags Direct Source #

At Direct stage, access flags are represented as set of flags.

Instance details

Defined in JVM.ClassFile

type Link Direct a Source #

At Direct stage, Link contain object itself.

Instance details

Defined in JVM.ClassFile

type Link Direct a = a
type Signature (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

type Signature (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Staged structures

type Pool stage = Map Word16 (Constant stage) Source #

Constant pool

type family Link stage a Source #

Link to some object

data Method stage Source #

Class method format

Instances
HasAttributes Method Source # 
Instance details

Defined in JVM.ClassFile

Methods

attributes :: Method stage -> Attributes stage Source #

Eq (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Method File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Method File) Source # 
Instance details

Defined in JVM.ClassFile

Binary (Method File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: Method File -> Put #

get :: Get (Method File) #

putList :: [Method File] -> Put #

HasSignature (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Associated Types

type Signature (Method Direct) :: Type Source #

type Signature (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

data Field stage Source #

Class field format

Instances
HasAttributes Field Source # 
Instance details

Defined in JVM.ClassFile

Methods

attributes :: Field stage -> Attributes stage Source #

Eq (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Field File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

(==) :: Field File -> Field File -> Bool #

(/=) :: Field File -> Field File -> Bool #

Show (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Field File) Source # 
Instance details

Defined in JVM.ClassFile

Binary (Field File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: Field File -> Put #

get :: Get (Field File) #

putList :: [Field File] -> Put #

HasSignature (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Associated Types

type Signature (Field Direct) :: Type Source #

type Signature (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

data Class stage Source #

Generic .class file format

Constructors

Class 

Fields

Instances
HasAttributes Class Source # 
Instance details

Defined in JVM.ClassFile

Methods

attributes :: Class stage -> Attributes stage Source #

Eq (Class Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Class File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

(==) :: Class File -> Class File -> Bool #

(/=) :: Class File -> Class File -> Bool #

Show (Class Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Class File) Source # 
Instance details

Defined in JVM.ClassFile

Binary (Class File) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: Class File -> Put #

get :: Get (Class File) #

putList :: [Class File] -> Put #

data Constant stage Source #

Constant pool item

Instances
Eq (Constant Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Constant File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Constant Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Constant File) Source # 
Instance details

Defined in JVM.ClassFile

data AccessFlag Source #

Access flags. Used for classess, methods, variables.

Constructors

ACC_PUBLIC

0x0001 Visible for all

ACC_PRIVATE

0x0002 Visible only for defined class

ACC_PROTECTED

0x0004 Visible only for subclasses

ACC_STATIC

0x0008 Static method or variable

ACC_FINAL

0x0010 No further subclassing or assignments

ACC_SYNCHRONIZED

0x0020 Uses monitors

ACC_VOLATILE

0x0040 Could not be cached

ACC_TRANSIENT

0x0080

ACC_NATIVE

0x0100 Implemented in other language

ACC_INTERFACE

0x0200 Class is interface

ACC_ABSTRACT

0x0400

type family AccessFlags stage Source #

Object (class, method, field …) access flags

Instances
type AccessFlags Direct Source #

At Direct stage, access flags are represented as set of flags.

Instance details

Defined in JVM.ClassFile

type AccessFlags File Source #

At File stage, access flags are represented as Word16

Instance details

Defined in JVM.ClassFile

data family Attributes stage Source #

Object (class, method, field) attributes

Instances
Eq (Attributes Direct) Source # 
Instance details

Defined in JVM.ClassFile

Eq (Attributes File) Source # 
Instance details

Defined in JVM.ClassFile

Show (Attributes Direct) Source # 
Instance details

Defined in JVM.ClassFile

Show (Attributes File) Source # 
Instance details

Defined in JVM.ClassFile

Default (Attributes Direct) Source # 
Instance details

Defined in JVM.ClassFile

Default (Attributes File) Source # 
Instance details

Defined in JVM.ClassFile

data Attributes Direct Source #

At Direct stage, attributes are represented as a Map.

Instance details

Defined in JVM.ClassFile

data Attributes File Source #

At File stage, attributes are represented as list of Attribute structures.

Instance details

Defined in JVM.ClassFile

defaultClass :: (Default (AccessFlags stage), Default (Link stage ByteString), Default (Attributes stage)) => Class stage Source #

Default (empty) class file definition.

Misc

class (Binary (Signature a), Show (Signature a), Eq (Signature a)) => HasSignature a Source #

Fields and methods have signatures.

Associated Types

type Signature a Source #

Instances
HasSignature (Method Direct) Source # 
Instance details

Defined in JVM.ClassFile

Associated Types

type Signature (Method Direct) :: Type Source #

HasSignature (Field Direct) Source # 
Instance details

Defined in JVM.ClassFile

Associated Types

type Signature (Field Direct) :: Type Source #

class HasAttributes a where Source #

Methods

attributes :: a stage -> Attributes stage Source #

Instances
HasAttributes Method Source # 
Instance details

Defined in JVM.ClassFile

Methods

attributes :: Method stage -> Attributes stage Source #

HasAttributes Field Source # 
Instance details

Defined in JVM.ClassFile

Methods

attributes :: Field stage -> Attributes stage Source #

HasAttributes Class Source # 
Instance details

Defined in JVM.ClassFile

Methods

attributes :: Class stage -> Attributes stage Source #

data NameType a Source #

Name and signature pair. Used for methods and fields.

Constructors

NameType 
Instances
HasSignature a => Eq (NameType a) Source # 
Instance details

Defined in JVM.ClassFile

Methods

(==) :: NameType a -> NameType a -> Bool #

(/=) :: NameType a -> NameType a -> Bool #

HasSignature a => Show (NameType a) Source # 
Instance details

Defined in JVM.ClassFile

Methods

showsPrec :: Int -> NameType a -> ShowS #

show :: NameType a -> String #

showList :: [NameType a] -> ShowS #

HasSignature a => Binary (NameType a) Source # 
Instance details

Defined in JVM.ClassFile

Methods

put :: NameType a -> Put #

get :: Get (NameType a) #

putList :: [NameType a] -> Put #

long :: Constant stage -> Bool Source #

className :: Constant Direct -> ByteString Source #

Name of the CClass. Error on any other constant.

apsize :: Attributes File -> Int Source #

Size of attributes set at File stage

arsize :: Attributes Direct -> Int Source #

Size of attributes set at Direct stage

arlist :: Attributes Direct -> [(ByteString, ByteString)] Source #

Associative list of attributes at Direct stage