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. 20
      src/Generator/Passes/GenerateInlinesCodePass.cs

20
src/Generator/Passes/GenerateInlinesCodePass.cs

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

Loading…
Cancel
Save