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

Safe HaskellNone
LanguageHaskell2010

Language.JVM.ClassFileReader

Contents

Synopsis

Documentation

readClassFile :: ByteString -> Either ClassFileError (ClassFile High) Source #

Top level command that combines decode and evolve.

writeClassFile :: ClassFile High -> ByteString Source #

Top level command that combines devolve and encode.

writeClassFile' :: ConstantPool Low -> ClassFile High -> ByteString Source #

Top level command that combines devolve and encode, but tries to retain exact syntax of a previous run using the class pool.

Finer granularity commands

decodeClassFile :: ByteString -> Either ClassFileError (ClassFile Low) Source #

Decode a class file from a lazy ByteString. Ensures that the lazy bytestring is read to EOF, and thereby closing any open files.

encodeClassFile :: ClassFile Low -> ByteString Source #

Create a lazy byte string from a class file

evolveClassFile :: ClassFile Low -> Either ClassFileError (ClassFile High) Source #

Changed the stage from Index to Deref

devolveClassFile :: ClassFile High -> ClassFile Low Source #

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' :: ConstantPool Low -> ClassFile High -> ClassFile Low Source #

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

Evolve

data Evolve a Source #

Instances

Monad Evolve Source # 

Methods

(>>=) :: Evolve a -> (a -> Evolve b) -> Evolve b #

(>>) :: Evolve a -> Evolve b -> Evolve b #

return :: a -> Evolve a #

fail :: String -> Evolve a #

Functor Evolve Source # 

Methods

fmap :: (a -> b) -> Evolve a -> Evolve b #

(<$) :: a -> Evolve b -> Evolve a #

Applicative Evolve Source # 

Methods

pure :: a -> Evolve a #

(<*>) :: Evolve (a -> b) -> Evolve a -> Evolve b #

liftA2 :: (a -> b -> c) -> Evolve a -> Evolve b -> Evolve c #

(*>) :: Evolve a -> Evolve b -> Evolve b #

(<*) :: Evolve a -> Evolve b -> Evolve a #

EvolveM Evolve Source # 
LabelM Evolve Source # 

Methods

label :: String -> Evolve a -> Evolve a Source #

MonadError ClassFileError Evolve Source # 
MonadReader (String, ConstantPool High) Evolve Source # 

data ClassFileError Source #

An error while reading a class file is represented using this data structure

Instances

Eq ClassFileError Source # 
Show ClassFileError Source # 
Generic ClassFileError Source # 

Associated Types

type Rep ClassFileError :: * -> * #

NFData ClassFileError Source # 

Methods

rnf :: ClassFileError -> () #

MonadError ClassFileError Evolve Source # 
type Rep ClassFileError Source # 

bootstrapConstantPool :: ConstantPool Low -> Either ClassFileError (ConstantPool High) Source #

Untie the constant pool, this requires a special operation as the constant pool might reference itself.

Builder