alpha-1.0.9: src/Context/Types.hs
module Context.Types where
import Foreign.ForeignPtr
import Foreign.Ptr
import Data.Word
import Data.Bimap
import Data.Map
import Data.Set
import My.Control.Monad.State
import ID
import PCode
import Syntax
import Options
data Axiom = XAlter | XBind
| XReturn | XRestart | XChoose | XDo
| XAddr | XSize
| XLang | XVerb | XNoun | XID
deriving Show
data Value = Axiom Axiom
| Builtin Builtin
| Verb Code
| Noun Code Code
| NoValue
deriving Show
references (Verb code) = codeRefs code
references (Noun size init) = codeRefs size ++ codeRefs init
references _ = []
data Language = Language {
nameL :: String,
maxIDL :: ID,
symbolsL :: Bimap String ID,
aliasesL :: Map ID ID,
equivsL :: Map ID ID,
languagesL :: Bimap String (Range ID),
valuesL :: Map ID Context.Types.Value,
exportsL :: Set ID
}
syms_ = View (symbolsL,\s ce -> ce { symbolsL = s })
vals_ = View (valuesL,\v ce -> ce { valuesL = v })
data Context = C {
settings :: Settings,
language :: Language,
jitAddresses :: Map ID (ForeignPtr Word8),
compAddresses :: Map ID (Int,ForeignPtr Word8),
compTop :: Int,
transform :: Maybe (Ptr ())
}
jitAddresses_ = View (jitAddresses,\a c -> c { jitAddresses = a })
compAddresses_ = View (compAddresses,\a c -> c { compAddresses = a })
language_ = View (language,\a c -> c { language = a })
compTop_ = View (compTop,\a c -> c { compTop = a })