simple-stacked-vm-0.1.2: Simple stacked virtual machine: assembler, disassembler, bytecode interpreter

Safe HaskellSafe
LanguageHaskell98

Language.SSVM.Types

Synopsis

Documentation

data StackItem Source #

Stack item

Instances
Eq StackItem Source # 
Instance details

Defined in Language.SSVM.Types

Data StackItem Source # 
Instance details

Defined in Language.SSVM.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> StackItem -> c StackItem #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c StackItem #

toConstr :: StackItem -> Constr #

dataTypeOf :: StackItem -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c StackItem) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c StackItem) #

gmapT :: (forall b. Data b => b -> b) -> StackItem -> StackItem #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> StackItem -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> StackItem -> r #

gmapQ :: (forall d. Data d => d -> u) -> StackItem -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> StackItem -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> StackItem -> m StackItem #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> StackItem -> m StackItem #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> StackItem -> m StackItem #

Show StackItem Source # 
Instance details

Defined in Language.SSVM.Types

StackType DArray Source # 
Instance details

Defined in Language.SSVM.Types

showType :: StackItem -> String Source #

Show type of item

data Code Source #

VM code

Constructors

Code 

Fields

Instances
Eq Code Source # 
Instance details

Defined in Language.SSVM.Types

Methods

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

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

Data Code Source # 
Instance details

Defined in Language.SSVM.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Code -> c Code #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Code #

toConstr :: Code -> Constr #

dataTypeOf :: Code -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Code) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Code) #

gmapT :: (forall b. Data b => b -> b) -> Code -> Code #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Code -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Code -> r #

gmapQ :: (forall d. Data d => d -> u) -> Code -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Code -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Code -> m Code #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Code -> m Code #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Code -> m Code #

Show Code Source # 
Instance details

Defined in Language.SSVM.Types

Methods

showsPrec :: Int -> Code -> ShowS #

show :: Code -> String #

showList :: [Code] -> ShowS #

Semigroup Code Source # 
Instance details

Defined in Language.SSVM.Types

Methods

(<>) :: Code -> Code -> Code #

sconcat :: NonEmpty Code -> Code #

stimes :: Integral b => b -> Code -> Code #

Monoid Code Source # 
Instance details

Defined in Language.SSVM.Types

Methods

mempty :: Code #

mappend :: Code -> Code -> Code #

mconcat :: [Code] -> Code #

data Instruction Source #

VM instructions

Constructors

NOP

Do nothing

PUSH StackItem 
DROP 
DUP 
SWAP 
OVER 
PRINT 
PRINTALL 
ADD 
MUL 
DIV 
REM 
SUB 
NEG 
ABS 
CMP 
DEFINE 
COLON 
CALL String

Call named user-defined word

VARIABLE 
ASSIGN 
READ 
INPUT 
MARK 
GETMARK String 
GOTO 
JZ 
JNZ 
JGT 
JLT 
JGE 
JLE 
ARRAY 
READ_ARRAY 
ASSIGN_ARRAY 
Instances
Eq Instruction Source # 
Instance details

Defined in Language.SSVM.Types

Data Instruction Source # 
Instance details

Defined in Language.SSVM.Types

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Instruction -> c Instruction #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Instruction #

toConstr :: Instruction -> Constr #

dataTypeOf :: Instruction -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Instruction) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Instruction) #

gmapT :: (forall b. Data b => b -> b) -> Instruction -> Instruction #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Instruction -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Instruction -> r #

gmapQ :: (forall d. Data d => d -> u) -> Instruction -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Instruction -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Instruction -> m Instruction #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Instruction -> m Instruction #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Instruction -> m Instruction #

Show Instruction Source # 
Instance details

Defined in Language.SSVM.Types

StackType Instruction Source # 
Instance details

Defined in Language.SSVM.Types

data Definition Source #

Word definition

Constructors

Definition Int Stack 
Instances
Eq Definition Source # 
Instance details

Defined in Language.SSVM.Types

Show Definition Source # 
Instance details

Defined in Language.SSVM.Types

data VMState Source #

VM state

Constructors

VMState 

Fields

Instances
Eq VMState Source # 
Instance details

Defined in Language.SSVM.Types

Methods

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

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

Show VMState Source # 
Instance details

Defined in Language.SSVM.Types

emptyVMState :: VMState Source #

Starting VM state

type VM a = StateT VMState IO a Source #

VM monad