2 Copyright (C) 2008-2010 Jeroen Frijters
4 This software is provided 'as-is', without any express or implied
5 warranty. In no event will the authors be held liable for any damages
6 arising from the use of this software.
8 Permission is granted to anyone to use this software for any purpose,
9 including commercial applications, and to alter it and redistribute it
10 freely, subject to the following restrictions:
12 1. The origin of this software must not be misrepresented; you must not
13 claim that you wrote the original software. If you use this software
14 in a product, an acknowledgment in the product documentation would be
15 appreciated but is not required.
16 2. Altered source versions must be plainly marked as such, and must not be
17 misrepresented as being the original software.
18 3. This notice may not be removed or altered from any source distribution.
25 using System.Collections.Generic;
26 using System.Runtime.InteropServices;
27 using System.Diagnostics.SymbolStore;
28 using IKVM.Reflection.Emit;
30 namespace IKVM.Reflection.Impl
32 [Guid("7dac8207-d3ae-4c75-9b67-92801a497d44")]
33 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
35 interface IMetaDataImport
37 void PlaceHolder_CloseEnum();
38 void PlaceHolder_CountEnum();
39 void PlaceHolder_ResetEnum();
40 void PlaceHolder_EnumTypeDefs();
41 void PlaceHolder_EnumInterfaceImpls();
42 void PlaceHolder_EnumTypeRefs();
43 void PlaceHolder_FindTypeDefByName();
44 void PlaceHolder_GetScopeProps();
45 void PlaceHolder_GetModuleFromScope();
48 int td, // [IN] TypeDef token for inquiry.
49 IntPtr szTypeDef, // [OUT] Put name here.
50 int cchTypeDef, // [IN] size of name buffer in wide chars.
51 IntPtr pchTypeDef, // [OUT] put size of name (wide chars) here.
52 IntPtr pdwTypeDefFlags, // [OUT] Put flags here.
53 IntPtr ptkExtends); // [OUT] Put base class TypeDef/TypeRef here.
55 void PlaceHolder_GetInterfaceImplProps();
56 void PlaceHolder_GetTypeRefProps();
57 void PlaceHolder_ResolveTypeRef();
58 void PlaceHolder_EnumMembers();
59 void PlaceHolder_EnumMembersWithName();
60 void PlaceHolder_EnumMethods();
61 void PlaceHolder_EnumMethodsWithName();
62 void PlaceHolder_EnumFields();
63 void PlaceHolder_EnumFieldsWithName();
64 void PlaceHolder_EnumParams();
65 void PlaceHolder_EnumMemberRefs();
66 void PlaceHolder_EnumMethodImpls();
67 void PlaceHolder_EnumPermissionSets();
68 void PlaceHolder_FindMember();
69 void PlaceHolder_FindMethod();
70 void PlaceHolder_FindField();
71 void PlaceHolder_FindMemberRef();
74 int mb, // The method for which to get props.
75 IntPtr pClass, // Put method's class here.
76 IntPtr szMethod, // Put method's name here.
77 int cchMethod, // Size of szMethod buffer in wide chars.
78 IntPtr pchMethod, // Put actual size here
79 IntPtr pdwAttr, // Put flags here.
80 IntPtr ppvSigBlob, // [OUT] point to the blob value of meta data
81 IntPtr pcbSigBlob, // [OUT] actual size of signature blob
82 IntPtr pulCodeRVA, // [OUT] codeRVA
83 IntPtr pdwImplFlags); // [OUT] Impl. Flags
85 void PlaceHolder_GetMemberRefProps();
86 void PlaceHolder_EnumProperties();
87 void PlaceHolder_EnumEvents();
88 void PlaceHolder_GetEventProps();
89 void PlaceHolder_EnumMethodSemantics();
90 void PlaceHolder_GetMethodSemantics();
91 void PlaceHolder_GetClassLayout();
92 void PlaceHolder_GetFieldMarshal();
93 void PlaceHolder_GetRVA();
94 void PlaceHolder_GetPermissionSetProps();
95 void PlaceHolder_GetSigFromToken();
96 void PlaceHolder_GetModuleRefProps();
97 void PlaceHolder_EnumModuleRefs();
98 void PlaceHolder_GetTypeSpecFromToken();
99 void PlaceHolder_GetNameFromToken();
100 void PlaceHolder_EnumUnresolvedMethods();
101 void PlaceHolder_GetUserString();
102 void PlaceHolder_GetPinvokeMap();
103 void PlaceHolder_EnumSignatures();
104 void PlaceHolder_EnumTypeSpecs();
105 void PlaceHolder_EnumUserStrings();
106 void PlaceHolder_GetParamForMethodIndex();
107 void PlaceHolder_EnumCustomAttributes();
108 void PlaceHolder_GetCustomAttributeProps();
109 void PlaceHolder_FindTypeRef();
110 void PlaceHolder_GetMemberProps();
111 void PlaceHolder_GetFieldProps();
112 void PlaceHolder_GetPropertyProps();
113 void PlaceHolder_GetParamProps();
114 void PlaceHolder_GetCustomAttributeByName();
115 void PlaceHolder_IsValidToken();
117 void GetNestedClassProps(
118 int tdNestedClass, // [IN] NestedClass token.
119 IntPtr ptdEnclosingClass); // [OUT] EnclosingClass token.
121 void PlaceHolder_GetNativeCallConvFromSig();
122 void PlaceHolder_IsGlobal();
125 [Guid("ba3fee4c-ecb9-4e41-83b7-183fa41cd859")]
126 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
128 interface IMetaDataEmit
130 void PlaceHolder_SetModuleProps();
131 void PlaceHolder_Save();
132 void PlaceHolder_SaveToStream();
133 void PlaceHolder_GetSaveSize();
134 void PlaceHolder_DefineTypeDef();
135 void PlaceHolder_DefineNestedType();
136 void PlaceHolder_SetHandler();
137 void PlaceHolder_DefineMethod();
138 void PlaceHolder_DefineMethodImpl();
139 void PlaceHolder_DefineTypeRefByName();
140 void PlaceHolder_DefineImportType();
141 void PlaceHolder_DefineMemberRef();
142 void PlaceHolder_DefineImportMember();
143 void PlaceHolder_DefineEvent();
144 void PlaceHolder_SetClassLayout();
145 void PlaceHolder_DeleteClassLayout();
146 void PlaceHolder_SetFieldMarshal();
147 void PlaceHolder_DeleteFieldMarshal();
148 void PlaceHolder_DefinePermissionSet();
149 void PlaceHolder_SetRVA();
150 void PlaceHolder_GetTokenFromSig();
151 void PlaceHolder_DefineModuleRef();
152 void PlaceHolder_SetParent();
153 void PlaceHolder_GetTokenFromTypeSpec();
154 void PlaceHolder_SaveToMemory();
155 void PlaceHolder_DefineUserString();
156 void PlaceHolder_DeleteToken();
157 void PlaceHolder_SetMethodProps();
158 void PlaceHolder_SetTypeDefProps();
159 void PlaceHolder_SetEventProps();
160 void PlaceHolder_SetPermissionSetProps();
161 void PlaceHolder_DefinePinvokeMap();
162 void PlaceHolder_SetPinvokeMap();
163 void PlaceHolder_DeletePinvokeMap();
164 void PlaceHolder_DefineCustomAttribute();
165 void PlaceHolder_SetCustomAttributeValue();
166 void PlaceHolder_DefineField();
167 void PlaceHolder_DefineProperty();
168 void PlaceHolder_DefineParam();
169 void PlaceHolder_SetFieldProps();
170 void PlaceHolder_SetPropertyProps();
171 void PlaceHolder_SetParamProps();
172 void PlaceHolder_DefineSecurityAttributeSet();
173 void PlaceHolder_ApplyEditAndContinue();
174 void PlaceHolder_TranslateSigWithScope();
175 void PlaceHolder_SetMethodImplFlags();
176 void PlaceHolder_SetFieldRVA();
177 void PlaceHolder_Merge();
178 void PlaceHolder_MergeEnd();
181 [Guid("B01FAFEB-C450-3A4D-BEEC-B4CEEC01E006")]
182 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
184 internal interface ISymUnmanagedDocumentWriter { }
186 [Guid("0b97726e-9e6d-4f05-9a26-424022093caa")]
187 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
189 [CoClass(typeof(CorSymWriterClass))]
190 interface ISymUnmanagedWriter2
192 ISymUnmanagedDocumentWriter DefineDocument(string url, ref Guid language, ref Guid languageVendor, ref Guid documentType);
193 void PlaceHolder_SetUserEntryPoint();
194 void OpenMethod(int method);
196 int OpenScope(int startOffset);
197 void CloseScope(int endOffset);
198 void PlaceHolder_SetScopeRange();
199 void DefineLocalVariable(string name, int attributes, int cSig, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] signature, int addrKind, int addr1, int addr2, int startOffset, int endOffset);
200 void PlaceHolder_DefineParameter();
201 void PlaceHolder_DefineField();
202 void PlaceHolder_DefineGlobalVariable();
204 void PlaceHolder_SetSymAttribute();
205 void PlaceHolder_OpenNamespace();
206 void PlaceHolder_CloseNamespace();
207 void PlaceHolder_UsingNamespace();
208 void PlaceHolder_SetMethodSourceRange();
209 void Initialize([MarshalAs(UnmanagedType.IUnknown)] object emitter, string filename, [MarshalAs(UnmanagedType.IUnknown)] object pIStream, bool fFullBuild);
212 [In, Out] ref IMAGE_DEBUG_DIRECTORY pIDD,
214 [Out] out uint pcData,
215 [Out, MarshalAs(UnmanagedType.LPArray)] byte[] data);
217 void DefineSequencePoints(ISymUnmanagedDocumentWriter document, int spCount,
218 [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] offsets,
219 [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] lines,
220 [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] columns,
221 [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] endLines,
222 [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] int[] endColumns);
228 void PlaceHolder_Initialize2();
229 void PlaceHolder_DefineConstant();
230 void PlaceHolder_Abort();
232 void DefineLocalVariable2(string name, int attributes, int token, int addrKind, int addr1, int addr2, int addr3, int startOffset, int endOffset);
234 void PlaceHolder_DefineGlobalVariable2();
235 void PlaceHolder_DefineConstant2();
238 [Guid("108296c1-281e-11d3-bd22-0000f80849bd")]
240 class CorSymWriterClass { }
242 sealed class PdbWriter : ISymbolWriterImpl, IMetaDataEmit, IMetaDataImport
244 private readonly ModuleBuilder moduleBuilder;
245 private ISymUnmanagedWriter2 symUnmanagedWriter;
246 private readonly Dictionary<string, Document> documents = new Dictionary<string, Document>();
247 private readonly List<Method> methods = new List<Method>();
248 private readonly Dictionary<int, int> remap = new Dictionary<int, int>();
249 private readonly Dictionary<int, int> reversemap = new Dictionary<int, int>();
250 private readonly Dictionary<int, MethodBase> methodMap = new Dictionary<int, MethodBase>();
251 private Method currentMethod;
253 internal PdbWriter(ModuleBuilder moduleBuilder)
255 this.moduleBuilder = moduleBuilder;
258 private sealed class Document : ISymbolDocumentWriter
260 internal readonly string url;
261 private Guid language;
262 private Guid languageVendor;
263 private Guid documentType;
264 private ISymUnmanagedDocumentWriter unmanagedDocument;
266 internal Document(string url, Guid language, Guid languageVendor, Guid documentType)
269 this.language = language;
270 this.languageVendor = languageVendor;
271 this.documentType = documentType;
274 public void SetCheckSum(Guid algorithmId, byte[] checkSum)
276 throw new NotImplementedException();
279 public void SetSource(byte[] source)
281 throw new NotImplementedException();
284 internal ISymUnmanagedDocumentWriter GetUnmanagedDocument(ISymUnmanagedWriter2 symUnmanagedWriter)
286 if (unmanagedDocument == null)
288 unmanagedDocument = symUnmanagedWriter.DefineDocument(url, ref language, ref languageVendor, ref documentType);
290 return unmanagedDocument;
293 internal void Release()
295 if (unmanagedDocument != null)
297 Marshal.ReleaseComObject(unmanagedDocument);
298 unmanagedDocument = null;
303 private sealed class LocalVar
305 internal readonly FieldAttributes attributes;
306 internal readonly int signature;
307 internal readonly SymAddressKind addrKind;
308 internal readonly int addr1;
309 internal readonly int addr2;
310 internal readonly int addr3;
311 internal readonly int startOffset;
312 internal readonly int endOffset;
314 internal LocalVar(FieldAttributes attributes, int signature, SymAddressKind addrKind, int addr1, int addr2, int addr3, int startOffset, int endOffset)
316 this.attributes = attributes;
317 this.signature = signature;
318 this.addrKind = addrKind;
322 this.startOffset = startOffset;
323 this.endOffset = endOffset;
327 private sealed class Scope
329 internal readonly int startOffset;
330 internal int endOffset;
331 internal readonly List<Scope> scopes = new List<Scope>();
332 internal readonly Dictionary<string, LocalVar> locals = new Dictionary<string, LocalVar>();
334 internal Scope(int startOffset)
336 this.startOffset = startOffset;
339 internal void Do(ISymUnmanagedWriter2 symUnmanagedWriter)
341 symUnmanagedWriter.OpenScope(startOffset);
342 foreach (KeyValuePair<string, LocalVar> kv in locals)
344 symUnmanagedWriter.DefineLocalVariable2(kv.Key, (int)kv.Value.attributes, kv.Value.signature, (int)kv.Value.addrKind, kv.Value.addr1, kv.Value.addr2, kv.Value.addr3, kv.Value.startOffset, kv.Value.endOffset);
346 foreach (Scope scope in scopes)
348 scope.Do(symUnmanagedWriter);
350 symUnmanagedWriter.CloseScope(endOffset);
354 private sealed class Method
356 internal readonly int token;
357 internal Document document;
358 internal int[] offsets;
359 internal int[] lines;
360 internal int[] columns;
361 internal int[] endLines;
362 internal int[] endColumns;
363 internal readonly List<Scope> scopes = new List<Scope>();
364 internal readonly Stack<Scope> scopeStack = new Stack<Scope>();
366 internal Method(int token)
372 public ISymbolDocumentWriter DefineDocument(string url, Guid language, Guid languageVendor, Guid documentType)
375 if (!documents.TryGetValue(url, out doc))
377 doc = new Document(url, language, languageVendor, documentType);
378 documents.Add(url, doc);
383 public void OpenMethod(SymbolToken method)
385 throw new NotImplementedException();
388 public void OpenMethod(SymbolToken method, MethodBase mb)
390 int token = method.GetToken();
391 currentMethod = new Method(token);
392 methodMap.Add(token, mb);
395 public void CloseMethod()
397 methods.Add(currentMethod);
398 currentMethod = null;
401 public void DefineSequencePoints(ISymbolDocumentWriter document, int[] offsets, int[] lines, int[] columns, int[] endLines, int[] endColumns)
403 currentMethod.document = (Document)document;
404 currentMethod.offsets = offsets;
405 currentMethod.lines = lines;
406 currentMethod.columns = columns;
407 currentMethod.endLines = endLines;
408 currentMethod.endColumns = endColumns;
411 public int OpenScope(int startOffset)
413 Scope scope = new Scope(startOffset);
414 if (currentMethod.scopeStack.Count == 0)
416 currentMethod.scopes.Add(scope);
420 currentMethod.scopeStack.Peek().scopes.Add(scope);
422 currentMethod.scopeStack.Push(scope);
426 public void CloseScope(int endOffset)
428 currentMethod.scopeStack.Pop().endOffset = endOffset;
431 public void DefineLocalVariable2(string name, FieldAttributes attributes, int signature, SymAddressKind addrKind, int addr1, int addr2, int addr3, int startOffset, int endOffset)
433 currentMethod.scopeStack.Peek().locals[name] = new LocalVar(attributes, signature, addrKind, addr1, addr2, addr3, startOffset, endOffset);
436 private void InitWriter()
438 if (symUnmanagedWriter == null)
440 string fileName = System.IO.Path.ChangeExtension(moduleBuilder.FullyQualifiedName, ".pdb");
441 // pro-actively delete the .pdb to get a meaningful IOException, instead of COMInteropException if the file can't be overwritten (or is corrupt, or who knows what)
442 System.IO.File.Delete(fileName);
443 symUnmanagedWriter = new ISymUnmanagedWriter2();
444 symUnmanagedWriter.Initialize(this, fileName, null, true);
448 public byte[] GetDebugInfo(ref IMAGE_DEBUG_DIRECTORY idd)
452 symUnmanagedWriter.GetDebugInfo(ref idd, 0, out cData, null);
453 byte[] buf = new byte[cData];
454 symUnmanagedWriter.GetDebugInfo(ref idd, (uint)buf.Length, out cData, buf);
458 public void RemapToken(int oldToken, int newToken)
460 remap.Add(oldToken, newToken);
461 reversemap.Add(newToken, oldToken);
468 foreach (Method method in methods)
470 int remappedToken = method.token;
471 remap.TryGetValue(remappedToken, out remappedToken);
472 symUnmanagedWriter.OpenMethod(remappedToken);
473 if (method.document != null)
475 ISymUnmanagedDocumentWriter doc = method.document.GetUnmanagedDocument(symUnmanagedWriter);
476 symUnmanagedWriter.DefineSequencePoints(doc, method.offsets.Length, method.offsets, method.lines, method.columns, method.endLines, method.endColumns);
478 foreach (Scope scope in method.scopes)
480 scope.Do(symUnmanagedWriter);
482 symUnmanagedWriter.CloseMethod();
485 foreach (Document doc in documents.Values)
490 symUnmanagedWriter.Close();
491 Marshal.ReleaseComObject(symUnmanagedWriter);
492 symUnmanagedWriter = null;
499 public void DefineLocalVariable(string name, System.Reflection.FieldAttributes attributes, byte[] signature, SymAddressKind addrKind, int addr1, int addr2, int addr3, int startOffset, int endOffset)
501 throw new NotImplementedException();
504 public void CloseNamespace()
506 throw new NotImplementedException();
509 public void DefineField(SymbolToken parent, string name, System.Reflection.FieldAttributes attributes, byte[] signature, SymAddressKind addrKind, int addr1, int addr2, int addr3)
511 throw new NotImplementedException();
514 public void DefineGlobalVariable(string name, System.Reflection.FieldAttributes attributes, byte[] signature, SymAddressKind addrKind, int addr1, int addr2, int addr3)
516 throw new NotImplementedException();
519 public void DefineParameter(string name, System.Reflection.ParameterAttributes attributes, int sequence, SymAddressKind addrKind, int addr1, int addr2, int addr3)
521 throw new NotImplementedException();
524 public void Initialize(IntPtr emitter, string filename, bool fFullBuild)
526 throw new NotImplementedException();
529 public void OpenNamespace(string name)
531 throw new NotImplementedException();
534 public void SetMethodSourceRange(ISymbolDocumentWriter startDoc, int startLine, int startColumn, ISymbolDocumentWriter endDoc, int endLine, int endColumn)
536 throw new NotImplementedException();
539 public void SetScopeRange(int scopeID, int startOffset, int endOffset)
541 throw new NotImplementedException();
544 public void SetSymAttribute(SymbolToken parent, string name, byte[] data)
546 throw new NotImplementedException();
549 public void SetUnderlyingWriter(IntPtr underlyingWriter)
551 throw new NotImplementedException();
554 public void SetUserEntryPoint(SymbolToken entryMethod)
556 throw new NotImplementedException();
559 public void UsingNamespace(string fullName)
561 throw new NotImplementedException();
564 public void PlaceHolder_CloseEnum()
566 throw new NotImplementedException();
569 public void PlaceHolder_CountEnum()
571 throw new NotImplementedException();
574 public void PlaceHolder_ResetEnum()
576 throw new NotImplementedException();
579 public void PlaceHolder_EnumTypeDefs()
581 throw new NotImplementedException();
584 public void PlaceHolder_EnumInterfaceImpls()
586 throw new NotImplementedException();
589 public void PlaceHolder_EnumTypeRefs()
591 throw new NotImplementedException();
594 public void PlaceHolder_FindTypeDefByName()
596 throw new NotImplementedException();
599 public void PlaceHolder_GetScopeProps()
601 throw new NotImplementedException();
604 public void PlaceHolder_GetModuleFromScope()
606 throw new NotImplementedException();
609 private static void WriteString(IntPtr ptrString, IntPtr ptrLength, string str, int length)
611 if (ptrString != IntPtr.Zero)
613 for (int i = 0; i < Math.Min(length, str.Length); i++)
615 Marshal.WriteInt16(ptrString, i, str[i]);
618 if (ptrLength != IntPtr.Zero)
620 Marshal.WriteInt32(ptrLength, str.Length);
624 private static void WriteToken(IntPtr ptr, MemberInfo member)
626 if (ptr != IntPtr.Zero)
628 Marshal.WriteInt32(ptr, member == null ? 0 : member.MetadataToken);
632 private static void WriteInt32(IntPtr ptr, int value)
634 if (ptr != IntPtr.Zero)
636 Marshal.WriteInt32(ptr, value);
640 public void GetTypeDefProps(
641 int td, // [IN] TypeDef token for inquiry.
642 IntPtr szTypeDef, // [OUT] Put name here.
643 int cchTypeDef, // [IN] size of name buffer in wide chars.
644 IntPtr pchTypeDef, // [OUT] put size of name (wide chars) here.
645 IntPtr pdwTypeDefFlags, // [OUT] Put flags here.
646 IntPtr ptkExtends) // [OUT] Put base class TypeDef/TypeRef here.
650 // why are we being called with an invalid token?
651 WriteString(szTypeDef, pchTypeDef, "", cchTypeDef);
652 WriteInt32(pdwTypeDefFlags, 0);
653 WriteToken(ptkExtends, null);
657 Type type = moduleBuilder.ResolveType(td);
658 WriteString(szTypeDef, pchTypeDef, type.FullName, cchTypeDef);
659 WriteInt32(pdwTypeDefFlags, (int)type.Attributes);
660 WriteToken(ptkExtends, type.BaseType);
664 public void PlaceHolder_GetInterfaceImplProps()
666 throw new NotImplementedException();
669 public void PlaceHolder_GetTypeRefProps()
671 throw new NotImplementedException();
674 public void PlaceHolder_ResolveTypeRef()
676 throw new NotImplementedException();
679 public void PlaceHolder_EnumMembers()
681 throw new NotImplementedException();
684 public void PlaceHolder_EnumMembersWithName()
686 throw new NotImplementedException();
689 public void PlaceHolder_EnumMethods()
691 throw new NotImplementedException();
694 public void PlaceHolder_EnumMethodsWithName()
696 throw new NotImplementedException();
699 public void PlaceHolder_EnumFields()
701 throw new NotImplementedException();
704 public void PlaceHolder_EnumFieldsWithName()
706 throw new NotImplementedException();
709 public void PlaceHolder_EnumParams()
711 throw new NotImplementedException();
714 public void PlaceHolder_EnumMemberRefs()
716 throw new NotImplementedException();
719 public void PlaceHolder_EnumMethodImpls()
721 throw new NotImplementedException();
724 public void PlaceHolder_EnumPermissionSets()
726 throw new NotImplementedException();
729 public void PlaceHolder_FindMember()
731 throw new NotImplementedException();
734 public void PlaceHolder_FindMethod()
736 throw new NotImplementedException();
739 public void PlaceHolder_FindField()
741 throw new NotImplementedException();
744 public void PlaceHolder_FindMemberRef()
746 throw new NotImplementedException();
749 public void GetMethodProps(
750 int mb, // The method for which to get props.
751 IntPtr pClass, // [OUT] Put method's class here.
752 IntPtr szMethod, // [OUT] Put method's name here.
753 int cchMethod, // Size of szMethod buffer in wide chars.
754 IntPtr pchMethod, // [OUT] Put actual size here
755 IntPtr pdwAttr, // [OUT] Put flags here.
756 IntPtr ppvSigBlob, // [OUT] point to the blob value of meta data
757 IntPtr pcbSigBlob, // [OUT] actual size of signature blob
758 IntPtr pulCodeRVA, // [OUT] codeRVA
759 IntPtr pdwImplFlags) // [OUT] Impl. Flags
761 if (pdwAttr != IntPtr.Zero || ppvSigBlob != IntPtr.Zero || pcbSigBlob != IntPtr.Zero || pulCodeRVA != IntPtr.Zero || pdwImplFlags != IntPtr.Zero)
763 throw new NotImplementedException();
765 MethodBase method = methodMap[reversemap[mb]];
766 WriteToken(pClass, method.DeclaringType);
767 WriteString(szMethod, pchMethod, method.Name, cchMethod);
770 public void PlaceHolder_GetMemberRefProps()
772 throw new NotImplementedException();
775 public void PlaceHolder_EnumProperties()
777 throw new NotImplementedException();
780 public void PlaceHolder_EnumEvents()
782 throw new NotImplementedException();
785 public void PlaceHolder_GetEventProps()
787 throw new NotImplementedException();
790 public void PlaceHolder_EnumMethodSemantics()
792 throw new NotImplementedException();
795 public void PlaceHolder_GetMethodSemantics()
797 throw new NotImplementedException();
800 public void PlaceHolder_GetClassLayout()
802 throw new NotImplementedException();
805 public void PlaceHolder_GetFieldMarshal()
807 throw new NotImplementedException();
810 public void PlaceHolder_GetRVA()
812 throw new NotImplementedException();
815 public void PlaceHolder_GetPermissionSetProps()
817 throw new NotImplementedException();
820 public void PlaceHolder_GetSigFromToken()
822 throw new NotImplementedException();
825 public void PlaceHolder_GetModuleRefProps()
827 throw new NotImplementedException();
830 public void PlaceHolder_EnumModuleRefs()
832 throw new NotImplementedException();
835 public void PlaceHolder_GetTypeSpecFromToken()
837 throw new NotImplementedException();
840 public void PlaceHolder_GetNameFromToken()
842 throw new NotImplementedException();
845 public void PlaceHolder_EnumUnresolvedMethods()
847 throw new NotImplementedException();
850 public void PlaceHolder_GetUserString()
852 throw new NotImplementedException();
855 public void PlaceHolder_GetPinvokeMap()
857 throw new NotImplementedException();
860 public void PlaceHolder_EnumSignatures()
862 throw new NotImplementedException();
865 public void PlaceHolder_EnumTypeSpecs()
867 throw new NotImplementedException();
870 public void PlaceHolder_EnumUserStrings()
872 throw new NotImplementedException();
875 public void PlaceHolder_GetParamForMethodIndex()
877 throw new NotImplementedException();
880 public void PlaceHolder_EnumCustomAttributes()
882 throw new NotImplementedException();
885 public void PlaceHolder_GetCustomAttributeProps()
887 throw new NotImplementedException();
890 public void PlaceHolder_FindTypeRef()
892 throw new NotImplementedException();
895 public void PlaceHolder_GetMemberProps()
897 throw new NotImplementedException();
900 public void PlaceHolder_GetFieldProps()
902 throw new NotImplementedException();
905 public void PlaceHolder_GetPropertyProps()
907 throw new NotImplementedException();
910 public void PlaceHolder_GetParamProps()
912 throw new NotImplementedException();
915 public void PlaceHolder_GetCustomAttributeByName()
917 throw new NotImplementedException();
920 public void PlaceHolder_IsValidToken()
922 throw new NotImplementedException();
925 public void GetNestedClassProps(
926 int tdNestedClass, // [IN] NestedClass token.
927 IntPtr ptdEnclosingClass) // [OUT] EnclosingClass token.
929 Type type = moduleBuilder.ResolveType(tdNestedClass);
930 WriteToken(ptdEnclosingClass, type.DeclaringType);
933 public void PlaceHolder_GetNativeCallConvFromSig()
935 throw new NotImplementedException();
938 public void PlaceHolder_IsGlobal()
940 throw new NotImplementedException();
943 public void PlaceHolder_SetModuleProps()
945 throw new NotImplementedException();
948 public void PlaceHolder_Save()
950 throw new NotImplementedException();
953 public void PlaceHolder_SaveToStream()
955 throw new NotImplementedException();
958 public void PlaceHolder_GetSaveSize()
960 throw new NotImplementedException();
963 public void PlaceHolder_DefineTypeDef()
965 throw new NotImplementedException();
968 public void PlaceHolder_DefineNestedType()
970 throw new NotImplementedException();
973 public void PlaceHolder_SetHandler()
975 throw new NotImplementedException();
978 public void PlaceHolder_DefineMethod()
980 throw new NotImplementedException();
983 public void PlaceHolder_DefineMethodImpl()
985 throw new NotImplementedException();
988 public void PlaceHolder_DefineTypeRefByName()
990 throw new NotImplementedException();
993 public void PlaceHolder_DefineImportType()
995 throw new NotImplementedException();
998 public void PlaceHolder_DefineMemberRef()
1000 throw new NotImplementedException();
1003 public void PlaceHolder_DefineImportMember()
1005 throw new NotImplementedException();
1008 public void PlaceHolder_DefineEvent()
1010 throw new NotImplementedException();
1013 public void PlaceHolder_SetClassLayout()
1015 throw new NotImplementedException();
1018 public void PlaceHolder_DeleteClassLayout()
1020 throw new NotImplementedException();
1023 public void PlaceHolder_SetFieldMarshal()
1025 throw new NotImplementedException();
1028 public void PlaceHolder_DeleteFieldMarshal()
1030 throw new NotImplementedException();
1033 public void PlaceHolder_DefinePermissionSet()
1035 throw new NotImplementedException();
1038 public void PlaceHolder_SetRVA()
1040 throw new NotImplementedException();
1043 public void PlaceHolder_GetTokenFromSig()
1045 throw new NotImplementedException();
1048 public void PlaceHolder_DefineModuleRef()
1050 throw new NotImplementedException();
1053 public void PlaceHolder_SetParent()
1055 throw new NotImplementedException();
1058 public void PlaceHolder_GetTokenFromTypeSpec()
1060 throw new NotImplementedException();
1063 public void PlaceHolder_SaveToMemory()
1065 throw new NotImplementedException();
1068 public void PlaceHolder_DefineUserString()
1070 throw new NotImplementedException();
1073 public void PlaceHolder_DeleteToken()
1075 throw new NotImplementedException();
1078 public void PlaceHolder_SetMethodProps()
1080 throw new NotImplementedException();
1083 public void PlaceHolder_SetTypeDefProps()
1085 throw new NotImplementedException();
1088 public void PlaceHolder_SetEventProps()
1090 throw new NotImplementedException();
1093 public void PlaceHolder_SetPermissionSetProps()
1095 throw new NotImplementedException();
1098 public void PlaceHolder_DefinePinvokeMap()
1100 throw new NotImplementedException();
1103 public void PlaceHolder_SetPinvokeMap()
1105 throw new NotImplementedException();
1108 public void PlaceHolder_DeletePinvokeMap()
1110 throw new NotImplementedException();
1113 public void PlaceHolder_DefineCustomAttribute()
1115 throw new NotImplementedException();
1118 public void PlaceHolder_SetCustomAttributeValue()
1120 throw new NotImplementedException();
1123 public void PlaceHolder_DefineField()
1125 throw new NotImplementedException();
1128 public void PlaceHolder_DefineProperty()
1130 throw new NotImplementedException();
1133 public void PlaceHolder_DefineParam()
1135 throw new NotImplementedException();
1138 public void PlaceHolder_SetFieldProps()
1140 throw new NotImplementedException();
1143 public void PlaceHolder_SetPropertyProps()
1145 throw new NotImplementedException();
1148 public void PlaceHolder_SetParamProps()
1150 throw new NotImplementedException();
1153 public void PlaceHolder_DefineSecurityAttributeSet()
1155 throw new NotImplementedException();
1158 public void PlaceHolder_ApplyEditAndContinue()
1160 throw new NotImplementedException();
1163 public void PlaceHolder_TranslateSigWithScope()
1165 throw new NotImplementedException();
1168 public void PlaceHolder_SetMethodImplFlags()
1170 throw new NotImplementedException();
1173 public void PlaceHolder_SetFieldRVA()
1175 throw new NotImplementedException();
1178 public void PlaceHolder_Merge()
1180 throw new NotImplementedException();
1183 public void PlaceHolder_MergeEnd()
1185 throw new NotImplementedException();