Example #1
0
			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) }
				});
		}