private void MutateMetadata() { foreach (KeyValuePair <IMemberRef, uint> mdRef in this.rt.Descriptor.Data.refMap) { mdRef.Key.Rid = this.rtMD.GetToken(mdRef.Key).Rid; } foreach (VM.DataDescriptor.FuncSigDesc sig in this.rt.Descriptor.Data.sigs) { VM.FuncSig funcSig = sig.FuncSig; foreach (ITypeDefOrRef paramType in funcSig.ParamSigs) { paramType.Rid = this.rtMD.GetToken(paramType).Rid; } funcSig.RetType.Rid = this.rtMD.GetToken(funcSig.RetType).Rid; } }
private void ImportReferences(ModuleDef module) { var refCopy = this.rt.Descriptor.Data.refMap.ToList(); this.rt.Descriptor.Data.refMap.Clear(); foreach (KeyValuePair <IMemberRef, uint> mdRef in refCopy) { object item; if (mdRef.Key is ITypeDefOrRef) { item = module.Import((ITypeDefOrRef)mdRef.Key); } else if (mdRef.Key is MemberRef) { item = module.Import((MemberRef)mdRef.Key); } else if (mdRef.Key is MethodDef) { item = module.Import((MethodDef)mdRef.Key); } else if (mdRef.Key is MethodSpec) { item = module.Import((MethodSpec)mdRef.Key); } else if (mdRef.Key is FieldDef) { item = module.Import((FieldDef)mdRef.Key); } else { item = mdRef.Key; } this.rt.Descriptor.Data.refMap.Add((IMemberRef)item, mdRef.Value); } foreach (VM.DataDescriptor.FuncSigDesc sig in this.rt.Descriptor.Data.sigs) { MethodSig methodSig = sig.Signature; VM.FuncSig funcSig = sig.FuncSig; if (methodSig.HasThis) { funcSig.Flags |= this.rt.Descriptor.Runtime.RTFlags.INSTANCE; } var paramTypes = new List <ITypeDefOrRef>(); if (methodSig.HasThis && !methodSig.ExplicitThis) { IType thisType; if (sig.DeclaringType.IsValueType) { thisType = module.Import(new ByRefSig(sig.DeclaringType.ToTypeSig()).ToTypeDefOrRef()); } else { thisType = module.Import(sig.DeclaringType); } paramTypes.Add((ITypeDefOrRef)thisType); } foreach (TypeSig param in methodSig.Params) { var paramType = (ITypeDefOrRef)module.Import(param.ToTypeDefOrRef()); paramTypes.Add(paramType); } funcSig.ParamSigs = paramTypes.ToArray(); var retType = (ITypeDefOrRef)module.Import(methodSig.RetType.ToTypeDefOrRef()); funcSig.RetType = retType; } }