public static void GenerateMembers(this IGeneratable gen, IndentWriter writer, Func <IMemberGeneratable, bool> where = null) { var array = gen.GetMemberGeneratables().Where(x => where == null || where (x)).ToArray(); for (int i = 0; i < array.Length; ++i) { var member = array [i]; // Generate pinvoke signature for a method if (!(gen is Interface) && member is INativeCallable callable) { callable.GenerateImport(gen, writer); } // Generate documentation is a member supports it. if (member is IDocumented doc) { doc.GenerateDocumentation(writer); } // Call the main member generation implementation. member.Generate(gen, writer); if (i != array.Length - 1 && member.NewlineAfterGeneration(writer.Options)) { writer.WriteLine(); } } }
void GenerateMembers(IndentWriter writer) { foreach (var member in Members) { writer.WriteDocumentation(member.Doc); writer.WriteLine(member.Name.ToCSharp() + " = " + HexFormat(member.Value) + ","); } }
public static void GenerateDocumentation(this IDocumented gen, IndentWriter writer) { if (gen.Doc is null) { return; } writer.WriteDocumentation(gen.Doc, gen is ReturnValue ? "returns" : "summary"); }
public void Generate(GenerationOptions opts, IGeneratable parent, IndentWriter writer) { writer.WriteDocumentation(Doc); // Simple uncorrect gen for now var managedType = this.GetSymbol(opts); // We need something that will tell us the equivalent C# type // including the number of pointers. // For now, generate normal info. writer.WriteLine($"{managedType.Name} {Name};"); }
public void Generate(GenerationOptions opts, IGeneratable parent, IndentWriter writer) { writer.WriteDocumentation(Doc); string value = Value; // Make this smarter, probably pass in some options and key them. if (parent is Bitfield) { value = HexFormat(value); } writer.WriteLine(Name.ToCSharp() + " = " + value + ","); }
public static string GetReturnCSharpType(this IMethodLike callable, IndentWriter writer) { var retVal = callable.ReturnValue; if (retVal == null) { return("void"); } // TODO: Handle marshalling. // Try getting the array return value, then the type one. var retSymbol = retVal.Resolve(writer.Options); return(retSymbol.CSharpType); }
public static void GenerateCallableDefinition(this INativeCallable callable, IGeneratable gen, IndentWriter writer) { callable.ReturnValue.GenerateDocumentation(writer); writer.WriteIndent(); if (!string.IsNullOrEmpty(callable.GetModifiers(gen, writer.Options)) && !(gen is Interface)) { writer.Write(callable.GetModifiers(gen, writer.Options) + " "); } var returnType = callable.GetReturnCSharpType(writer); // generate ReturnValue then Parameters var result = BuildParameters(callable, writer.Options, !callable.IsInstanceCallable(gen, writer.Options)); writer.Write($"{returnType} {callable.Name.ToCSharp ()} ({result.TypesAndNames})"); if (gen is Interface) { writer.Write(";"); writer.WriteLine(); return; } writer.WriteLine(); writer.WriteLine("{"); using (writer.Indent()) { string prefix = returnType != "void" ? "return " : string.Empty; writer.WriteLine($"{prefix}{callable.CIdentifier} ({result.Names});"); } writer.WriteLine("}"); }
static void GenerateImport(this INativeCallable callable, IGeneratable parent, IndentWriter writer) { var retType = GetReturnCSharpType(callable, writer); var parameters = BuildParameters(callable, writer.Options, appendInstanceParameters: true); // TODO: Better than using the constant string, insert a custom generatable which contains the import string as a constant. /* i.e. * static class <LibraryName>Constants * { * public const string GLib = "libglib-2.0.so"; * } */ //writer.WriteLine ($"[DllImport (\"{writer.Options.LibraryName}\", CallingConvention=CallingConvention.Cdecl)]"); writer.WriteLine($"static extern {retType} {callable.CIdentifier} ({parameters.MarshalTypesAndNames});"); writer.WriteLine(); }
public static void GenerateConstructor(this INativeCallable callable, IGeneratable parent, IndentWriter writer) { callable.ReturnValue.GenerateDocumentation(writer); var modifier = callable.GetModifiers(parent, writer.Options); var result = BuildParameters(callable, writer.Options, !callable.IsInstanceCallable(parent, writer.Options)); // FIXME, should check to see if it is deprecated writer.WriteLine($"{modifier} {parent.Name} ({result.TypesAndNames}) : base ({result.Names})"); writer.WriteLine("{"); writer.WriteLine("}"); }
public static IndentWriter GetWriter(this IGeneratable gen, GenerationOptions opts) { var path = Path.Combine(opts.DirectoryPath, gen.Name + CSharpFileExtension); return(IndentWriter.OpenWrite(path, opts).WriteHeader()); }
public IndentDisposable(IndentWriter writer) { this.writer = writer; }
public void Generate(IGeneratable parent, IndentWriter writer) { this.GenerateCallableDefinition(parent, writer); }
public static void GenerateMembers(this IGeneratable gen, GenerationOptions opts, IndentWriter writer) { var array = gen.GetMemberGeneratables().ToArray(); for (int i = 0; i < array.Length; ++i) { var member = array[i]; member.Generate(opts, gen, writer); if (i != array.Length - 1 && member.NewlineAfterGeneration(opts)) { writer.WriteLine(); } } }