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:
parent
356c9920ed
commit
138b6c1644
3 changed files with 107 additions and 48 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)) {
|
||||
|
|
Loading…
Reference in a new issue