@@ -71,16 +71,17 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
7171 (snd <$> imps)
7272 let cppImports' = "PureScript" : cppImports
7373 cppDecls <- concat <$> mapM (bindToCpp [CppTopLevel]) decls
74− let namesmap = M.toList .
74+ let cpps = filterInlineFuncs <$> cppDecls
75+ namesmap = M.toList .
7576 M.mapKeysMonotonic (qualifiedToCpp id) . M.map (\(t, _, _) -> arity t) $
7677 E.names env
7778 datamap = M.toList .
7879 M.mapKeysMonotonic (qualifiedToCpp (Ident . runProperName)) .
7980 M.map (\(_, _, _, fields) -> length fields) $
8081 E.dataConstructors env
81− cppDecls' <- traverse (optimize $ namesmap ++ datamap) cppDecls
82+ cpps' <- traverse (optimize $ namesmap ++ datamap) cpps
8283 foreignWrappers <- curriedForeigns
83− let optimized = cppDecls' ++ foreignWrappers
84+ let optimized = cpps' ++ foreignWrappers
8485 let moduleHeader =
8586 fileBegin mn "HH" ++
8687 P.linebreak ++
@@ -187,12 +188,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
187188 args' = (\i -> (identToCpp i, aty)) <$> fst abs'
188189 abs' = unAbs body []
189190 isAccessor :: Expr Ann -> Bool
190− isAccessor (Accessor _ _ e)
191− | (_, f, _, _) <- everythingOnValues (&&) (const False) notAbs (const False) (const False) = f e
192− where
193− notAbs :: Expr Ann -> Bool
194− notAbs Abs{} = False
195− notAbs _ = True
191+ isAccessor Accessor{} = True
196192 isAccessor _ = False
197193 isIndexer :: Cpp -> Bool
198194 isIndexer (CppIndexer (CppSymbol _) (CppVar _)) = True
@@ -944,3 +940,20 @@ symbolDefs syms = CppNamespace "PureScript" [CppNamespace "symbol" (asFunc <$> s
944940 where
945941 asFunc :: String -> Cpp
946942 asFunc s = CppStruct s []
943+
944+---------------------------------------------------------------------------------------------------
945+filterInlineFuncs :: Cpp -> Cpp
946+---------------------------------------------------------------------------------------------------
947+filterInlineFuncs = everywhereOnCpp convert
948+ where
949+ convert :: Cpp -> Cpp
950+ convert (CppBlock []) = CppBlock []
951+ convert (CppFunction n ps r qs cpp)
952+ | CppInline `elem` qs,
953+ everythingOnCpp (||) shouldRemove cpp = CppFunction n ps r (delete CppInline qs) cpp
954+ where
955+ shouldRemove :: Cpp -> Bool
956+ shouldRemove CppSymbol{} = True
957+ shouldRemove CppLambda{} = True
958+ shouldRemove _ = False
959+ convert cpp = cpp