Fixed IntPtr processing - real pointers (with object overloads) are now differentiated from plain IntPtr parameters (e.g. offsets). Fixed Tao bindings generation.

This commit is contained in:
the_fiddler 2007-11-10 10:28:22 +00:00
parent fdb89a25df
commit 6c86f654ed
4 changed files with 30 additions and 12 deletions

View file

@ -76,7 +76,7 @@ namespace Bind.Structures
/// <summary>
/// Gets the CLSCompliant property. True if the delegate is not CLSCompliant.
/// </summary>
public bool CLSCompliant
public virtual bool CLSCompliant
{
get
{
@ -341,7 +341,7 @@ namespace Bind.Structures
public void CreateWrappers()
{
if (this.Name.Contains("GetBoolean"))
if (this.Name.Contains("ReadPixels"))
{
}

View file

@ -81,8 +81,8 @@ namespace Bind.Structures
{
get
{
//if ((Settings.Compatibility & Settings.Legacy.NoPublicUnsafeFunctions) != Settings.Legacy.None)
// return false;
if ((Settings.Compatibility & Settings.Legacy.NoPublicUnsafeFunctions) != Settings.Legacy.None)
return false;
return base.Unsafe;
}
@ -526,18 +526,20 @@ namespace Bind.Structures
}
}
//if (!f.Unsafe && (fixed_statements.Count > 0 || fixed_statements.Count > 0))
if (fixed_statements.Count > 0)
if (!f.Unsafe || fixed_statements.Count > 0)
{
f.Body.Add("unsafe");
f.Body.Add("{");
f.Body.Indent();
}
if (fixed_statements.Count > 0)
{
f.Body.AddRange(fixed_statements);
f.Body.Add("{");
f.Body.Indent();
}
if (handle_statements.Count > 0)
{
f.Body.AddRange(handle_statements);
@ -594,11 +596,14 @@ namespace Bind.Structures
f.Body.Add("}");
}
if (fixed_statements.Count > 0)
if (!f.Unsafe || fixed_statements.Count > 0)
{
f.Body.Unindent();
f.Body.Add("}");
}
if (fixed_statements.Count > 0)
{
f.Body.Unindent();
f.Body.Add("}");
}
@ -705,6 +710,10 @@ namespace Bind.Structures
/// <param name="f">The Function to add.</param>
public void AddChecked(Function f)
{
if (f.Name.Contains("Bitmap"))
{
}
if (Bind.Structures.Function.Wrappers.ContainsKey(f.Extension))
{
int index = Bind.Structures.Function.Wrappers[f.Extension].IndexOf(f);

View file

@ -264,7 +264,7 @@ namespace Bind.Structures
Pointer = false;
WrapperType = WrapperTypes.None;
}
else if (CurrentType.ToLower().Contains("void")) /*|| CurrentType.Contains("IntPtr"))*/
else if (CurrentType.ToLower().Contains("void") || PreviousType.ToLower().Contains("void")) /*|| CurrentType.Contains("IntPtr"))*/
{
CurrentType = "IntPtr";
Pointer = false;
@ -407,7 +407,9 @@ namespace Bind.Structures
/// <summary>
/// Gets the parameter declaration string.
/// </summary>
/// <param name="override_unsafe_setting">If true, unsafe types will be used even if the Settings.Compatibility.NoPublicUnsafeFunctions flag is set.</param>
/// <param name="override_unsafe_setting">
/// If true, unsafe types will be used even if the Settings.Compatibility.NoPublicUnsafeFunctions flag is set.
/// </param>
/// <returns>The parameter list of an opengl function in the form ( [parameters] )</returns>
public string ToString(bool override_unsafe_setting)
{

View file

@ -156,7 +156,14 @@ namespace Bind.Structures
get
{
bool compliant = !(CurrentType.Contains("UInt") || CurrentType.Contains("SByte"));
return compliant && (!Pointer || CurrentType.Contains("IntPtr"));
if (Pointer)
{
compliant &= CurrentType.Contains("IntPtr"); // IntPtr's are CLSCompliant.
// If the NoPublicUnsageFunctions is set, the pointer will be CLSCompliant.
compliant |= (Settings.Compatibility & Settings.Legacy.NoPublicUnsafeFunctions) != Settings.Legacy.None;
}
return compliant;
//return compliant && (!Pointer || CurrentType.Contains("IntPtr"));
//return compliant && !(Pointer && ((Settings.Compatibility & Settings.Legacy.NoPublicUnsafeFunctions) == Settings.Legacy.None));
/*
@ -334,7 +341,7 @@ namespace Bind.Structures
Bind.Structures.Type.CSTypes.ContainsKey(CurrentType) ?
Bind.Structures.Type.CSTypes[CurrentType] : CurrentType;
if (CurrentType == "IntPtr")
if (CurrentType == "IntPtr" && String.IsNullOrEmpty(PreviousType))
Pointer = false;
}
}