Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 5 additions & 34 deletions source/MetadataProcessor.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -69,36 +69,12 @@ public void Compile(
_assemblyBuilder.Write(GetBinaryWriter(writer));
}

using (var writer = XmlWriter.Create(Path.ChangeExtension(fileName, "pdbx")))
{
_assemblyBuilder.Write(writer);
}

if(DumpMetadata)
{
nanoDumperGenerator dumper = new nanoDumperGenerator(
_assemblyBuilder.TablesContext,
Path.ChangeExtension(fileName, "dump.txt"));
dumper.DumpAll();
}
}
catch (Exception)
{
System.Console.Error.WriteLine(
"Unable to compile output assembly file '{0}' - check parse command results.", fileName);
throw;
}
}

public void Minimize(
string fileName)
{
try
{
if (Verbose) System.Console.WriteLine("Minimizing assembly...");

_assemblyBuilder.Minimize();

if (Verbose) System.Console.WriteLine("Recompiling assembly...");

using (var stream = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite))
using (var writer = new BinaryWriter(stream))
{
Expand All @@ -110,18 +86,18 @@ public void Minimize(
_assemblyBuilder.Write(writer);
}

if (DumpMetadata)
if(DumpMetadata)
{
nanoDumperGenerator dumper = new nanoDumperGenerator(
_assemblyBuilder.TablesContext,
Path.ChangeExtension(fileName, "dump.txt"));
dumper.DumpAll();
}
}
catch (Exception ex)
catch (Exception)
{
System.Console.Error.WriteLine(
"Unable to minimize assembly file '{0}'.", fileName);
"Unable to compile output assembly file '{0}' - check parse command results.", fileName);
throw;
}
}
Expand Down Expand Up @@ -232,7 +208,6 @@ public static void Main(string[] args)
System.Console.WriteLine("-excludeClassByName <class-name> Removes the class from an assembly.");
System.Console.WriteLine("-generateskeleton Generate skeleton files with stubs to add native code for an assembly.");
System.Console.WriteLine("-generateDependency Generates an XML file with the relationship between assemblies.");
System.Console.WriteLine("-minimize Minimizes the assembly, removing unwanted elements.");
System.Console.WriteLine("-verbose Outputs each command before executing it.");
System.Console.WriteLine("-verboseMinimize Turns on verbose level for the minimization phase.");
System.Console.WriteLine("-dump_all Generates a report of an assembly's metadata.");
Expand Down Expand Up @@ -263,10 +238,6 @@ public static void Main(string[] args)
{
md.AddClassToExclude(args[++i]);
}
else if (arg == "-minimize")
{
md.Minimize(md.PeFileName);
}
else if (arg == "-verbose")
{
md.Verbose = true;
Expand Down
30 changes: 1 addition & 29 deletions source/MetadataProcessor.Core/Tables/nanoTablesContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,6 @@ public sealed class nanoTablesContext
// Assembly-level attributes
"System.Runtime.InteropServices.ComVisibleAttribute",
"System.Runtime.InteropServices.GuidAttribute",
"System.Reflection.AssemblyTitleAttribute",
"System.Reflection.AssemblyDescriptionAttribute",
"System.Reflection.AssemblyConfigurationAttribute",
"System.Reflection.AssemblyCompanyAttribute",
"System.Reflection.AssemblyProductAttribute",
"System.Reflection.AssemblyCopyrightAttribute",
"System.Reflection.AssemblyTrademarkAttribute",
"System.Reflection.AssemblyFileVersionAttribute",

// Compiler-specific attributes
//"System.ParamArrayAttribute",
Expand Down Expand Up @@ -108,17 +100,7 @@ public nanoTablesContext(
AssemblyReferenceTable = new nanoAssemblyReferenceTable(
mainModule.AssemblyReferences, this);

var typeReferences = mainModule.GetTypeReferences().ToList();

// remove types in ignore list
foreach (var a in _ignoringAttributes)
{
var typeToExclude = typeReferences.FirstOrDefault(t => t.FullName == a);
if (typeToExclude != null)
{
typeReferences.Remove(typeToExclude);
}
}
var typeReferences = mainModule.GetTypeReferences();

TypeReferencesTable = new nanoTypeReferenceTable(
typeReferences, this);
Expand All @@ -140,16 +122,6 @@ public nanoTablesContext(

var types = GetOrderedTypes(mainModule, explicitTypesOrder);

// remove types in ignore list
foreach (var a in _ignoringAttributes)
{
var typeToExclude = types.FirstOrDefault(t => t.FullName == a);
if(typeToExclude != null)
{
types.Remove(typeToExclude);
}
}

TypeDefinitionTable = new nanoTypeDefinitionTable(types, this);

var fields = types
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ protected override void AllocateSingleItemStrings(
GetOrCreateStringId(item.Name);
}

private ushort GetScope(
internal ushort GetScope(
TypeReference typeReference)
{
if (typeReference.DeclaringType == null)
Expand Down
1 change: 1 addition & 0 deletions source/MetadataProcessor.Core/nanoAssemblyBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ public void Minimize()
// need to reset several tables so they are recreated only with the used items
_tablesContext.ResetStringsTable();
_tablesContext.AssemblyReferenceTable.RemoveUnusedItems(set);
_tablesContext.TypeReferencesTable.RemoveUnusedItems(set);
_tablesContext.FieldsTable.RemoveUnusedItems(set);
_tablesContext.FieldReferencesTable.RemoveUnusedItems(set);
_tablesContext.MethodDefinitionTable.RemoveUnusedItems(set);
Expand Down
6 changes: 2 additions & 4 deletions source/MetadataProcessor.Core/nanoDumperGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -235,18 +235,16 @@ private void DumpTypeReferences(DumpAllTable dumpTable)
{
ushort refId;

var metadataScopeType = _tablesContext.AssemblyReferenceTable.Items.FirstOrDefault(a => a == t.Scope);

var typeRef = new TypeRef()
{
Name = t.Name,
Scope = _tablesContext.AssemblyReferenceTable.GetReferenceId(metadataScopeType).ToString("x8")
Scope = _tablesContext.TypeReferencesTable.GetScope(t).ToString("x8")
};

if (_tablesContext.TypeReferencesTable.TryGetTypeReferenceId(t, out refId))
{
typeRef.ReferenceId = "0x" + refId.ToString("x8");
typeRef.Name = t.Name;
typeRef.Name = t.FullName;
}

// TODO
Expand Down