Browse Source

Pushed driver into MarshalContext

pull/1/head
marcos henrich 13 years ago
parent
commit
a4d066878c
  1. 31
      src/Generator/Generators/CLI/CLIMarshal.cs
  2. 16
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  3. 3
      src/Generator/Types/TypeMap.cs

31
src/Generator/Generators/CLI/CLIMarshal.cs

@ -7,11 +7,9 @@ namespace Cxxi.Generators.CLI
public abstract class MarshalPrinter : ITypeVisitor<bool>, IDeclVisitor<bool> public abstract class MarshalPrinter : ITypeVisitor<bool>, IDeclVisitor<bool>
{ {
public MarshalContext Context { get; private set; } public MarshalContext Context { get; private set; }
public Driver Driver { get; private set; }
protected MarshalPrinter(Driver driver, MarshalContext ctx) protected MarshalPrinter(MarshalContext ctx)
{ {
Driver = driver;
Context = ctx; Context = ctx;
} }
@ -45,8 +43,8 @@ namespace Cxxi.Generators.CLI
public class CLIMarshalNativeToManagedPrinter : MarshalPrinter public class CLIMarshalNativeToManagedPrinter : MarshalPrinter
{ {
public CLIMarshalNativeToManagedPrinter(Driver driver, MarshalContext marshalContext) public CLIMarshalNativeToManagedPrinter(MarshalContext marshalContext)
: base(driver,marshalContext) : base(marshalContext)
{ {
Context.MarshalToManaged = this; Context.MarshalToManaged = this;
} }
@ -150,7 +148,7 @@ namespace Cxxi.Generators.CLI
var decl = typedef.Declaration; var decl = typedef.Declaration;
TypeMap typeMap = null; TypeMap typeMap = null;
if (Driver.TypeDatabase.FindTypeMap(decl, out typeMap)) if (Context.Driver.TypeDatabase.FindTypeMap(decl, out typeMap))
{ {
typeMap.Type = typedef; typeMap.Type = typedef;
typeMap.CLIMarshalToManaged(Context); typeMap.CLIMarshalToManaged(Context);
@ -175,7 +173,7 @@ namespace Cxxi.Generators.CLI
TypeQualifiers quals) TypeQualifiers quals)
{ {
TypeMap typeMap; TypeMap typeMap;
if (Driver.TypeDatabase.FindTypeMap(template, out typeMap)) if (Context.Driver.TypeDatabase.FindTypeMap(template, out typeMap))
{ {
typeMap.Type = template; typeMap.Type = template;
typeMap.CLIMarshalToManaged(Context); typeMap.CLIMarshalToManaged(Context);
@ -220,8 +218,8 @@ namespace Cxxi.Generators.CLI
public string QualifiedIdentifier(Declaration decl) public string QualifiedIdentifier(Declaration decl)
{ {
if (Driver.Options.GenerateLibraryNamespace) if (Context.Driver.Options.GenerateLibraryNamespace)
return string.Format("{0}::{1}", Driver.Options.OutputNamespace, return string.Format("{0}::{1}", Context.Driver.Options.OutputNamespace,
decl.QualifiedName); decl.QualifiedName);
return string.Format("{0}", decl.QualifiedName); return string.Format("{0}", decl.QualifiedName);
} }
@ -275,7 +273,7 @@ namespace Cxxi.Generators.CLI
private string ToCLITypeName(Declaration decl) private string ToCLITypeName(Declaration decl)
{ {
var typePrinter = new CLITypePrinter(Driver); var typePrinter = new CLITypePrinter(Context.Driver);
return typePrinter.VisitDeclaration(decl); return typePrinter.VisitDeclaration(decl);
} }
@ -315,8 +313,8 @@ namespace Cxxi.Generators.CLI
public readonly TextGenerator VarPrefix; public readonly TextGenerator VarPrefix;
public readonly TextGenerator ArgumentPrefix; public readonly TextGenerator ArgumentPrefix;
public CLIMarshalManagedToNativePrinter(Driver driver, MarshalContext ctx) public CLIMarshalManagedToNativePrinter(MarshalContext ctx)
: base(driver,ctx) : base(ctx)
{ {
VarPrefix = new TextGenerator(); VarPrefix = new TextGenerator();
ArgumentPrefix = new TextGenerator(); ArgumentPrefix = new TextGenerator();
@ -440,7 +438,7 @@ namespace Cxxi.Generators.CLI
var decl = typedef.Declaration; var decl = typedef.Declaration;
TypeMap typeMap = null; TypeMap typeMap = null;
if (Driver.TypeDatabase.FindTypeMap(decl, out typeMap)) if (Context.Driver.TypeDatabase.FindTypeMap(decl, out typeMap))
{ {
typeMap.CLIMarshalToNative(Context); typeMap.CLIMarshalToNative(Context);
return typeMap.IsValueType; return typeMap.IsValueType;
@ -466,7 +464,7 @@ namespace Cxxi.Generators.CLI
TypeQualifiers quals) TypeQualifiers quals)
{ {
TypeMap typeMap = null; TypeMap typeMap = null;
if (Driver.TypeDatabase.FindTypeMap(template, out typeMap)) if (Context.Driver.TypeDatabase.FindTypeMap(template, out typeMap))
{ {
typeMap.Type = template; typeMap.Type = template;
typeMap.CLIMarshalToNative(Context); typeMap.CLIMarshalToNative(Context);
@ -513,7 +511,7 @@ namespace Cxxi.Generators.CLI
private void MarshalRefClass(Class @class) private void MarshalRefClass(Class @class)
{ {
TypeMap typeMap = null; TypeMap typeMap = null;
if (Driver.TypeDatabase.FindTypeMap(@class, out typeMap)) if (Context.Driver.TypeDatabase.FindTypeMap(@class, out typeMap))
{ {
typeMap.CLIMarshalToNative(Context); typeMap.CLIMarshalToNative(Context);
return; return;
@ -548,7 +546,6 @@ namespace Cxxi.Generators.CLI
Context.SupportBefore.WriteLine("auto {0} = ::{1}();", marshalVar, Context.SupportBefore.WriteLine("auto {0} = ::{1}();", marshalVar,
@class.QualifiedOriginalName); @class.QualifiedOriginalName);
Context.SupportBefore.PushIndent();
MarshalValueClassFields(@class, marshalVar); MarshalValueClassFields(@class, marshalVar);
@ -586,7 +583,7 @@ namespace Cxxi.Generators.CLI
ParameterIndex = Context.ParameterIndex++ ParameterIndex = Context.ParameterIndex++
}; };
var marshal = new CLIMarshalManagedToNativePrinter(Driver, marshalCtx); var marshal = new CLIMarshalManagedToNativePrinter(marshalCtx);
field.Visit(marshal); field.Visit(marshal);
Context.ParameterIndex = marshalCtx.ParameterIndex; Context.ParameterIndex = marshalCtx.ParameterIndex;

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

@ -186,7 +186,7 @@ namespace Cxxi.Generators.CLI
ArgName = param.Name, ArgName = param.Name,
}; };
var marshal = new CLIMarshalManagedToNativePrinter(Driver, ctx); var marshal = new CLIMarshalManagedToNativePrinter(ctx);
param.Visit(marshal); param.Visit(marshal);
var variable = string.Format("((::{0}*)NativePtr)->{1}", var variable = string.Format("((::{0}*)NativePtr)->{1}",
@ -219,7 +219,7 @@ namespace Cxxi.Generators.CLI
ReturnType = field.Type ReturnType = field.Type
}; };
var marshal = new CLIMarshalNativeToManagedPrinter(Driver, ctx); var marshal = new CLIMarshalNativeToManagedPrinter(ctx);
field.Visit(marshal); field.Visit(marshal);
WriteLine("return {0};", marshal.Context.Return); WriteLine("return {0};", marshal.Context.Return);
@ -327,7 +327,7 @@ namespace Cxxi.Generators.CLI
ReturnType = param.Type ReturnType = param.Type
}; };
var marshal = new CLIMarshalNativeToManagedPrinter(Driver, ctx); var marshal = new CLIMarshalNativeToManagedPrinter(ctx);
param.Visit(marshal); param.Visit(marshal);
returns.Add(marshal.Context.Return); returns.Add(marshal.Context.Return);
@ -410,7 +410,7 @@ namespace Cxxi.Generators.CLI
ReturnType = field.Type ReturnType = field.Type
}; };
var marshal = new CLIMarshalNativeToManagedPrinter(Driver, ctx); var marshal = new CLIMarshalNativeToManagedPrinter(ctx);
field.Visit(marshal); field.Visit(marshal);
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore)) if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore))
@ -503,7 +503,7 @@ namespace Cxxi.Generators.CLI
ArgName = param.Name, ArgName = param.Name,
}; };
var marshal = new CLIMarshalManagedToNativePrinter(Driver, ctx); var marshal = new CLIMarshalManagedToNativePrinter(ctx);
param.Visit(marshal); param.Visit(marshal);
if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore)) if (!string.IsNullOrWhiteSpace(marshal.Context.SupportBefore))
@ -541,7 +541,7 @@ namespace Cxxi.Generators.CLI
ReturnType = field.Type ReturnType = field.Type
}; };
var marshal = new CLIMarshalNativeToManagedPrinter(Driver, ctx); var marshal = new CLIMarshalNativeToManagedPrinter(ctx);
field.Visit(marshal); field.Visit(marshal);
WriteLine("this->{0} = {1};", field.Name, marshal.Context.Return); WriteLine("this->{0} = {1};", field.Name, marshal.Context.Return);
@ -625,7 +625,7 @@ namespace Cxxi.Generators.CLI
ReturnType = retType ReturnType = retType
}; };
var marshal = new CLIMarshalNativeToManagedPrinter(Driver, ctx); var marshal = new CLIMarshalNativeToManagedPrinter(ctx);
function.ReturnType.Visit(marshal); function.ReturnType.Visit(marshal);
WriteLine("{0};", marshal.Context.Return); WriteLine("{0};", marshal.Context.Return);
@ -681,7 +681,7 @@ namespace Cxxi.Generators.CLI
Function = function Function = function
}; };
var marshal = new CLIMarshalManagedToNativePrinter(Driver, ctx); var marshal = new CLIMarshalManagedToNativePrinter(ctx);
param.Visit(marshal); param.Visit(marshal);

3
src/Generator/Types/TypeMap.cs

@ -9,12 +9,13 @@ namespace Cxxi.Types
{ {
public MarshalContext(Driver driver) public MarshalContext(Driver driver)
{ {
Driver = driver;
SupportBefore = new TextGenerator(); SupportBefore = new TextGenerator();
SupportAfter = new TextGenerator(); SupportAfter = new TextGenerator();
Return = new TextGenerator(); Return = new TextGenerator();
} }
public Driver Driver { get; set; } public Driver Driver { get; private set; }
public CLIMarshalNativeToManagedPrinter MarshalToManaged; public CLIMarshalNativeToManagedPrinter MarshalToManaged;
public CLIMarshalManagedToNativePrinter MarshalToNative; public CLIMarshalManagedToNativePrinter MarshalToNative;

Loading…
Cancel
Save