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>
* */makefile : add make linux target.

View file

@ -2,7 +2,7 @@
//
// Author: Mike Kestner <mkestner@speakeasy.net>
//
// (c) 2001 Mike Kestner
// (c) 2002 Mike Kestner
namespace GtkSharp.Generation {
@ -45,22 +45,67 @@ namespace GtkSharp.Generation {
public String MarshalType {
get
{
return "";
return QualifiedName;
}
}
public String CallByName (String var_name)
{
return "";
return var_name;
}
public String FromNative(String var)
{
return "";
return var;
}
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;
string dir = ".." + sep + ns.ToLower() + sep + "generated";
if (!Directory.Exists(dir)) {
@ -72,31 +117,40 @@ namespace GtkSharp.Generation {
StreamWriter sw = new StreamWriter (stream);
sw.WriteLine ("// Generated File. Do not modify.");
sw.WriteLine ("// <c> 2001 Mike Kestner");
sw.WriteLine ("// <c> 2001-2002 Mike Kestner");
sw.WriteLine ();
sw.WriteLine ("namespace " + ns + " {");
sw.WriteLine ();
sw.WriteLine ("\tusing System;");
sw.WriteLine ("\tpublic delegate " + s_ret + " " + Name + "(" + parmstr + ");");
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.Flush();
sw.Close();
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 ("gshort", "short");
simple_types.Add ("guint32", "uint");
simple_types.Add ("const-gchar", "String");
simple_types.Add ("gchar", "String");
simple_types.Add ("const-gchar", "string");
simple_types.Add ("gchar", "string");
simple_types.Add ("GObject", "GLib.Object");
simple_types.Add ("gfloat", "float");
simple_types.Add ("gdouble", "double");
@ -36,7 +36,7 @@ namespace GtkSharp.Generation {
simple_types.Add ("gint32", "int");
simple_types.Add ("guint16", "ushort");
simple_types.Add ("guint1", "bool");
simple_types.Add ("gpointer", "IntPtr");
simple_types.Add ("gpointer", "System.IntPtr");
simple_types.Add ("guchar", "byte");
simple_types.Add ("GValue", "GLib.Value");
simple_types.Add ("GtkType", "int");
@ -47,23 +47,23 @@ namespace GtkSharp.Generation {
simple_types.Add ("char", "char");
simple_types.Add ("double", "double");
simple_types.Add ("float", "float");
simple_types.Add ("gunichar", "String");
simple_types.Add ("gunichar", "string");
simple_types.Add ("uint1", "bool");
simple_types.Add ("GPtrArray", "IntPtr[]");
simple_types.Add ("GPtrArray", "System.IntPtr[]");
simple_types.Add ("GType", "int");
// FIXME: These ought to be handled properly.
simple_types.Add ("GList", "IntPtr");
simple_types.Add ("GMemChunk", "IntPtr");
simple_types.Add ("GTimeVal", "IntPtr");
simple_types.Add ("GClosure", "IntPtr");
simple_types.Add ("GArray", "IntPtr");
simple_types.Add ("GData", "IntPtr");
simple_types.Add ("GList", "System.IntPtr");
simple_types.Add ("GMemChunk", "System.IntPtr");
simple_types.Add ("GTimeVal", "System.IntPtr");
simple_types.Add ("GClosure", "System.IntPtr");
simple_types.Add ("GArray", "System.IntPtr");
simple_types.Add ("GData", "System.IntPtr");
simple_types.Add ("GTypeModule", "GLib.Object");
simple_types.Add ("GSList", "GLib.SList");
simple_types.Add ("GHashTable", "IntPtr");
simple_types.Add ("va_list", "IntPtr");
simple_types.Add ("GParamSpec", "IntPtr");
simple_types.Add ("GHashTable", "System.IntPtr");
simple_types.Add ("va_list", "System.IntPtr");
simple_types.Add ("GParamSpec", "System.IntPtr");
dlls = new Hashtable();
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);
return trim_type;
}
public String FromNative(String c_type, String val)
public string FromNative(string c_type, string val)
{
c_type = Trim(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);
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)) {
IGeneratable gen = (IGeneratable) complex_types[c_type];
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);
if (simple_types.ContainsKey(c_type)) {
String stype = (String) simple_types[c_type];
string stype = (string) simple_types[c_type];
int dotidx = stype.IndexOf(".");
if (dotidx == -1) {
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);
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)) {
IGeneratable gen = (IGeneratable) complex_types[c_type];
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);
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);
if (complex_types.ContainsKey(c_type)) {
@ -185,7 +185,7 @@ namespace GtkSharp.Generation {
return false;
}
public bool IsInterface(String c_type)
public bool IsInterface(string c_type)
{
c_type = Trim(c_type);
if (complex_types.ContainsKey(c_type)) {
@ -197,7 +197,7 @@ namespace GtkSharp.Generation {
return false;
}
public bool IsObject(String c_type)
public bool IsObject(string c_type)
{
c_type = Trim(c_type);
if (complex_types.ContainsKey(c_type)) {