packages feed

alpha-0.9.0.2: src/Context/Types.hs

module Context.Types where

import Foreign.ForeignPtr
import Data.Word
import Data.Bimap
import Data.Map
import Data.Set
import My.Control.Monad.State
import ID
import PCode
import Syntax

data Axiom = XAlter | XBind 
           | XReturn | XRestart | XChoose | XDo
           | XLang | XVerb | XNoun
           | XID | XAddr | XSize  
           deriving Show

data Value = Axiom Axiom
           | Builtin Builtin
           | Verb Code
           | Noun Code Code
           | NoValue
           deriving Show

data Language = Language {
  maxID    :: ID,
  symMap   :: Bimap String ID,
  aliasMap :: Map ID ID,
  equivMap :: Map ID ID,
  modMap   :: Bimap String IDRange,
  valMap   :: Map ID Context.Types.Value,
  exports  :: Set ID,
  loadCode :: [Instruction]
  }
symsF = Field (symMap,\s ce -> ce { symMap = s })
valsF = Field (valMap,\v ce -> ce { valMap = v })

data Context = C {
  language      :: Language,
  jitAddresses  :: Map ID (ForeignPtr Word8),
  compAddresses :: Map ID (Int,ForeignPtr Word8),
  compTop       :: Int,
  transform     :: Syntax ID -> IO (Syntax ID)
  }
jitAddressesF  = Field (jitAddresses,\a c -> c { jitAddresses = a })
compAddressesF = Field (compAddresses,\a c -> c { compAddresses = a })
languageF      = Field (language,\a c -> c { language = a })
compTopF       = Field (compTop,\a c -> c { compTop = a })