Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- type ActiveThreads = Maybe (IORef (Set ThreadId))
- type Tag = Word64
- type DEnv = EnumMap Word64 Closure
- data Tracer
- data CCache = CCache {
- foreignFuncs :: EnumMap Word64 ForeignFunc
- sandboxed :: Bool
- tracer :: Bool -> Closure -> Tracer
- combs :: TVar (EnumMap Word64 RCombs)
- combRefs :: TVar (EnumMap Word64 Reference)
- tagRefs :: TVar (EnumMap Word64 Reference)
- freshTm :: TVar Word64
- freshTy :: TVar Word64
- intermed :: TVar (Map Reference (SuperGroup Symbol))
- refTm :: TVar (Map Reference Word64)
- refTy :: TVar (Map Reference Word64)
- sandbox :: TVar (Map Reference (Set Reference))
- refNumsTm :: CCache -> IO (Map Reference Word64)
- refNumsTy :: CCache -> IO (Map Reference Word64)
- refNumTm :: CCache -> Reference -> IO Word64
- refNumTy :: CCache -> Reference -> IO Word64
- refNumTy' :: CCache -> Reference -> IO (Maybe Word64)
- baseCCache :: Bool -> IO CCache
- info :: Show a => String -> a -> IO ()
- infos :: String -> String -> IO ()
- stk'info :: Stack 'BX -> IO ()
- eval0 :: CCache -> ActiveThreads -> RSection -> IO ()
- topDEnv :: EnumMap Word64 RCombs -> Map Reference Word64 -> Map Reference Word64 -> (DEnv, K -> K)
- apply0 :: Maybe (Stack 'UN -> Stack 'BX -> IO ()) -> CCache -> ActiveThreads -> Word64 -> IO ()
- apply1 :: (Stack 'UN -> Stack 'BX -> IO ()) -> CCache -> ActiveThreads -> Closure -> IO ()
- jump0 :: (Stack 'UN -> Stack 'BX -> IO ()) -> CCache -> ActiveThreads -> Closure -> IO ()
- unitValue :: Closure
- lookupDenv :: Word64 -> DEnv -> Closure
- buildLit :: Reference -> Word64 -> MLit -> Closure
- exec :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Reference -> RInstr -> IO (DEnv, Stack 'UN, Stack 'BX, K)
- encodeExn :: Stack 'UN -> Stack 'BX -> Either SomeException () -> IO (Stack 'BX)
- numValue :: Maybe Reference -> Closure -> IO Word64
- eval :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Reference -> RSection -> IO ()
- forkEval :: CCache -> ActiveThreads -> Closure -> IO ThreadId
- nestEval :: CCache -> ActiveThreads -> (Closure -> IO ()) -> Closure -> IO ()
- atomicEval :: CCache -> ActiveThreads -> (Closure -> IO ()) -> Closure -> IO ()
- enter :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Bool -> Args -> RComb -> IO ()
- name :: Stack 'UN -> Stack 'BX -> Args -> Closure -> IO (Stack 'BX)
- apply :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Bool -> Args -> Closure -> IO ()
- jump :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Args -> Closure -> IO ()
- repush :: CCache -> ActiveThreads -> Stack 'UN -> Stack 'BX -> DEnv -> K -> K -> IO ()
- moveArgs :: Stack 'UN -> Stack 'BX -> Args -> IO (Stack 'UN, Stack 'BX)
- closureArgs :: Stack 'BX -> Args -> IO [Closure]
- buildData :: Stack 'UN -> Stack 'BX -> Reference -> Tag -> Args -> IO Closure
- dumpDataNoTag :: Maybe Reference -> Stack 'UN -> Stack 'BX -> Closure -> IO (Word64, Stack 'UN, Stack 'BX)
- dumpData :: Maybe Reference -> Stack 'UN -> Stack 'BX -> Closure -> IO (Stack 'UN, Stack 'BX)
- closeArgs :: Augment -> Stack 'UN -> Stack 'BX -> Seg 'UN -> Seg 'BX -> Args -> IO (Seg 'UN, Seg 'BX)
- peekForeign :: Stack 'BX -> Int -> IO a
- uprim1 :: Stack 'UN -> UPrim1 -> Int -> IO (Stack 'UN)
- uprim2 :: Stack 'UN -> UPrim2 -> Int -> Int -> IO (Stack 'UN)
- bprim1 :: Stack 'UN -> Stack 'BX -> BPrim1 -> Int -> IO (Stack 'UN, Stack 'BX)
- bprim2 :: Stack 'UN -> Stack 'BX -> BPrim2 -> Int -> Int -> IO (Stack 'UN, Stack 'BX)
- yield :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> IO ()
- selectTextBranch :: Text -> RSection -> Map Text RSection -> RSection
- selectBranch :: Tag -> RBranch -> RSection
- splitCont :: DEnv -> Stack 'UN -> Stack 'BX -> K -> Word64 -> IO (Closure, DEnv, Stack 'UN, Stack 'BX, K)
- discardCont :: DEnv -> Stack 'UN -> Stack 'BX -> K -> Word64 -> IO (DEnv, Stack 'UN, Stack 'BX, K)
- resolve :: CCache -> DEnv -> Stack 'BX -> RRef -> IO Closure
- unhandledErr :: String -> CCache -> Word64 -> IO a
- rCombSection :: EnumMap Word64 RCombs -> CombIx -> RComb
- resolveSection :: CCache -> Section -> IO RSection
- dummyRef :: Reference
- reserveIds :: Word64 -> TVar Word64 -> IO Word64
- updateMap :: Semigroup s => s -> TVar s -> STM s
- modifyMap :: TVar s -> (s -> s) -> STM s
- refLookup :: String -> Map Reference Word64 -> Reference -> Word64
- decodeCacheArgument :: Seq Closure -> IO [(Reference, SuperGroup Symbol)]
- decodeSandboxArgument :: Seq Closure -> IO [Reference]
- encodeSandboxListResult :: [Reference] -> Seq Closure
- encodeSandboxResult :: Either [Reference] [Reference] -> Closure
- encodeLeft :: Closure -> Closure
- encodeRight :: Closure -> Closure
- addRefs :: TVar Word64 -> TVar (Map Reference Word64) -> TVar (EnumMap Word64 Reference) -> Set Reference -> STM (Map Reference Word64)
- codeValidate :: [(Reference, SuperGroup Symbol)] -> CCache -> IO (Maybe (Failure Closure))
- sandboxList :: CCache -> Referent -> IO [Reference]
- checkSandboxing :: CCache -> [Reference] -> Closure -> IO Bool
- checkValueSandboxing :: CCache -> [Reference] -> Value -> IO (Either [Reference] [Reference])
- evaluateSTM :: a -> STM a
- cacheAdd0 :: Set Reference -> [(Reference, SuperGroup Symbol)] -> [(Reference, Set Reference)] -> CCache -> IO ()
- expandSandbox :: Map Reference (Set Reference) -> [(Reference, SuperGroup Symbol)] -> [(Reference, Set Reference)]
- cacheAdd :: [(Reference, SuperGroup Symbol)] -> CCache -> IO [Reference]
- reflectValue :: EnumMap Word64 Reference -> Closure -> IO Value
- reifyValue :: CCache -> Value -> IO (Either [Reference] RClosure)
- reifyValue0 :: (EnumMap Word64 RCombs, Map Reference Word64, Map Reference Word64) -> Value -> IO Closure
- doubleToInt :: Double -> Int
- intToDouble :: Int -> Double
- closureNum :: Closure -> Int
- universalEq :: (Foreign -> Foreign -> Bool) -> Closure -> Closure -> Bool
- arrayEq :: (Closure -> Closure -> Bool) -> Array Closure -> Array Closure -> Bool
- compareAsFloat :: Int -> Int -> Ordering
- compareAsNat :: Int -> Int -> Ordering
- floatTag :: Word64
- natTag :: Word64
- intTag :: Word64
- charTag :: Word64
- unitTag :: Word64
- leftTag :: Word64
- rightTag :: Word64
- universalCompare :: (Foreign -> Foreign -> Ordering) -> Closure -> Closure -> Ordering
- arrayCmp :: (Closure -> Closure -> Ordering) -> Array Closure -> Array Closure -> Ordering
Documentation
type ActiveThreads = Maybe (IORef (Set ThreadId)) Source #
A ref storing every currently active thread. This is helpful for cleaning up orphaned threads when the main process completes. We track threads when running in a host process like UCM, otherwise we don't bother since forked threads are cleaned up automatically on termination.
CCache | |
|
topDEnv :: EnumMap Word64 RCombs -> Map Reference Word64 -> Map Reference Word64 -> (DEnv, K -> K) Source #
apply0 :: Maybe (Stack 'UN -> Stack 'BX -> IO ()) -> CCache -> ActiveThreads -> Word64 -> IO () Source #
exec :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Reference -> RInstr -> IO (DEnv, Stack 'UN, Stack 'BX, K) Source #
Execute an instruction
eval :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Reference -> RSection -> IO () Source #
Evaluate a section
atomicEval :: CCache -> ActiveThreads -> (Closure -> IO ()) -> Closure -> IO () Source #
enter :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Bool -> Args -> RComb -> IO () Source #
apply :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Bool -> Args -> Closure -> IO () Source #
jump :: CCache -> DEnv -> ActiveThreads -> Stack 'UN -> Stack 'BX -> K -> Args -> Closure -> IO () Source #
dumpDataNoTag :: Maybe Reference -> Stack 'UN -> Stack 'BX -> Closure -> IO (Word64, Stack 'UN, Stack 'BX) Source #
dumpData :: Maybe Reference -> Stack 'UN -> Stack 'BX -> Closure -> IO (Stack 'UN, Stack 'BX) Source #
closeArgs :: Augment -> Stack 'UN -> Stack 'BX -> Seg 'UN -> Seg 'BX -> Args -> IO (Seg 'UN, Seg 'BX) Source #
splitCont :: DEnv -> Stack 'UN -> Stack 'BX -> K -> Word64 -> IO (Closure, DEnv, Stack 'UN, Stack 'BX, K) Source #
discardCont :: DEnv -> Stack 'UN -> Stack 'BX -> K -> Word64 -> IO (DEnv, Stack 'UN, Stack 'BX, K) Source #
decodeCacheArgument :: Seq Closure -> IO [(Reference, SuperGroup Symbol)] Source #
encodeLeft :: Closure -> Closure Source #
encodeRight :: Closure -> Closure Source #
addRefs :: TVar Word64 -> TVar (Map Reference Word64) -> TVar (EnumMap Word64 Reference) -> Set Reference -> STM (Map Reference Word64) Source #
checkValueSandboxing :: CCache -> [Reference] -> Value -> IO (Either [Reference] [Reference]) Source #
evaluateSTM :: a -> STM a Source #
cacheAdd0 :: Set Reference -> [(Reference, SuperGroup Symbol)] -> [(Reference, Set Reference)] -> CCache -> IO () Source #
expandSandbox :: Map Reference (Set Reference) -> [(Reference, SuperGroup Symbol)] -> [(Reference, Set Reference)] Source #
reifyValue0 :: (EnumMap Word64 RCombs, Map Reference Word64, Map Reference Word64) -> Value -> IO Closure Source #
doubleToInt :: Double -> Int Source #
intToDouble :: Int -> Double Source #
closureNum :: Closure -> Int Source #