Browse Source

Broke up the pass for inlines in two main functions.

Signed-off-by: Dimitar Dobrev <dpldobrev@yahoo.com>
pull/57/head
Dimitar Dobrev 12 years ago
parent
commit
70b4cff9bf
  1. 26
      src/Generator/Passes/GenerateInlinesCodePass.cs

26
src/Generator/Passes/GenerateInlinesCodePass.cs

@ -15,33 +15,45 @@ namespace CppSharp.Passes @@ -15,33 +15,45 @@ namespace CppSharp.Passes
public override bool VisitLibrary(Library library)
{
bool result = base.VisitLibrary(library);
Directory.CreateDirectory(Driver.Options.OutputDir);
WriteInlinesIncludes();
WriteInlinedSymbols();
return result;
}
private void WriteInlinesIncludes()
{
var cppBuilder = new StringBuilder();
headers.Sort();
foreach (var header in headers)
cppBuilder.AppendFormat("#include \"{0}\"\n", header);
var cpp = string.Format("{0}.cpp", Driver.Options.InlinesLibraryName);
var path = Path.Combine(Driver.Options.OutputDir, cpp);
Directory.CreateDirectory(Driver.Options.OutputDir);
File.WriteAllText(path, cppBuilder.ToString());
}
private void WriteInlinedSymbols()
{
switch (Driver.Options.Abi)
{
case CppAbi.Microsoft:
var defBuilder = new StringBuilder("EXPORTS\r\n");
for (int i = 0; i < mangledInlines.Count; i++)
defBuilder.AppendFormat(" {0} @{1}\r\n",
mangledInlines[i], i + 1);
File.WriteAllText(Path.ChangeExtension(path, "def"),
defBuilder.ToString());
mangledInlines[i], i + 1);
var def = string.Format("{0}.def", Driver.Options.InlinesLibraryName);
File.WriteAllText(Path.Combine(Driver.Options.OutputDir, def),
defBuilder.ToString());
break;
default:
var symbolsBuilder = new StringBuilder();
foreach (var mangledInline in mangledInlines)
symbolsBuilder.AppendFormat("{0}\n", mangledInline);
File.WriteAllText(Path.ChangeExtension(path, "txt"),
symbolsBuilder.ToString());
var txt = string.Format("{0}.txt", Driver.Options.InlinesLibraryName);
File.WriteAllText(Path.Combine(Driver.Options.OutputDir, txt),
symbolsBuilder.ToString());
break;
}
return result;
}
public override bool VisitTranslationUnit(TranslationUnit unit)

Loading…
Cancel
Save