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>
|
2002-03-29 Mike Kestner <mkestner@speakeasy.net>
|
||||||
|
|
||||||
* */makefile : add make linux target.
|
* */makefile : add make linux target.
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in a new issue