@@ -71,16 +71,17 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
71 (snd <$> imps)
71 (snd <$> imps)
72 let cppImports' = "PureScript" : cppImports
72 let cppImports' = "PureScript" : cppImports
73 cppDecls <- concat <$> mapM (bindToCpp [CppTopLevel]) decls
73 cppDecls <- concat <$> mapM (bindToCpp [CppTopLevel]) decls
74+ let cpps = filterInlineFuncs <$> cppDecls
74− let namesmap = M.toList .
75+ namesmap = M.toList .
75 M.mapKeysMonotonic (qualifiedToCpp id) . M.map (\(t, _, _) -> arity t) $
76 M.mapKeysMonotonic (qualifiedToCpp id) . M.map (\(t, _, _) -> arity t) $
76 E.names env
77 E.names env
77 datamap = M.toList .
78 datamap = M.toList .
78 M.mapKeysMonotonic (qualifiedToCpp (Ident . runProperName)) .
79 M.mapKeysMonotonic (qualifiedToCpp (Ident . runProperName)) .
79 M.map (\(_, _, _, fields) -> length fields) $
80 M.map (\(_, _, _, fields) -> length fields) $
80 E.dataConstructors env
81 E.dataConstructors env
81− cppDecls' <- traverse (optimize $ namesmap ++ datamap) cppDecls
82+ cpps' <- traverse (optimize $ namesmap ++ datamap) cpps
82 foreignWrappers <- curriedForeigns
83 foreignWrappers <- curriedForeigns
83− let optimized = cppDecls' ++ foreignWrappers
84+ let optimized = cpps' ++ foreignWrappers
84 let moduleHeader =
85 let moduleHeader =
85 fileBegin mn "HH" ++
86 fileBegin mn "HH" ++
86 P.linebreak ++
87 P.linebreak ++
@@ -187,12 +188,7 @@ moduleToCpp env (Module _ mn imps _ foreigns decls) = do
187 args' = (\i -> (identToCpp i, aty)) <$> fst abs'
188 args' = (\i -> (identToCpp i, aty)) <$> fst abs'
188 abs' = unAbs body []
189 abs' = unAbs body []
189 isAccessor :: Expr Ann -> Bool
190 isAccessor :: Expr Ann -> Bool
190− isAccessor (Accessor _ _ e)
191+ isAccessor Accessor{} = True
191− | (_, f, _, _) <- everythingOnValues (&&) (const False) notAbs (const False) (const False) = f e
193− notAbs :: Expr Ann -> Bool
194− notAbs Abs{} = False
196 isAccessor _ = False
192 isAccessor _ = False
197 isIndexer :: Cpp -> Bool
193 isIndexer :: Cpp -> Bool
198 isIndexer (CppIndexer (CppSymbol _) (CppVar _)) = True
194 isIndexer (CppIndexer (CppSymbol _) (CppVar _)) = True
@@ -944,3 +940,20 @@ symbolDefs syms = CppNamespace "PureScript" [CppNamespace "symbol" (asFunc <$> s
945 asFunc :: String -> Cpp
941 asFunc :: String -> Cpp
946 asFunc s = CppStruct s []
942 asFunc s = CppStruct s []
944+---------------------------------------------------------------------------------------------------
945+filterInlineFuncs :: Cpp -> Cpp
946+---------------------------------------------------------------------------------------------------
947+filterInlineFuncs = everywhereOnCpp convert
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
955+ shouldRemove :: Cpp -> Bool
956+ shouldRemove CppSymbol{} = True
957+ shouldRemove CppLambda{} = True
958+ shouldRemove _ = False