public void GenerateClassGenericMethods(Class @class) { Indent(); foreach (var template in @class.Templates) { if (!template.IsGenerated) { continue; } var functionTemplate = template as FunctionTemplate; if (functionTemplate == null) { continue; } PushBlock(BlockKind.Template); var function = functionTemplate.TemplatedFunction; var typePrinter = new CLITypePrinter(Context); typePrinter.PushContext(TypePrinterContextKind.Template); var retType = function.ReturnType.Visit(typePrinter); var typeNames = ""; var paramNames = template.Parameters.Select(param => param.Name).ToList(); if (paramNames.Any()) { typeNames = "typename " + string.Join(", typename ", paramNames); } Write("generic<{0}>", typeNames); // Process the generic type constraints var constraints = new List <string>(); foreach (var param in template.Parameters.OfType <TypeTemplateParameter>()) { if (string.IsNullOrWhiteSpace(param.Constraint)) { continue; } constraints.Add(string.Format("{0} : {1}", param.Name, param.Constraint)); } if (constraints.Any()) { Write(" where {0}", string.Join(", ", constraints)); } NewLine(); WriteLine("{0} {1}({2});", retType, function.Name, GenerateParametersList(function.Parameters)); PopBlock(NewLineKind.BeforeNextBlock); } Unindent(); }
public void GenerateClassGenericMethods(Class @class) { var printer = TypePrinter as CLITypePrinter; var oldCtx = printer.Context; PushIndent(); foreach (var template in @class.Templates) { if (template.Ignore) { continue; } var functionTemplate = template as FunctionTemplate; if (functionTemplate == null) { continue; } var function = functionTemplate.TemplatedFunction; var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, Declaration = template }; printer.Context = typeCtx; var typePrinter = new CLITypePrinter(Driver, typeCtx); var retType = function.ReturnType.Type.Visit(typePrinter, function.ReturnType.Qualifiers); var typeNamesStr = ""; var paramNames = template.Parameters.Select(param => param.Name).ToList(); if (paramNames.Any()) { typeNamesStr = "typename " + string.Join(", typename ", paramNames); } WriteLine("generic<{0}>", typeNamesStr); WriteLine("{0} {1}({2});", retType, SafeIdentifier(function.Name), GenerateParametersList(function.Parameters)); } PopIndent(); printer.Context = oldCtx; }
private void GenerateEventRaise(Event @event, Class @class) { var typePrinter = new CLITypePrinter(Context); var args = typePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void {0}::{1}::raise({2})", QualifiedIdentifier(@class), @event.Name, args); WriteOpenBraceAndIndent(); var paramNames = @event.Parameters.Select(param => param.Name).ToList(); WriteLine("_{0}({1});", @event.Name, string.Join(", ", paramNames)); UnindentAndWriteCloseBrace(); }
private void GenerateFunctionTemplate(FunctionTemplate template) { var printer = TypePrinter; var oldCtx = printer.TypePrinterContext; PushBlock(CLIBlockKind.Template); var function = template.TemplatedFunction; var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, Declaration = template }; printer.TypePrinterContext = typeCtx; var typePrinter = new CLITypePrinter(Context, typeCtx); var retType = function.ReturnType.Type.Visit(typePrinter, function.ReturnType.Qualifiers); var typeNames = ""; var paramNames = template.Parameters.Select(param => param.Name).ToList(); if (paramNames.Any()) { typeNames = "typename " + string.Join(", typename ", paramNames); } WriteLine("generic<{0}>", typeNames); WriteLine("{0} {1}::{2}({3})", retType, QualifiedIdentifier(function.Namespace), function.Name, GenerateParametersList(function.Parameters)); WriteStartBraceIndent(); var @class = function.Namespace as Class; GenerateFunctionCall(function, @class); WriteCloseBraceIndent(); NewLine(); PopBlock(NewLineKind.BeforeNextBlock); printer.TypePrinterContext = oldCtx; }
public override void GenerateClassEvents(Class @class) { foreach (var @event in @class.Events) { if ([email protected]) { continue; } typePrinter.PushContext(TypePrinterContextKind.Native); var cppArgs = typePrinter.VisitParameters(@event.Parameters, hasNames: true); typePrinter.PopContext(); WriteLine("private:"); Indent(); var delegateName = string.Format("_{0}Delegate", @event.Name); WriteLine("delegate void {0}({1});", delegateName, cppArgs); WriteLine("{0}^ {0}Instance;", delegateName); WriteLine("void _{0}Raise({1});", @event.Name, cppArgs); WriteLine("{0} _{1};", @event.Type, @event.Name); Unindent(); WriteLine("public:"); Indent(); WriteLine("event {0} {1}", @event.Type, @event.Name); WriteOpenBraceAndIndent(); WriteLine("void add({0} evt);", @event.Type); WriteLine("void remove({0} evt);", @event.Type); var cliTypePrinter = new CLITypePrinter(Context); var cliArgs = cliTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void raise({0});", cliArgs); UnindentAndWriteCloseBrace(); Unindent(); } }
private void GenerateFunctionTemplate(FunctionTemplate template, Class @class) { var printer = TypePrinter as CLITypePrinter; var oldCtx = printer.Context; var function = template.TemplatedFunction; var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, Declaration = template }; printer.Context = typeCtx; var typePrinter = new CLITypePrinter(Driver, typeCtx); var retType = function.ReturnType.Type.Visit(typePrinter, function.ReturnType.Qualifiers); var typeNamesStr = ""; var paramNames = template.Parameters.Select(param => param.Name).ToList(); if (paramNames.Any()) { typeNamesStr = "typename " + string.Join(", typename ", paramNames); } WriteLine("generic<{0}>", typeNamesStr); WriteLine("{0} {1}::{2}({3})", retType, QualifiedIdentifier(@class), SafeIdentifier(function.Name), GenerateParametersList(function.Parameters)); WriteStartBraceIndent(); GenerateFunctionCall(function, @class); WriteCloseBraceIndent(); NewLine(); printer.Context = oldCtx; }
public void GenerateClassEvents(Class @class) { foreach (var @event in @class.Events) { if ([email protected]) { continue; } var cppTypePrinter = new CppTypePrinter(); var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("private:"); PushIndent(); var delegateName = string.Format("_{0}Delegate", @event.Name); WriteLine("delegate void {0}({1});", delegateName, cppArgs); WriteLine("{0}^ {0}Instance;", delegateName); WriteLine("void _{0}Raise({1});", @event.Name, cppArgs); WriteLine("{0} _{1};", @event.Type, @event.Name); PopIndent(); WriteLine("public:"); PushIndent(); WriteLine("event {0} {1}", @event.Type, @event.Name); WriteStartBraceIndent(); WriteLine("void add({0} evt);", @event.Type); WriteLine("void remove({0} evt);", @event.Type); var cliTypePrinter = new CLITypePrinter(Context); var cliArgs = cliTypePrinter.VisitParameters(@event.Parameters, hasNames: true); WriteLine("void raise({0});", cliArgs); WriteCloseBraceIndent(); PopIndent(); } }
private void GenerateFunctionTemplate(FunctionTemplate template) { PushBlock(BlockKind.Template); var function = template.TemplatedFunction; var typePrinter = new CLITypePrinter(Context) { Declaration = template }; typePrinter.PushContext(TypePrinterContextKind.Template); var retType = function.ReturnType.Visit(typePrinter); var typeNames = ""; var paramNames = template.Parameters.Select(param => param.Name).ToList(); if (paramNames.Any()) { typeNames = "typename " + string.Join(", typename ", paramNames); } WriteLine("generic<{0}>", typeNames); WriteLine("{0} {1}::{2}({3})", retType, QualifiedIdentifier(function.Namespace), function.Name, GenerateParametersList(function.Parameters)); WriteOpenBraceAndIndent(); var @class = function.Namespace as Class; GenerateFunctionCall(function, @class); UnindentAndWriteCloseBrace(); NewLine(); PopBlock(NewLineKind.BeforeNextBlock); }
private string ToCLITypeName(Declaration decl) { var typePrinter = new CLITypePrinter(Context.Driver); return(typePrinter.VisitDeclaration(decl)); }
protected CLITemplate(BindingContext context, IEnumerable <TranslationUnit> units) : base(context, units) { TypePrinter = new CLITypePrinter(context); Includes = new HashSet <Include>(); }
protected CLITextTemplate(Driver driver, IEnumerable <TranslationUnit> units) : base(driver, units) { TypePrinter = new CLITypePrinter(driver); Includes = new HashSet <Include>(); }
protected CLITextTemplate(Driver driver, TranslationUnit unit) : base(driver, unit) { TypePrinter = new CLITypePrinter(driver); Includes = new HashSet <Include>(); }
public CLIGenerator(Driver driver) : base(driver) { typePrinter = new CLITypePrinter(driver); Type.TypePrinterDelegate += type => type.Visit(typePrinter); }
public CLIGenerator(BindingContext context) : base(context) { typePrinter = new CLITypePrinter(context); }
public CLIGenerator(Driver driver) : base(driver) { typePrinter = new CLITypePrinter(driver); }
public void GenerateClassGenericMethods(Class @class) { var printer = TypePrinter; var oldCtx = printer.Context; PushIndent(); foreach (var template in @class.Templates) { if (template.Ignore) { continue; } var functionTemplate = template as FunctionTemplate; if (functionTemplate == null) { continue; } PushBlock(CLIBlockKind.Template); var function = functionTemplate.TemplatedFunction; var typeCtx = new CLITypePrinterContext() { Kind = TypePrinterContextKind.Template, Declaration = template }; printer.Context = typeCtx; var typePrinter = new CLITypePrinter(Driver, typeCtx); var retType = function.ReturnType.Type.Visit(typePrinter, function.ReturnType.Qualifiers); var typeNames = ""; var paramNames = template.Parameters.Select(param => param.Name).ToList(); if (paramNames.Any()) { typeNames = "typename " + string.Join(", typename ", paramNames); } Write("generic<{0}>", typeNames); // Process the generic type constraints var constraints = new List <string>(); foreach (var param in template.Parameters) { if (string.IsNullOrWhiteSpace(param.Constraint)) { continue; } constraints.Add(string.Format("{0} : {1}", param.Name, param.Constraint)); } if (constraints.Any()) { Write(" where {0}", string.Join(", ", constraints)); } NewLine(); WriteLine("{0} {1}({2});", retType, SafeIdentifier(function.Name), GenerateParametersList(function.Parameters)); PopBlock(NewLineKind.BeforeNextBlock); } PopIndent(); printer.Context = oldCtx; }