var file = args[0];
var key = args[1];
var options = args.Where(a => a.StartsWith("-") || a.StartsWith("/"));
- program.Rewrite(file, key, options.ToList());
+ program.Rewrite(file, key, options);
}
// mscorlib types
static bool dllimport;
- void Rewrite(string file, string keyfile, List<string> options)
+ void Rewrite(string file, string keyfile, IEnumerable<string> options)
{
- dllimport = options.Contains("-dllimport");
+ IEnumerable<string> optionsEnumerated = options as IList<string> ?? options.ToList();
+ dllimport = optionsEnumerated.Contains("-dllimport");
// Specify assembly read and write parameters
// We want to keep a valid symbols file (pdb or mdb)
{
foreach (var type in module.Types)
{
- Rewrite(type, options);
+ Rewrite(type, optionsEnumerated);
}
}
}
}
}
- void Rewrite(TypeDefinition type, List<string> options)
+ void Rewrite(TypeDefinition type, IEnumerable<string> options)
{
var entry_points = type.Fields.FirstOrDefault(f => f.Name == "EntryPoints");
if (entry_points != null)
}
void Rewrite(TypeDefinition type, FieldDefinition entry_points,
- List<MethodDefinition> entry_signatures, List<string> options)
+ List<MethodDefinition> entry_signatures, IEnumerable<string> options)
{
// Rewrite all wrapper methods
var wrapper_signatures = new List<MethodDefinition>();
wrapper_signatures.AddRange(type.Methods
.Where(m => m.IsPublic && m.CustomAttributes.Any(a => a.AttributeType.Name == "AutoGeneratedAttribute")));
+ IEnumerable<string> optionsEnumerated = options as IList<string> ?? options.ToList();
foreach (var wrapper in wrapper_signatures)
{
var autogenerated = wrapper.CustomAttributes
var signature = entry_signatures.FirstOrDefault(s => s.Name == signature_name);
int slot = GetSlot(signature);
- ProcessMethod(wrapper, signature, slot, entry_points, options);
+ ProcessMethod(wrapper, signature, slot, entry_points, optionsEnumerated);
}
}
{
foreach (var nested_type in type.NestedTypes)
{
- Rewrite(nested_type, entry_points, entry_signatures, options);
+ Rewrite(nested_type, entry_points, entry_signatures, optionsEnumerated);
}
}
}
// Create body for method
static void ProcessMethod(MethodDefinition wrapper, MethodDefinition native, int slot,
- FieldDefinition entry_points, List<string> options)
+ FieldDefinition entry_points, IEnumerable<string> options)
{
var body = wrapper.Body;
var il = body.GetILProcessor();
// and push each parameter on the stack
DebugVariables vars = null;
- if (options.Contains("-debug"))
+ IEnumerable<string> optionsEnumerated = options as IList<string> ?? options.ToList();
+ if (optionsEnumerated.Contains("-debug"))
{
vars = EmitDebugPrologue(wrapper, il);
}
EmitParameterEpilogues(wrapper, native, body, il, generatedVariables);
- if (options.Contains("-debug"))
+ if (optionsEnumerated.Contains("-debug"))
{
EmitDebugEpilogue(wrapper, il, vars);
}