unison-runtime-0.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Unison.Runtime.ANF.Serialize

Synopsis

Documentation

data Version Source #

Constructors

Transfer Word32 
Hash Word32 

Instances

Instances details
Show Version Source # 
Instance details

Defined in Unison.Runtime.ANF.Serialize

index :: Eq v => [v] -> v -> Maybe Word64 Source #

deindex :: HasCallStack => [v] -> Word64 -> v Source #

pushCtx :: [v] -> [v] -> [v] Source #

putIndex :: MonadPut m => Word64 -> m () Source #

putVar :: MonadPut m => Eq v => [v] -> v -> m () Source #

getVar :: MonadGet m => [v] -> m v Source #

putArgs :: MonadPut m => Eq v => [v] -> [v] -> m () Source #

getArgs :: MonadGet m => [v] -> m [v] Source #

putCCs :: MonadPut m => [Mem] -> m () Source #

getCCs :: MonadGet m => m [Mem] Source #

putCode :: MonadPut m => Bool -> Code -> m () Source #

putInlineInfo :: (MonadPut m, Var v) => [v] -> InlineInfo v -> m () Source #

putInlineExpr :: (MonadPut m, Var v) => [v] -> ANormal v -> m () Source #

getInlineExpr :: (MonadGet m, SerialConfig m, Var v) => [v] -> Word64 -> m (ANormal v) Source #

putOptInfos :: (MonadPut m, Var v) => OptInfos v -> m () Source #

putComb :: MonadPut m => Var v => Map Reference Word64 -> Bool -> [v] -> SuperNormal v -> m () Source #

getFresh :: Var v => Word64 -> v Source #

getComb :: MonadGet m => SerialConfig m => Var v => [v] -> Word64 -> m (SuperNormal v) Source #

putNormal :: MonadPut m => Var v => Map Reference Word64 -> Bool -> [v] -> ANormal v -> m () Source #

getNormal :: MonadGet m => SerialConfig m => Var v => [v] -> Word64 -> m (ANormal v) Source #

putFunc :: MonadPut m => Var v => Map Reference Word64 -> Bool -> [v] -> Func v -> m () Source #

getFunc :: (MonadGet m, SerialConfig m, Var v) => [v] -> m (Func v) Source #

putPOp :: MonadPut m => POp -> m () Source #

putLit :: MonadPut m => Lit -> m () Source #

putBLit :: MonadPut m => Version -> BLit -> m () Source #

putAsMap :: MonadPut m => Version -> [(Value, Value)] -> m () Source #

putRefs :: MonadPut m => [Reference] -> m () Source #

putBranches :: MonadPut m => Var v => Map Reference Word64 -> Bool -> [v] -> Branched (ANormal v) -> m () Source #

getBranches :: MonadGet m => SerialConfig m => Var v => [v] -> Word64 -> m (Branched (ANormal v)) Source #

putCase :: MonadPut m => Var v => Map Reference Word64 -> Bool -> [v] -> ([Mem], ANormal v) -> m () Source #

getCase :: MonadGet m => SerialConfig m => Var v => [v] -> Word64 -> m ([Mem], ANormal v) Source #

putCTag :: MonadPut m => CTag -> m () Source #

putValue :: MonadPut m => Version -> Value -> m () Source #

putCont :: MonadPut m => Version -> Cont -> m () Source #

serializeGroupForRehash :: Var v => Reference -> SuperGroup v -> ByteString Source #

Serializes a SuperGroup for rehashing.

Expected as arguments are some code, and the Reference that refers to it. In particular, if the code refers to itself by reference, or if the code is part of a mututally-recursive set of definitions (which have a common hash), the reference used as part of that (mutual) recursion must be supplied.

Using that reference, we find all references in the code to that connected component. In the resulting byte string, those references are instead replaced by positions in a listing of the connected component. This means that the byte string is independent of the hash used for the self reference. Only the order matters (which is determined by the Reference). Then the bytes can be re-hashed to establish a new hash for the connected component. This operation should be idempotent as long as the indexing is preserved.

Supplying a Builtin reference is not supported. Such code shouldn't be subject to rehashing.