@@ -53,7 +53,9 @@ safeName name
5353 , any (=='.') name
5454 = "$" <> (escaped $ dotsTo '_' name)
5555safeName name
56− | "_" `isPrefixOf` name = "$" <> escaped name
56+ | Just ('_', rest) <- uncons name
57+ , not (null rest)
58+ , isUpper (T.head rest) = "_$" <> escaped rest
5759safeName name = escaped name
5860
5961escaped :: Text -> Text
@@ -159,6 +161,7 @@ nameIsCppReserved name =
159161 , "dynamic_cast"
160162 , "else"
161163 , "enum"
164+ , "errno"
162165 , "explicit"
163166 , "export"
164167 , "extern"
@@ -176,6 +179,7 @@ nameIsCppReserved name =
176179 , "make_managed"
177180 , "make_managed_and_finalized"
178181 , "managed"
182+ , "math_errhandling"
179183 , "mutable"
180184 , "namespace"
181185 , "new"
@@ -199,6 +203,7 @@ nameIsCppReserved name =
199203 , "requires"
200204 , "return"
201205 , "runtime_error"
206+ , "setjmp"
202207 , "short"
203208 , "signed"
204209 , "sizeof"
@@ -226,6 +231,7 @@ nameIsCppReserved name =
226231 , "unknown_size"
227232 , "unsigned"
228233 , "using"
234+ , "va_end"
229235 , "virtual"
230236 , "void"
231237 , "volatile"