internal static string Unwrap(this CXString s) { // Normal marshalling causes double free crash at mono runtime. So I manually process marshaling here. var p = clang_getCString(s); if (p == IntPtr.Zero) { return(null); } int x = 0; unsafe { byte *ptr = (byte *)p; while (ptr [x] != 0) { x++; } var e = System.Text.Encoding.Default; var l = e.GetCharCount(ptr, x); if (l == 0) { return(string.Empty); } char *buf = stackalloc char [l]; e.GetChars(ptr, x, buf, l); return(new string (buf, 0, l)); } }
internal static extern CXString clang_getDiagnosticOption(CXDiagnostic diag, out CXString disable);
internal static extern CXDiagnosticSet clang_loadDiagnostics(string file, out LoadDiagError error, out CXString errorString);
internal static extern void clang_getPresumedLocation(CXSourceLocation location, out CXString filename, out uint line, out uint column);
internal static extern void clang_remap_getFilenames(CXRemapping _, uint index, out CXString original, out CXString transformed);
internal static extern int clang_getCursorPlatformAvailability(CXCursor cursor, out int always_deprecated, out CXString deprecated_message, out int always_unavailable, out CXString unavailable_message, ref IntPtr availability, int availability_size); // CXPlatformAvailability*
internal static extern CXString clang_constructUSR_ObjCProperty(string property, CXString classUSR);
internal static extern CXString clang_constructUSR_ObjCMethod(string name, uint isInstanceMethod, CXString classUSR);
internal static extern CXString clang_constructUSR_ObjCIvar(string name, CXString classUSR);
internal static extern uint clang_Cursor_isExternalSymbol(CXCursor C, out CXString language, out CXString definedIn, out uint isGenerated);
internal static extern void clang_disposeString(CXString @string);
internal static extern IntPtr clang_getCString(CXString @string);