git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
C++: fix issue with internal vector type (used with data)
commit35f079b04694f77b467629b9144ae0c2212eaf04 authorAndy Arvanitis <andyarvanitis@gmail.com> dateMon 15 Feb 2016, 10:53 (11 years ago) parent41678bc
3 files changed+10−8
pcc/include/purescript.cc+6 pcc/include/purescript.hh+1−4 src/Language/PureScript/CodeGen/Cpp/File.hs+3−4
pcc/include/purescript.cc+6
@@ -151,6 +151,12 @@ auto any::cast() const -> typename std::enable_if<std::is_same<T, map>::value, c
151151}
152152template auto any::cast<any::map>() const -> const map&;
153153
154+template <typename T>
155+auto any::cast() const -> typename std::enable_if<std::is_same<T, vector>::value, const T&>::type {
156+ RETURN_VALUE(Type::Vector, v, *)
157+}
158+template auto any::cast<any::vector>() const -> const vector&;
159+
154160template <typename T>
155161auto any::cast() const -> typename std::enable_if<std::is_same<T, array>::value, const T&>::type {
156162 RETURN_VALUE(Type::Array, a, *)
pcc/include/purescript.hh+1−4
@@ -240,11 +240,8 @@ class any {
240240 template <typename T>
241241 auto cast() const -> typename std::enable_if<std::is_same<T, map>::value, const T&>::type;
242242
243− // These cannot be thunked
244243 template <typename T>
245− inline auto cast() const -> typename std::enable_if<std::is_same<T, vector>::value, const T&>::type {
246− return *v;
247− }
244+ auto cast() const -> typename std::enable_if<std::is_same<T, vector>::value, const T&>::type;
248245
249246 template <typename T>
250247 auto cast() const -> typename std::enable_if<std::is_same<T, array>::value, const T&>::type;
src/Language/PureScript/CodeGen/Cpp/File.hs+3−4
@@ -24,7 +24,6 @@ import Language.PureScript.CodeGen.Cpp.Types
2424import Language.PureScript.Names
2525
2626import qualified Language.PureScript.Pretty.Cpp as P
27−import qualified Language.PureScript.Pretty.Common as P
2827
2928---------------------------------------------------------------------------------------------------
3029toHeader :: [Cpp] -> [Cpp]
@@ -34,7 +33,7 @@ toHeader = catMaybes . map go
3433 go :: Cpp -> Maybe Cpp
3534 go (CppNamespace name cpps) = Just (CppNamespace name (toHeader cpps))
3635 go cpp@(CppUseNamespace{}) = Just cpp
37− go (CppFunction name args rtyp qs body)
36+ go (CppFunction _ _ _ qs _)
3837 | CppInline `elem` qs = Just CppNoOp
3938 go (CppFunction _ [(_, atyp)] _ _ (CppBlock [CppReturn (CppApp _ [_])])) | atyp == Just CppAuto
4039 = Just CppNoOp
@@ -107,7 +106,7 @@ toBody = catMaybes . map go
107106 isNoOp (CppRaw _) = True
108107 isNoOp _ = False
109108 go cpp@(CppUseNamespace{}) = Just cpp
110− go (CppFunction name args rtyp qs body)
109+ go (CppFunction _ _ _ qs _)
111110 | CppInline `elem` qs = Just CppNoOp
112111 go cpp@(CppFunction {}) = Just cpp
113112 go (CppVariableIntroduction _ _ (Just CppNumericLiteral {})) =
@@ -127,7 +126,7 @@ toBody = catMaybes . map go
127126 addCaptures (CppObjectLiteral objs) = CppObjectLiteral (objlam <$> objs)
128127 where
129128 objlam :: (String, Cpp) -> (String, Cpp)
130− objlam (name, (CppLambda _ args rty body)) = (name , CppLambda [] args rty $ addCaptures body)
129+ objlam (name', (CppLambda _ args rty body)) = (name' , CppLambda [] args rty $ addCaptures body)
131130 objlam obj = obj
132131 addCaptures (CppApp (CppLambda _ [] rty body) []) = CppApp (CppLambda [] [] rty (addCaptures body)) []
133132 addCaptures cpps' = everywhereOnCpp addCapture cpps'