public void Init(CecilLoader loader) { InitModifiers(); if (typeDefinition.HasGenericParameters) { for (int i = 0; i < typeDefinition.GenericParameters.Count; i++) { loader.AddConstraints(this, (DefaultTypeParameter)this.TypeParameters[i], typeDefinition.GenericParameters[i]); } } InitNestedTypes(loader); // nested types can be initialized only after generic parameters were created loader.AddAttributes(typeDefinition, this); this.HasExtensionMethods = HasExtensionAttribute(typeDefinition); // set base classes if (typeDefinition.IsEnum) { foreach (FieldDefinition enumField in typeDefinition.Fields) { if (!enumField.IsStatic) { BaseTypes.Add(loader.ReadTypeReference(enumField.FieldType, entity: this)); break; } } } else { if (typeDefinition.BaseType != null) { BaseTypes.Add(loader.ReadTypeReference(typeDefinition.BaseType, entity: this)); } if (typeDefinition.HasInterfaces) { foreach (TypeReference iface in typeDefinition.Interfaces) { BaseTypes.Add(loader.ReadTypeReference(iface, entity: this)); } } } InitMembers(loader); this.typeDefinition = null; Freeze(); // freeze after initialization ApplyInterningProvider(loader.InterningProvider); }
public IEnumerable<ILLocalVariable> GetLocalVariables(IMethod method) { string id = IdStringProvider.GetIdString(method.MemberDefinition); var file = GetSymbols(method); if (file == null || !file.DebugSymbols.ContainsKey(id)) return null; var symbols = file.DebugSymbols[id]; var context = new SimpleTypeResolveContext(method); var loader = new CecilLoader(); return symbols.LocalVariables.Where(v => v.OriginalVariable != null).Select( v => new Debugger.ILLocalVariable() { Index = v.OriginalVariable.Index, Type = loader.ReadTypeReference(v.Type).Resolve(context), Name = v.Name, IsCompilerGenerated = false, ILRanges = new [] { new ILRange(0, int.MaxValue) } }); }