Browse Source

Refactored the variable wrapping code to work with pointers.

pull/1/head
triton 12 years ago
parent
commit
6d8af9776f
  1. 45
      src/Generator/Generators/CSharp/CSharpTextTemplate.cs

45
src/Generator/Generators/CSharp/CSharpTextTemplate.cs

@ -592,27 +592,17 @@ namespace CppSharp.Generators.CSharp
Setter Setter
} }
private string GetPropertyLocation<T>(T decl, PropertyMethodKind kind, private string GetVariableLocation(Variable @var)
out bool isRefClass) where T : Declaration, ITypedDecl
{ {
isRefClass = false; string symbol;
if (!FindMangledDeclSymbol(@var, out symbol))
if (decl is Variable) return string.Empty;
{
var @var = decl as Variable;
string symbol;
if (!FindMangledDeclSymbol(@var, out symbol))
return string.Empty;
NativeLibrary library;
Driver.LibrarySymbols.FindLibraryBySymbol(symbol, out library);
return string.Format("CppSharp.SymbolResolver.ResolveSymbol(\"{0}\", \"{1}\")", NativeLibrary library;
Path.GetFileNameWithoutExtension(library.FileName), symbol); Driver.LibrarySymbols.FindLibraryBySymbol(symbol, out library);
}
throw new NotSupportedException(); return string.Format("CppSharp.SymbolResolver.ResolveSymbol(\"{0}\", \"{1}\")",
Path.GetFileNameWithoutExtension(library.FileName), symbol);
} }
private void GeneratePropertySetter<T>(T decl, Class @class) private void GeneratePropertySetter<T>(T decl, Class @class)
@ -699,17 +689,24 @@ namespace CppSharp.Generators.CSharp
WriteLine("return {0};", marshal.Context.Return); WriteLine("return {0};", marshal.Context.Return);
} }
else else if (decl is Variable)
{ {
bool isRefClass; var @var = decl as Variable;
@return = GetPropertyLocation(decl, PropertyMethodKind.Getter, var location = GetVariableLocation(@var);
out isRefClass);
var typePrinter = TypePrinter as CSharpTypePrinter;
typePrinter.PushContext(CSharpTypePrinterContextKind.Native);
WriteLine("var {0} = ({1}*){2};", Helpers.GeneratedIdentifier("ptr"),
@var.Type, location);
typePrinter.PopContext();
var ctx = new CSharpMarshalContext(Driver) var ctx = new CSharpMarshalContext(Driver)
{ {
ArgName = decl.Name, ArgName = decl.Name,
ReturnVarName = @return, ReturnVarName = "*" + Helpers.GeneratedIdentifier("ptr"),
ReturnType = decl.QualifiedType ReturnType = new QualifiedType(var.Type)
}; };
var marshal = new CSharpMarshalNativeToManagedPrinter(ctx); var marshal = new CSharpMarshalNativeToManagedPrinter(ctx);

Loading…
Cancel
Save