Skip to content

Commit 573818f

Browse files
committed
Fixed a regression, a crash, when generating the parser bindings.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 1e80e8c commit 573818f

File tree

7 files changed

+78
-11
lines changed

7 files changed

+78
-11
lines changed

src/CppParser/Bindings/CSharp/i686-apple-darwin12.4.0/CppSharp.CppParser.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19252,9 +19252,24 @@ namespace __1
1925219252
{
1925319253
namespace Pair
1925419254
{
19255-
[StructLayout(LayoutKind.Explicit, Size = 0)]
19255+
[StructLayout(LayoutKind.Explicit, Size = 16)]
19256+
public unsafe partial struct __Internalc__N_std_N___1_S_pair____N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
19257+
{
19258+
[FieldOffset(0)]
19259+
internal global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C first;
19260+
19261+
[FieldOffset(12)]
19262+
internal global::System.IntPtr second;
19263+
}
19264+
19265+
[StructLayout(LayoutKind.Explicit, Size = 16)]
1925619266
public unsafe partial struct __Internalc__N_std_N___1_S_pair__1__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
1925719267
{
19268+
[FieldOffset(0)]
19269+
internal global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C first;
19270+
19271+
[FieldOffset(12)]
19272+
internal global::System.IntPtr second;
1925819273
}
1925919274
}
1926019275
}

src/CppParser/Bindings/CSharp/i686-pc-win32-msvc/CppSharp.CppParser.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19248,11 +19248,16 @@ public virtual void Dispose(bool disposing)
1924819248

1924919249
namespace Std
1925019250
{
19251-
namespace pair
19251+
namespace Pair
1925219252
{
19253-
[StructLayout(LayoutKind.Explicit, Size = 0)]
19253+
[StructLayout(LayoutKind.Explicit, Size = 28)]
1925419254
public unsafe partial struct __Internalc__N_std_S_pair__1__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
1925519255
{
19256+
[FieldOffset(0)]
19257+
internal global::Std.BasicString.__Internalc__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C first;
19258+
19259+
[FieldOffset(24)]
19260+
internal global::System.IntPtr second;
1925619261
}
1925719262
}
1925819263
}

src/CppParser/Bindings/CSharp/x86_64-apple-darwin12.4.0/CppSharp.CppParser.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19251,9 +19251,24 @@ namespace __1
1925119251
{
1925219252
namespace Pair
1925319253
{
19254-
[StructLayout(LayoutKind.Explicit, Size = 0)]
19254+
[StructLayout(LayoutKind.Explicit, Size = 32)]
19255+
public unsafe partial struct __Internalc__N_std_N___1_S_pair____N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
19256+
{
19257+
[FieldOffset(0)]
19258+
internal global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C first;
19259+
19260+
[FieldOffset(24)]
19261+
internal global::System.IntPtr second;
19262+
}
19263+
19264+
[StructLayout(LayoutKind.Explicit, Size = 32)]
1925519265
public unsafe partial struct __Internalc__N_std_N___1_S_pair__1__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
1925619266
{
19267+
[FieldOffset(0)]
19268+
internal global::Std.BasicString.__Internalc__N_std_N___1_S_basic_string__C___N_std_N___1_S_char_traits__C___N_std_N___1_S_allocator__C first;
19269+
19270+
[FieldOffset(24)]
19271+
internal global::System.IntPtr second;
1925719272
}
1925819273
}
1925919274
}

src/CppParser/Bindings/CSharp/x86_64-linux-gnu-cxx11abi/CppSharp.CppParser.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19249,9 +19249,14 @@ namespace Std
1924919249
{
1925019250
namespace pair
1925119251
{
19252-
[StructLayout(LayoutKind.Explicit, Size = 0)]
19252+
[StructLayout(LayoutKind.Explicit, Size = 40)]
1925319253
public unsafe partial struct __Internalc__N_std_S_pair__1__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
1925419254
{
19255+
[FieldOffset(0)]
19256+
internal global::Std.BasicString.__Internalc__N_std_N___cxx11_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C first;
19257+
19258+
[FieldOffset(32)]
19259+
internal global::System.IntPtr second;
1925519260
}
1925619261
}
1925719262
}

src/CppParser/Bindings/CSharp/x86_64-linux-gnu/CppSharp.CppParser.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19249,9 +19249,14 @@ namespace Std
1924919249
{
1925019250
namespace pair
1925119251
{
19252-
[StructLayout(LayoutKind.Explicit, Size = 0)]
19252+
[StructLayout(LayoutKind.Explicit, Size = 16)]
1925319253
public unsafe partial struct __Internalc__N_std_S_pair__1__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
1925419254
{
19255+
[FieldOffset(0)]
19256+
internal global::Std.BasicString.__Internalc__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C first;
19257+
19258+
[FieldOffset(8)]
19259+
internal global::System.IntPtr second;
1925519260
}
1925619261
}
1925719262
}

src/CppParser/Bindings/CSharp/x86_64-pc-win32-msvc/CppSharp.CppParser.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19248,11 +19248,16 @@ public virtual void Dispose(bool disposing)
1924819248

1924919249
namespace Std
1925019250
{
19251-
namespace pair
19251+
namespace Pair
1925219252
{
19253-
[StructLayout(LayoutKind.Explicit, Size = 0)]
19253+
[StructLayout(LayoutKind.Explicit, Size = 40)]
1925419254
public unsafe partial struct __Internalc__N_std_S_pair__1__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C____N_CppSharp_N_CppParser_N_AST_S_Declaration
1925519255
{
19256+
[FieldOffset(0)]
19257+
internal global::Std.BasicString.__Internalc__N_std_S_basic_string__C___N_std_S_char_traits__C___N_std_S_allocator__C first;
19258+
19259+
[FieldOffset(32)]
19260+
internal global::System.IntPtr second;
1925619261
}
1925719262
}
1925819263
}

src/Parser/ParserOptions.cs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using System.Diagnostics;
88
using System.Linq;
99
using System.Text.RegularExpressions;
10+
using System.IO;
1011

1112
namespace CppSharp.Parser
1213
{
@@ -221,8 +222,24 @@ public void SetupXcode()
221222
AddArguments("-stdlib=libc++");
222223
}
223224

224-
private void GetUnixCompilerInfo(out string compiler, out string longVersion, out string shortVersion)
225+
private void GetUnixCompilerInfo(string headersPath, out string compiler,
226+
out string longVersion, out string shortVersion)
225227
{
228+
if (!Platform.IsLinux)
229+
{
230+
compiler = "gcc";
231+
// Search for the available GCC versions on the provided headers.
232+
var versions = Directory.EnumerateDirectories(Path.Combine(headersPath,
233+
"usr", "include", "c++"));
234+
235+
if (versions.Count() == 0)
236+
throw new Exception("No valid GCC version found on system include paths");
237+
238+
string gccVersionPath = versions.First();
239+
longVersion = shortVersion = gccVersionPath.Substring(
240+
gccVersionPath.LastIndexOf(Path.DirectorySeparatorChar) + 1);
241+
return;
242+
}
226243
var info = new ProcessStartInfo(Environment.GetEnvironmentVariable("CXX") ?? "gcc", "-v");
227244
info.RedirectStandardError = true;
228245
info.CreateNoWindow = true;
@@ -242,15 +259,15 @@ private void GetUnixCompilerInfo(out string compiler, out string longVersion, ou
242259
shortVersion = match.Groups[3].ToString();
243260
}
244261

245-
public void SetupLinux(string headersPath="")
262+
public void SetupLinux(string headersPath = "")
246263
{
247264
MicrosoftMode = false;
248265
NoBuiltinIncludes = true;
249266
NoStandardIncludes = true;
250267
Abi = CppAbi.Itanium;
251268

252269
string compiler, longVersion, shortVersion;
253-
GetUnixCompilerInfo(out compiler, out longVersion, out shortVersion);
270+
GetUnixCompilerInfo(headersPath, out compiler, out longVersion, out shortVersion);
254271
string[] versions = {longVersion, shortVersion};
255272
string[] tripples = {"x86_64-linux-gnu", "x86_64-pc-linux-gnu"};
256273
if (compiler == "gcc")

0 commit comments

Comments
 (0)