99% of methods where it crashes on, are HideBySig. So I'm guessing
something special about them which the visitor can't handle?
But if I exclude them, these remain:
System.Void System.Collections.Generic.SortedDictionary`2/
NodeHelper::.cctor()
System.Void System.Collections.Generic.SortedList`2::.cctor()
System.Void System.Collections.Generic.SortedList`2/
Enumerator::.cctor()
But the exception changes.. So a different cause perhaps? (although
still related to generic parameters)
It is now a NotSupportedException, caused by an empty context.
GenericParameter GetGenericParameter (GenericParameterType type,
uint var)
{
var context = reader.context;
if (context == null)
throw new NotSupportedException ();
StackTrace:
Mono.Cecil.SignatureReader.GetGenericParameter
(type=Mono.Cecil.GenericParameterType.Type, var=0) in
Mono.Cecil.SignatureReader.ReadTypeSignature
(etype=Mono.Cecil.Metadata.ElementType.Var) in
Mono.Cecil.SignatureReader.ReadTypeSignature () in
Mono.Cecil.SignatureReader.ReadGenericInstanceSignature
(provider={System.Collections.Generic.Comparer`1},
instance={System.Collections.Generic.Comparer`1<>}) in
Mono.Cecil.SignatureReader.ReadTypeSignature
(etype=Mono.Cecil.Metadata.ElementType.GenericInst) in
Mono.Cecil.SignatureReader.ReadTypeSignature () in
Mono.Cecil.MetadataReader.GetTypeSpecification (rid=42) in
Mono.Cecil.MetadataReader.LookupToken (token={[TypeSpec:0x002a]}) in
Mono.Cecil.MetadataReader.GetTypeDefOrRef (token={[TypeSpec:0x002a]})
in
Mono.Cecil.MetadataReader.ReadTypeMemberReference (type={[TypeSpec:
0x002a]}, name=, signature=) in
Mono.Cecil.MetadataReader.ReadMemberReference (rid=429) in
Mono.Cecil.MetadataReader.GetMemberReference (rid=429) in
Mono.Cecil.MetadataReader.LookupToken (token={[MemberRef:0x01ad]}) in
Mono.Cecil.Rocks.ILParser.ParseCode (code_size=16,
context={Mono.Cecil.Rocks.ILParser.ParseContext}) in
Mono.Cecil.Rocks.ILParser.Parse (method={System.Void
System.Collections.Generic.SortedDictionary`2/NodeHelper::.cctor()},
visitor={CrashMethodParser.MainClass.EmptyVisitor}) in
(code to find them:)
foreach (var m in mod.GetAllTypes().SelectMany(t =>
t.Methods).Where(mt => mt.HasBody && !mt.IsHideBySig))
{
try {
ILParser.Parse(m, new EmptyVisitor());
} catch () {
Console.WriteLine(m.FullName);
}
}
The (by mono develop decompiled) source of the first constructor is
not that complicated:
private void .ctor(IComparer<TKey> cmp)
{
this..ctor();
this.cmp = cmp;
}
so what could cause these exceptions?
On Dec 26, 1:26 am, Davy Landman <[email protected]> wrote:
> ...
--
--
mono-cecil