Browse Source

Fixed generated CLI source code for native functions and native static methods

pull/1/head
marcos henrich 13 years ago
parent
commit
3310afee6e
  1. 35
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

35
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -653,7 +653,7 @@ namespace CppSharp.Generators.CLI
const string valueMarshalName = "_this0"; const string valueMarshalName = "_this0";
var isValueType = @class != null && @class.IsValueType; var isValueType = @class != null && @class.IsValueType;
if (isValueType) if (isValueType && !IsNativeFunctionOrStaticMethod(function))
{ {
WriteLine("auto {0} = ::{1}();", valueMarshalName, @class.QualifiedOriginalName); WriteLine("auto {0} = ::{1}();", valueMarshalName, @class.QualifiedOriginalName);
@ -672,23 +672,26 @@ namespace CppSharp.Generators.CLI
if (needsReturn) if (needsReturn)
Write("auto {0}ret = ",(function.ReturnType.Type.IsReference())? "&": string.Empty); Write("auto {0}ret = ",(function.ReturnType.Type.IsReference())? "&": string.Empty);
if (!IsNativeFunctionOrStaticMethod(function))
{
if (isValueType) if (isValueType)
{ {
Write("{0}.", valueMarshalName); Write("{0}.", valueMarshalName);
} }
else if (IsInstanceFunction(function)) else if (IsNativeMethod(function))
{ {
Write("((::{0}*)NativePtr)->", @class.QualifiedOriginalName); Write("((::{0}*)NativePtr)->", @class.QualifiedOriginalName);
} }
}
if (IsInstanceFunction(function)) if (IsNativeFunctionOrStaticMethod(function))
{ {
Write("{0}(", function.OriginalName); Write("::");
Write("{0}(", function.QualifiedOriginalName);
} }
else else
{ {
Write("::"); Write("{0}(", function.OriginalName);
Write("{0}(", function.QualifiedOriginalName);
} }
GenerateFunctionParams(@params); GenerateFunctionParams(@params);
@ -718,7 +721,7 @@ namespace CppSharp.Generators.CLI
WriteLine("{0} = {1};",param.Name,marshal.Context.Return); WriteLine("{0} = {1};",param.Name,marshal.Context.Return);
} }
if (isValueType) if (isValueType && !IsNativeFunctionOrStaticMethod(function))
{ {
GenerateStructMarshaling(@class, valueMarshalName + "."); GenerateStructMarshaling(@class, valueMarshalName + ".");
} }
@ -742,14 +745,22 @@ namespace CppSharp.Generators.CLI
} }
} }
private static bool IsInstanceFunction(Function function) private static bool IsNativeMethod(Function function)
{ {
var isInstanceFunction = false; var method = function as Method;
if (method == null)
return false;
return method.Conversion == MethodConversionKind.None;
}
private static bool IsNativeFunctionOrStaticMethod(Function function)
{
var method = function as Method; var method = function as Method;
if (method != null) if (method == null)
isInstanceFunction = method.Conversion == MethodConversionKind.None; return true;
return isInstanceFunction;
return method.IsStatic || method.Conversion != MethodConversionKind.None;
} }
public struct ParamMarshal public struct ParamMarshal

Loading…
Cancel
Save