{-# LANGUAGE OverloadedStrings #-} module GHC.StgToJS.StaticPtr ( initStaticPtrs ) where import GHC.Prelude import GHC.Linker.Types (SptEntry(..)) import GHC.Fingerprint.Type import GHC.Types.Literal import GHC.JS.JStg.Syntax import GHC.JS.Make import GHC.StgToJS.Types import GHC.StgToJS.Literal import GHC.StgToJS.Ids initStaticPtrs :: [SptEntry] -> G JStgStat initStaticPtrs :: [SptEntry] -> G JStgStat initStaticPtrs [SptEntry] ptrs = [JStgStat] -> JStgStat forall a. Monoid a => [a] -> a mconcat ([JStgStat] -> JStgStat) -> StateT GenState IO [JStgStat] -> G JStgStat forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> (SptEntry -> G JStgStat) -> [SptEntry] -> StateT GenState IO [JStgStat] forall (t :: * -> *) (m :: * -> *) a b. (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b) forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b] mapM SptEntry -> G JStgStat initStatic [SptEntry] ptrs where initStatic :: SptEntry -> G JStgStat initStatic (SptEntry Id sp_id (Fingerprint Word64 w1 Word64 w2)) = do i <- Id -> G JStgExpr varForId Id sp_id fpa <- concat <$> mapM (genLit . mkLitWord64 . fromIntegral) [w1,w2] let sptInsert = JStgExpr -> [JStgExpr] -> JStgStat ApplStat (FastString -> JStgExpr var FastString "h$hs_spt_insert") ([JStgExpr] fpa [JStgExpr] -> [JStgExpr] -> [JStgExpr] forall a. [a] -> [a] -> [a] ++ [JStgExpr i]) return $ (var "h$initStatic" .^ "push") `ApplStat` [Func [] sptInsert]