Browse Source

Added better generation of field properties.

pull/1/head
triton 12 years ago
parent
commit
ac7b50bbf9
  1. 8
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  2. 80
      src/Generator/Generators/CLI/CLISourcesTemplate.cs

8
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -436,7 +436,13 @@ namespace Cxxi.Generators.CLI
{ {
var type = field.Type.Visit(Type.TypePrinter, field.QualifiedType.Qualifiers); var type = field.Type.Visit(Type.TypePrinter, field.QualifiedType.Qualifiers);
WriteLine("property {0} {1};", type, field.Name); WriteLine("property {0} {1}", type, field.Name);
WriteStartBraceIndent();
WriteLine("{0} get();", type);
WriteLine("void set({0});", type);
WriteCloseBraceIndent();
} }
public void GenerateMethod(Method method) public void GenerateMethod(Method method)

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

@ -136,6 +136,17 @@ namespace Cxxi.Generators.CLI
NewLine(); NewLine();
} }
if (@class.IsRefType)
{
foreach (var field in @class.Fields)
{
if (CheckIgnoreField(@class, field))
continue;
GenerateFieldProperty(field);
}
}
foreach (var @event in @class.Events) foreach (var @event in @class.Events)
{ {
GenerateDeclarationCommon(@event); GenerateDeclarationCommon(@event);
@ -149,6 +160,75 @@ namespace Cxxi.Generators.CLI
} }
} }
private void GenerateFieldProperty(Field field)
{
var @class = field.Class;
GenerateFieldPropertyGetter(field, @class);
GenerateFieldPropertySetter(field, @class);
}
private void GenerateFieldPropertySetter(Field field, Class @class)
{
WriteLine("void {0}::{1}::set({2} value)", QualifiedIdentifier(@class),
field.Name, field.Type);
WriteStartBraceIndent();
var param = new Parameter
{
Name = "value",
QualifiedType = field.QualifiedType
};
var ctx = new MarshalContext(Driver)
{
Parameter = param,
ArgName = param.Name,
};
var marshal = new CLIMarshalManagedToNativePrinter(Driver.TypeDatabase,
ctx);
param.Visit(marshal);
var variable = string.Format("((::{0}*)NativePtr)->{1}",
@class.QualifiedOriginalName, field.OriginalName);
if (!string.IsNullOrWhiteSpace(marshal.SupportBefore))
WriteLine(marshal.SupportBefore);
WriteLine("{0} = {1};", variable, marshal.Return);
if (!string.IsNullOrWhiteSpace(marshal.SupportAfter))
WriteLine(marshal.SupportAfter);
WriteCloseBraceIndent();
NewLine();
}
private void GenerateFieldPropertyGetter(Field field, Class @class)
{
WriteLine("{0} {1}::{2}::get()", field.Type, QualifiedIdentifier(@class),
field.Name);
WriteStartBraceIndent();
var variable = string.Format("((::{0}*)NativePtr)->{1}",
@class.QualifiedOriginalName, field.OriginalName);
var ctx = new MarshalContext(Driver)
{
ReturnVarName = variable,
ReturnType = field.Type
};
var marshal = new CLIMarshalNativeToManagedPrinter(Driver, ctx);
field.Visit(marshal);
WriteLine("return {0};", marshal.Return);
WriteCloseBraceIndent();
NewLine();
}
private void GenerateEvent(Event @event, Class @class) private void GenerateEvent(Event @event, Class @class)
{ {
GenerateEventAdd(@event, @class); GenerateEventAdd(@event, @class);

Loading…
Cancel
Save