| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
JVM.Builder.Monad
Contents
Description
This module defines Generate[IO] monad, which helps generating JVM code and creating Java class constants pool.
Code generation could be done using one of two monads: Generate and GenerateIO. Generate monad is pure (simply State monad), while GenerateIO is IO-related. In GenerateIO additional actions are available, such as setting up ClassPath and loading classes (from .class files or JAR archives).
Synopsis
- data GState = GState {
- generated :: [Instruction]
- currentPool :: Pool Direct
- nextPoolIndex :: Word16
- doneMethods :: [Method Direct]
- currentMethod :: Maybe (Method Direct)
- stackSize :: Word16
- locals :: Word16
- classPath :: [Tree CPEntry]
- emptyGState :: GState
- class Monad m => GeneratorMonad m where
- class (Monad (g e), GeneratorMonad (g e)) => Generator e g where
- newtype Generate e a = Generate {
- runGenerate :: EMT e (State GState) a
- newtype GenerateIO e a = GenerateIO {
- runGenerateIO :: EMT e (StateT GState IO) a
- addToPool :: Generator e g => Constant Direct -> g e Word16
- i0 :: Generator e g => Instruction -> g e ()
- i1 :: Generator e g => (Word16 -> Instruction) -> Constant Direct -> g e ()
- i8 :: Generator e g => (Word8 -> Instruction) -> Constant Direct -> g e ()
- newMethod :: (Generator e g, Throws UnexpectedEndMethod e) => [AccessFlag] -> ByteString -> [ArgumentSignature] -> ReturnSignature -> g e () -> g e (NameType (Method Direct))
- setStackSize :: Generator e g => Word16 -> g e ()
- setMaxLocals :: Generator e g => Word16 -> g e ()
- withClassPath :: ClassPath () -> GenerateIO e ()
- getClassField :: (Throws ENotFound e, Throws ENotLoaded e) => String -> ByteString -> GenerateIO e (NameType (Field Direct))
- getClassMethod :: (Throws ENotFound e, Throws ENotLoaded e) => String -> ByteString -> GenerateIO e (NameType (Method Direct))
- generate :: [Tree CPEntry] -> ByteString -> Generate (Caught SomeException NoExceptions) () -> Class Direct
- generateIO :: [Tree CPEntry] -> ByteString -> GenerateIO (Caught SomeException NoExceptions) () -> IO (Class Direct)
- generateCodeLength :: Generate (Caught SomeException NoExceptions) a -> Word32
Documentation
Generator state
Constructors
| GState | |
Fields
| |
Instances
| Eq GState Source # | |
| Show GState Source # | |
| MonadState GState (GenerateIO e) Source # | |
Defined in JVM.Builder.Monad Methods get :: GenerateIO e GState # put :: GState -> GenerateIO e () # state :: (GState -> (a, GState)) -> GenerateIO e a # | |
| MonadState GState (Generate e) Source # | |
| MonadIO (EMT e (StateT GState IO)) Source # | |
emptyGState :: GState Source #
Empty generator state
class Monad m => GeneratorMonad m where Source #
Instances
| (Monad m, MonadState GState m) => GeneratorMonad m Source # | |
class (Monad (g e), GeneratorMonad (g e)) => Generator e g where Source #
Instances
| MonadState GState (EMT e (State GState)) => Generator e Generate Source # | |
| Generator e GenerateIO Source # | |
Defined in JVM.Builder.Monad | |
Generate monad
Constructors
| Generate | |
Fields
| |
newtype GenerateIO e a Source #
IO version of Generate monad
Constructors
| GenerateIO | |
Fields
| |
Instances
i0 :: Generator e g => Instruction -> g e () Source #
Generate one (zero-arguments) instruction
i1 :: Generator e g => (Word16 -> Instruction) -> Constant Direct -> g e () Source #
Generate one one-argument instruction
i8 :: Generator e g => (Word8 -> Instruction) -> Constant Direct -> g e () Source #
Generate one one-argument instruction
Arguments
| :: (Generator e g, Throws UnexpectedEndMethod e) | |
| => [AccessFlag] | Access flags for method (public, static etc) |
| -> ByteString | Method name |
| -> [ArgumentSignature] | Signatures of method arguments |
| -> ReturnSignature | Method return signature |
| -> g e () | Generator for method code |
| -> g e (NameType (Method Direct)) |
Generate new method
setStackSize :: Generator e g => Word16 -> g e () Source #
Set maximum stack size for current method
setMaxLocals :: Generator e g => Word16 -> g e () Source #
Set maximum number of local variables for current method
withClassPath :: ClassPath () -> GenerateIO e () Source #
Update ClassPath
getClassField :: (Throws ENotFound e, Throws ENotLoaded e) => String -> ByteString -> GenerateIO e (NameType (Field Direct)) Source #
Get class field signature from current ClassPath
getClassMethod :: (Throws ENotFound e, Throws ENotLoaded e) => String -> ByteString -> GenerateIO e (NameType (Method Direct)) Source #
Get class method signature from current ClassPath
generate :: [Tree CPEntry] -> ByteString -> Generate (Caught SomeException NoExceptions) () -> Class Direct Source #
Generate a class
generateIO :: [Tree CPEntry] -> ByteString -> GenerateIO (Caught SomeException NoExceptions) () -> IO (Class Direct) Source #
Generate a class