From 13c8647b1eaafe75a73c74766fd5165e87f54bc8 Mon Sep 17 00:00:00 2001 From: Mike Kestner Date: Mon, 19 Jan 2004 17:05:53 +0000 Subject: [PATCH] 2004-01-19 Mike Kestner * art/Art.metadata : correct a couple symbolic array_lens * art/art-api.xml : regen * gdk/Gdk.metadata : correct a symbolic array_len * gdk/gdk-api.xml : regen * generator/Field.cs : generate array fields with MarshalAs attrs for correct marshaling. svn path=/trunk/gtk-sharp/; revision=22261 --- ChangeLog | 9 +++++++++ art/Art.metadata | 2 ++ art/art-api.xml | 4 ++-- gdk/Gdk.metadata | 1 + gdk/gdk-api.xml | 2 +- generator/Field.cs | 27 +++++++++++++++++++++------ 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index f4855af3e..c71d4f07b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2004-01-19 Mike Kestner + + * art/Art.metadata : correct a couple symbolic array_lens + * art/art-api.xml : regen + * gdk/Gdk.metadata : correct a symbolic array_len + * gdk/gdk-api.xml : regen + * generator/Field.cs : generate array fields with MarshalAs + attrs for correct marshaling. + 2004-01-18 Mike Kestner * generator/Field.cs : refactored code from StructBase diff --git a/art/Art.metadata b/art/Art.metadata index a8b55ea39..e69b141c6 100644 --- a/art/Art.metadata +++ b/art/Art.metadata @@ -1,5 +1,7 @@ ToStringArray + 17 + 17 1 diff --git a/art/art-api.xml b/art/art-api.xml index a19aa72d6..a4132e3d0 100644 --- a/art/art-api.xml +++ b/art/art-api.xml @@ -165,7 +165,7 @@ - + @@ -315,7 +315,7 @@ - + diff --git a/gdk/Gdk.metadata b/gdk/Gdk.metadata index db4522b2b..0c2812418 100644 --- a/gdk/Gdk.metadata +++ b/gdk/Gdk.metadata @@ -51,6 +51,7 @@ out out 1 + 128 1 diff --git a/gdk/gdk-api.xml b/gdk/gdk-api.xml index 0a3b5cd6c..333ccd026 100644 --- a/gdk/gdk-api.xml +++ b/gdk/gdk-api.xml @@ -2684,7 +2684,7 @@ - + diff --git a/generator/Field.cs b/generator/Field.cs index d09f34be0..d1fad2671 100644 --- a/generator/Field.cs +++ b/generator/Field.cs @@ -21,12 +21,28 @@ namespace GtkSharp.Generation { this.elem = elem; } + public int ArrayLength { + get { + if (!IsArray) + return 0; + + int result; + try { + result = Int32.Parse (elem.GetAttribute("array_len")); + } catch (Exception e) { + Console.Write ("Non-numeric array_len: " + elem.GetAttribute("array_len")); + Console.WriteLine (" warning: array field {0} incorrectly generated", Name); + result = 0; + } + return result; + } + } + public string CSType { get { string type = SymbolTable.Table.GetCSType (CType); if (IsArray) - // FIXME - type = "IntPtr"; + type += "[]"; else if (IsBit) type = "uint"; else if ((IsPointer || SymbolTable.Table.IsOpaque (CType)) && type != "string") @@ -88,7 +104,7 @@ namespace GtkSharp.Generation { get { if (IsArray) // FIXME - return "private"; + return "public"; else if (IsBit || IsPadding || SymbolTable.Table.IsCallback (CType)) return "private"; else if ((IsPointer || SymbolTable.Table.IsOpaque (CType)) && CSType != "string") @@ -108,9 +124,8 @@ namespace GtkSharp.Generation { SymbolTable table = SymbolTable.Table; - // FIXME - if (IsArray) - Console.WriteLine ("warning: array field {0} probably incorrectly generated", Name); + if (IsArray) + sw.WriteLine ("\t\t[MarshalAs (UnmanagedType.ByValArray, SizeConst=" + ArrayLength + ")]"); sw.WriteLine ("\t\t{0} {1} {2};", Protection, CSType, table.MangleName (Name));