2002-04-04 Mike Kestner <mkestner@speakeasy.net>

* generator/CallbackGen.cs : Unstubify.
	* generator/SymbolTable.cs : qualify some simple typenames.

svn path=/trunk/gtk-sharp/; revision=3615
This commit is contained in:
Mike Kestner 2002-04-04 16:20:53 +00:00
parent 356c9920ed
commit 138b6c1644
3 changed files with 107 additions and 48 deletions

View file

@ -1,3 +1,8 @@
2002-04-04 Mike Kestner <mkestner@speakeasy.net>
* generator/CallbackGen.cs : Unstubify.
* generator/SymbolTable.cs : qualify some simple typenames.
2002-03-29 Mike Kestner <mkestner@speakeasy.net> 2002-03-29 Mike Kestner <mkestner@speakeasy.net>
* */makefile : add make linux target. * */makefile : add make linux target.

View file

@ -2,7 +2,7 @@
// //
// Author: Mike Kestner <mkestner@speakeasy.net> // Author: Mike Kestner <mkestner@speakeasy.net>
// //
// (c) 2001 Mike Kestner // (c) 2002 Mike Kestner
namespace GtkSharp.Generation { namespace GtkSharp.Generation {
@ -45,22 +45,67 @@ namespace GtkSharp.Generation {
public String MarshalType { public String MarshalType {
get get
{ {
return ""; return QualifiedName;
} }
} }
public String CallByName (String var_name) public String CallByName (String var_name)
{ {
return ""; return var_name;
} }
public String FromNative(String var) public String FromNative(String var)
{ {
return ""; return var;
} }
public void Generate (SymbolTable table) public void Generate (SymbolTable table)
{ {
XmlElement ret_elem = elem["return-type"];
if (ret_elem == null) {
Console.WriteLine("Missing return type in callback " + CName);
Statistics.ThrottledCount++;
return;
}
string rettype = ret_elem.GetAttribute("type");
string s_ret = table.GetCSType(rettype);
if (s_ret == "") {
Console.WriteLine("rettype: " + rettype + " in callback " + CName);
Statistics.ThrottledCount++;
return;
}
string parmstr = "";
XmlNode params_elem = elem["parameters"];
if (params_elem != null) {
bool need_comma = false;
foreach (XmlNode node in params_elem.ChildNodes) {
if (node.Name != "parameter") {
continue;
}
XmlElement param = (XmlElement) node;
string type = param.GetAttribute("type");
string cs_type = table.GetCSType(type);
string name = param.GetAttribute("name");
name = MangleName(name);
if ((cs_type == "") || (name == "")) {
Console.WriteLine("parmtype: " + type + " in callback " + CName);
Statistics.ThrottledCount++;
break;
}
if (need_comma)
parmstr += ", ";
parmstr += (cs_type + " " + name);
need_comma = true;
}
}
char sep = Path.DirectorySeparatorChar; char sep = Path.DirectorySeparatorChar;
string dir = ".." + sep + ns.ToLower() + sep + "generated"; string dir = ".." + sep + ns.ToLower() + sep + "generated";
if (!Directory.Exists(dir)) { if (!Directory.Exists(dir)) {
@ -72,31 +117,40 @@ namespace GtkSharp.Generation {
StreamWriter sw = new StreamWriter (stream); StreamWriter sw = new StreamWriter (stream);
sw.WriteLine ("// Generated File. Do not modify."); sw.WriteLine ("// Generated File. Do not modify.");
sw.WriteLine ("// <c> 2001 Mike Kestner"); sw.WriteLine ("// <c> 2001-2002 Mike Kestner");
sw.WriteLine (); sw.WriteLine ();
sw.WriteLine ("namespace " + ns + " {"); sw.WriteLine ("namespace " + ns + " {");
sw.WriteLine (); sw.WriteLine ();
sw.WriteLine ("\tusing System;");
sw.WriteLine ("\tpublic delegate " + s_ret + " " + Name + "(" + parmstr + ");");
sw.WriteLine (); sw.WriteLine ();
sw.WriteLine ("\tpublic delegate void " + Name + "();");
sw.WriteLine ();
foreach (XmlNode node in elem.ChildNodes) {
if (node.Name != "member") {
continue;
}
//FIXME: Generate the method.
XmlElement member = (XmlElement) node;
}
sw.WriteLine ("}"); sw.WriteLine ("}");
sw.Flush(); sw.Flush();
sw.Close(); sw.Close();
Statistics.CBCount++; Statistics.CBCount++;
} }
public string MangleName(string name)
{
switch (name) {
case "string":
name = "str1ng";
break;
case "event":
name = "evnt";
break;
case "object":
name = "objekt";
break;
default:
break;
}
return name;
}
} }
} }

View file

@ -25,8 +25,8 @@ namespace GtkSharp.Generation {
simple_types.Add ("glong", "long"); simple_types.Add ("glong", "long");
simple_types.Add ("gshort", "short"); simple_types.Add ("gshort", "short");
simple_types.Add ("guint32", "uint"); simple_types.Add ("guint32", "uint");
simple_types.Add ("const-gchar", "String"); simple_types.Add ("const-gchar", "string");
simple_types.Add ("gchar", "String"); simple_types.Add ("gchar", "string");
simple_types.Add ("GObject", "GLib.Object"); simple_types.Add ("GObject", "GLib.Object");
simple_types.Add ("gfloat", "float"); simple_types.Add ("gfloat", "float");
simple_types.Add ("gdouble", "double"); simple_types.Add ("gdouble", "double");
@ -36,7 +36,7 @@ namespace GtkSharp.Generation {
simple_types.Add ("gint32", "int"); simple_types.Add ("gint32", "int");
simple_types.Add ("guint16", "ushort"); simple_types.Add ("guint16", "ushort");
simple_types.Add ("guint1", "bool"); simple_types.Add ("guint1", "bool");
simple_types.Add ("gpointer", "IntPtr"); simple_types.Add ("gpointer", "System.IntPtr");
simple_types.Add ("guchar", "byte"); simple_types.Add ("guchar", "byte");
simple_types.Add ("GValue", "GLib.Value"); simple_types.Add ("GValue", "GLib.Value");
simple_types.Add ("GtkType", "int"); simple_types.Add ("GtkType", "int");
@ -47,23 +47,23 @@ namespace GtkSharp.Generation {
simple_types.Add ("char", "char"); simple_types.Add ("char", "char");
simple_types.Add ("double", "double"); simple_types.Add ("double", "double");
simple_types.Add ("float", "float"); simple_types.Add ("float", "float");
simple_types.Add ("gunichar", "String"); simple_types.Add ("gunichar", "string");
simple_types.Add ("uint1", "bool"); simple_types.Add ("uint1", "bool");
simple_types.Add ("GPtrArray", "IntPtr[]"); simple_types.Add ("GPtrArray", "System.IntPtr[]");
simple_types.Add ("GType", "int"); simple_types.Add ("GType", "int");
// FIXME: These ought to be handled properly. // FIXME: These ought to be handled properly.
simple_types.Add ("GList", "IntPtr"); simple_types.Add ("GList", "System.IntPtr");
simple_types.Add ("GMemChunk", "IntPtr"); simple_types.Add ("GMemChunk", "System.IntPtr");
simple_types.Add ("GTimeVal", "IntPtr"); simple_types.Add ("GTimeVal", "System.IntPtr");
simple_types.Add ("GClosure", "IntPtr"); simple_types.Add ("GClosure", "System.IntPtr");
simple_types.Add ("GArray", "IntPtr"); simple_types.Add ("GArray", "System.IntPtr");
simple_types.Add ("GData", "IntPtr"); simple_types.Add ("GData", "System.IntPtr");
simple_types.Add ("GTypeModule", "GLib.Object"); simple_types.Add ("GTypeModule", "GLib.Object");
simple_types.Add ("GSList", "GLib.SList"); simple_types.Add ("GSList", "GLib.SList");
simple_types.Add ("GHashTable", "IntPtr"); simple_types.Add ("GHashTable", "System.IntPtr");
simple_types.Add ("va_list", "IntPtr"); simple_types.Add ("va_list", "System.IntPtr");
simple_types.Add ("GParamSpec", "IntPtr"); simple_types.Add ("GParamSpec", "System.IntPtr");
dlls = new Hashtable(); dlls = new Hashtable();
dlls.Add("Pango", "pango-1.0"); dlls.Add("Pango", "pango-1.0");
@ -90,14 +90,14 @@ namespace GtkSharp.Generation {
} }
} }
private String Trim(String type) private string Trim(string type)
{ {
String trim_type = type.TrimEnd('*'); string trim_type = type.TrimEnd('*');
if (trim_type.StartsWith("const-")) return trim_type.Substring(6); if (trim_type.StartsWith("const-")) return trim_type.Substring(6);
return trim_type; return trim_type;
} }
public String FromNative(String c_type, String val) public string FromNative(string c_type, string val)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (simple_types.ContainsKey(c_type)) { if (simple_types.ContainsKey(c_type)) {
@ -110,11 +110,11 @@ namespace GtkSharp.Generation {
} }
} }
public String GetCSType(String c_type) public string GetCSType(string c_type)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (simple_types.ContainsKey(c_type)) { if (simple_types.ContainsKey(c_type)) {
return (String) simple_types[c_type]; return (string) simple_types[c_type];
} else if (complex_types.ContainsKey(c_type)) { } else if (complex_types.ContainsKey(c_type)) {
IGeneratable gen = (IGeneratable) complex_types[c_type]; IGeneratable gen = (IGeneratable) complex_types[c_type];
return gen.QualifiedName; return gen.QualifiedName;
@ -123,11 +123,11 @@ namespace GtkSharp.Generation {
} }
} }
public String GetName(String c_type) public string GetName(string c_type)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (simple_types.ContainsKey(c_type)) { if (simple_types.ContainsKey(c_type)) {
String stype = (String) simple_types[c_type]; string stype = (string) simple_types[c_type];
int dotidx = stype.IndexOf("."); int dotidx = stype.IndexOf(".");
if (dotidx == -1) { if (dotidx == -1) {
return stype; return stype;
@ -142,16 +142,16 @@ namespace GtkSharp.Generation {
} }
} }
public String GetDllName(String ns) public string GetDllName(string ns)
{ {
return (String) dlls[ns]; return (string) dlls[ns];
} }
public String GetMarshalType(String c_type) public string GetMarshalType(string c_type)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (simple_types.ContainsKey(c_type)) { if (simple_types.ContainsKey(c_type)) {
return (String) simple_types[c_type]; return (string) simple_types[c_type];
} else if (complex_types.ContainsKey(c_type)) { } else if (complex_types.ContainsKey(c_type)) {
IGeneratable gen = (IGeneratable) complex_types[c_type]; IGeneratable gen = (IGeneratable) complex_types[c_type];
return gen.MarshalType; return gen.MarshalType;
@ -160,7 +160,7 @@ namespace GtkSharp.Generation {
} }
} }
public String CallByName(String c_type, String var_name) public string CallByName(string c_type, string var_name)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (simple_types.ContainsKey(c_type)) { if (simple_types.ContainsKey(c_type)) {
@ -173,7 +173,7 @@ namespace GtkSharp.Generation {
} }
} }
public bool IsBoxed(String c_type) public bool IsBoxed(string c_type)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (complex_types.ContainsKey(c_type)) { if (complex_types.ContainsKey(c_type)) {
@ -185,7 +185,7 @@ namespace GtkSharp.Generation {
return false; return false;
} }
public bool IsInterface(String c_type) public bool IsInterface(string c_type)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (complex_types.ContainsKey(c_type)) { if (complex_types.ContainsKey(c_type)) {
@ -197,7 +197,7 @@ namespace GtkSharp.Generation {
return false; return false;
} }
public bool IsObject(String c_type) public bool IsObject(string c_type)
{ {
c_type = Trim(c_type); c_type = Trim(c_type);
if (complex_types.ContainsKey(c_type)) { if (complex_types.ContainsKey(c_type)) {