mirror of
https://github.com/Ryujinx/Opentk.git
synced 2024-12-25 05:25:31 +00:00
* CppSpecWriter.cs: FIxed handling of enum parameters.
Moved delegates to private structures.
This commit is contained in:
parent
3594036be4
commit
a5924bb414
|
@ -84,7 +84,6 @@ namespace Bind
|
||||||
sw.WriteLine("struct {0}", Settings.GLClass);
|
sw.WriteLine("struct {0}", Settings.GLClass);
|
||||||
sw.WriteLine("{");
|
sw.WriteLine("{");
|
||||||
sw.Indent();
|
sw.Indent();
|
||||||
WriteDelegates(sw, delegates);
|
|
||||||
WriteWrappers(sw, wrappers, Type.CSTypes);
|
WriteWrappers(sw, wrappers, Type.CSTypes);
|
||||||
sw.Unindent();
|
sw.Unindent();
|
||||||
sw.WriteLine("};");
|
sw.WriteLine("};");
|
||||||
|
@ -161,9 +160,9 @@ namespace Bind
|
||||||
foreach (var ext in wrappers.Keys)
|
foreach (var ext in wrappers.Keys)
|
||||||
{
|
{
|
||||||
if (ext == "Core")
|
if (ext == "Core")
|
||||||
sw.WriteLine("{0}::Init()", Settings.GLClass);
|
sw.WriteLine("{0}::Delegates::Init()", Settings.GLClass);
|
||||||
else
|
else
|
||||||
sw.WriteLine("{0}::{1}::Init()", Settings.GLClass, ext);
|
sw.WriteLine("{0}::{1}::Delegates::Init()", Settings.GLClass, ext);
|
||||||
sw.WriteLine("{");
|
sw.WriteLine("{");
|
||||||
sw.Indent();
|
sw.Indent();
|
||||||
|
|
||||||
|
@ -199,14 +198,7 @@ namespace Bind
|
||||||
|
|
||||||
public void WriteDelegates(BindStreamWriter sw, DelegateCollection delegates)
|
public void WriteDelegates(BindStreamWriter sw, DelegateCollection delegates)
|
||||||
{
|
{
|
||||||
sw.WriteLine("private:");
|
throw new NotSupportedException();
|
||||||
|
|
||||||
// Avoid multiple definitions of the same function
|
|
||||||
Delegate last_delegate = null;
|
|
||||||
foreach (var d in delegates)
|
|
||||||
{
|
|
||||||
WriteDelegate(sw, d.Value, ref last_delegate);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteDelegate(BindStreamWriter sw, Delegate d, ref Delegate last_delegate)
|
static void WriteDelegate(BindStreamWriter sw, Delegate d, ref Delegate last_delegate)
|
||||||
|
@ -215,7 +207,8 @@ namespace Bind
|
||||||
if (d != last_delegate)
|
if (d != last_delegate)
|
||||||
{
|
{
|
||||||
last_delegate = d;
|
last_delegate = d;
|
||||||
sw.WriteLine("typedef {0} (*p{1}){2};", d.ReturnType, d.Name, d.Parameters);
|
var parameters = d.Parameters.ToString().Replace(".", "::");
|
||||||
|
sw.WriteLine("typedef {0} (*p{1}){2};", d.ReturnType, d.Name, parameters);
|
||||||
sw.WriteLine("static p{0} {0};", d.Name);
|
sw.WriteLine("static p{0} {0};", d.Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -226,7 +219,7 @@ namespace Bind
|
||||||
|
|
||||||
public void WriteImports(BindStreamWriter sw, DelegateCollection delegates)
|
public void WriteImports(BindStreamWriter sw, DelegateCollection delegates)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotSupportedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -236,8 +229,6 @@ namespace Bind
|
||||||
public void WriteWrappers(BindStreamWriter sw, FunctionCollection wrappers,
|
public void WriteWrappers(BindStreamWriter sw, FunctionCollection wrappers,
|
||||||
Dictionary<string, string> CSTypes)
|
Dictionary<string, string> CSTypes)
|
||||||
{
|
{
|
||||||
sw.WriteLine("public:");
|
|
||||||
|
|
||||||
foreach (string extension in wrappers.Keys)
|
foreach (string extension in wrappers.Keys)
|
||||||
{
|
{
|
||||||
if (extension != "Core")
|
if (extension != "Core")
|
||||||
|
@ -247,8 +238,6 @@ namespace Bind
|
||||||
sw.Indent();
|
sw.Indent();
|
||||||
}
|
}
|
||||||
|
|
||||||
sw.WriteLine("static void Init();");
|
|
||||||
|
|
||||||
// Avoid multiple definitions of the same function
|
// Avoid multiple definitions of the same function
|
||||||
Delegate last_delegate = null;
|
Delegate last_delegate = null;
|
||||||
|
|
||||||
|
@ -258,18 +247,36 @@ namespace Bind
|
||||||
|
|
||||||
for (var current = forward_compatible; current != deprecated; current = deprecated)
|
for (var current = forward_compatible; current != deprecated; current = deprecated)
|
||||||
{
|
{
|
||||||
|
// Write delegates
|
||||||
last_delegate = null;
|
last_delegate = null;
|
||||||
|
|
||||||
|
sw.WriteLine("private:");
|
||||||
|
sw.WriteLine("struct Delegates");
|
||||||
|
sw.WriteLine("{");
|
||||||
|
sw.Indent();
|
||||||
|
sw.WriteLine("static void Init();");
|
||||||
|
foreach (var f in current)
|
||||||
|
{
|
||||||
|
WriteDelegate(sw, f.WrappedDelegate, ref last_delegate);
|
||||||
|
}
|
||||||
|
sw.Unindent();
|
||||||
|
sw.WriteLine("}");
|
||||||
|
|
||||||
|
// Write wrappers
|
||||||
|
last_delegate = null;
|
||||||
|
sw.WriteLine("public:");
|
||||||
foreach (var f in current)
|
foreach (var f in current)
|
||||||
{
|
{
|
||||||
if (last_delegate == f.WrappedDelegate)
|
if (last_delegate == f.WrappedDelegate)
|
||||||
continue;
|
continue;
|
||||||
last_delegate = f.WrappedDelegate;
|
last_delegate = f.WrappedDelegate;
|
||||||
|
|
||||||
sw.WriteLine("static inline {0} {1}{2}", f.WrappedDelegate.Parameters,
|
var parameters = f.WrappedDelegate.Parameters.ToString().Replace(".", "::");
|
||||||
f.TrimmedName, f.WrappedDelegate.Parameters);
|
sw.WriteLine("static inline {0} {1}{2}", f.WrappedDelegate.ReturnType,
|
||||||
|
f.TrimmedName, parameters);
|
||||||
sw.WriteLine("{");
|
sw.WriteLine("{");
|
||||||
sw.Indent();
|
sw.Indent();
|
||||||
//WriteMethodBody(sw, f);
|
WriteMethodBody(sw, f);
|
||||||
sw.Unindent();
|
sw.Unindent();
|
||||||
sw.WriteLine("}");
|
sw.WriteLine("}");
|
||||||
}
|
}
|
||||||
|
@ -290,6 +297,14 @@ namespace Bind
|
||||||
sw.WriteLine("};");
|
sw.WriteLine("};");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void WriteMethodBody(BindStreamWriter sw, Function f)
|
||||||
|
{
|
||||||
|
if (f.ReturnType != null)
|
||||||
|
sw.WriteLine("return Delegates::{0}{1}", f.WrappedDelegate.Name, f.CallString());
|
||||||
|
else
|
||||||
|
sw.WriteLine("Delegates::{0}{1}", f.WrappedDelegate.Name, f.CallString());
|
||||||
|
}
|
||||||
|
|
||||||
static DocProcessor processor = new DocProcessor(Path.Combine(Settings.DocPath, Settings.DocFile));
|
static DocProcessor processor = new DocProcessor(Path.Combine(Settings.DocPath, Settings.DocFile));
|
||||||
static Dictionary<string, string> docfiles;
|
static Dictionary<string, string> docfiles;
|
||||||
void WriteDocumentation(BindStreamWriter sw, Function f)
|
void WriteDocumentation(BindStreamWriter sw, Function f)
|
||||||
|
@ -382,7 +397,11 @@ namespace Bind
|
||||||
sw.Indent();
|
sw.Indent();
|
||||||
foreach (var c in @enum.ConstantCollection.Values)
|
foreach (var c in @enum.ConstantCollection.Values)
|
||||||
{
|
{
|
||||||
|
// C++ doesn't have the concept of "unchecked", so remove this.
|
||||||
|
if (!c.Unchecked)
|
||||||
sw.WriteLine("{0},", c);
|
sw.WriteLine("{0},", c);
|
||||||
|
else
|
||||||
|
sw.WriteLine("{0},", c.ToString().Replace("unchecked", String.Empty));
|
||||||
}
|
}
|
||||||
sw.Unindent();
|
sw.Unindent();
|
||||||
sw.WriteLine("};");
|
sw.WriteLine("};");
|
||||||
|
|
Loading…
Reference in a new issue