1 <!-- updated according to final specs -->
\r
2 <md-schema version="1.0">
\r
4 <!-- see tables in 23.2.6 -->
\r
7 <!-- NOTE: specs use token-type spelling (map/table/@token-type) rather than table id -->
\r
9 <map name="TypeDefOrRef" bits="2">
\r
10 <table name="TypeDef" tag="0"/>
\r
11 <table name="TypeRef" tag="1"/>
\r
12 <table name="TypeSpec" tag="2"/>
\r
15 <map name="HasConstant" bits="2">
\r
16 <table name="Field" tag="0" token-type="FieldDef"/>
\r
17 <table name="Param" tag="1" token-type="ParamDef"/>
\r
18 <table name="Property" tag="2"/>
\r
21 <map name="HasCustomAttribute" bits="5"><!-- specs: HasCustomattribute -->
\r
22 <table name="Method" tag="0" token-type="MethodDef"/>
\r
23 <table name="Field" tag="1" token-type="FieldDef"/>
\r
24 <table name="TypeRef" tag="2"/>
\r
25 <table name="TypeDef" tag="3"/>
\r
26 <table name="Param" tag="4" token-type="ParamDef"/>
\r
27 <table name="InterfaceImpl" tag="5"/>
\r
28 <table name="MemberRef" tag="6"/>
\r
29 <table name="Module" tag="7"/>
\r
30 <table name="DeclSecurity" tag="8" token-type="Permission"/>
\r
31 <table name="Property" tag="9"/>
\r
32 <table name="Event" tag="10"/>
\r
33 <table name="StandAloneSig" tag="11" token-type="Signature"/>
\r
34 <table name="ModuleRef" tag="12"/>
\r
35 <table name="TypeSpec" tag="13"/>
\r
36 <table name="Assembly" tag="14"/>
\r
37 <table name="AssemblyRef" tag="15"/>
\r
38 <table name="File" tag="16"/>
\r
39 <table name="ExportedType" tag="17"/>
\r
40 <table name="ManifestResource" tag="18"/>
\r
43 <map name="HasFieldMarshal" bits="1"><!-- specs: HasFieldMarshall -->
\r
44 <table name="Field" tag="0" token-type="FieldDef"/>
\r
45 <table name="Param" tag="1" token-type="ParamDef"/>
\r
48 <map name="HasDeclSecurity" bits="2">
\r
49 <table name="TypeDef" tag="0"/>
\r
50 <table name="Method" tag="1" token-type="MethodDef"/>
\r
51 <table name="Assembly" tag="2"/>
\r
54 <map name="MemberRefParent" bits="3">
\r
55 <table name="TypeDef" tag="0"/><!-- specs: Not used -->
\r
56 <table name="TypeRef" tag="1"/>
\r
57 <table name="ModuleRef" tag="2"/>
\r
58 <table name="Method" tag="3" token-type="MethodDef"/>
\r
59 <table name="TypeSpec" tag="4"/>
\r
62 <map name="HasSemantics" bits="1">
\r
63 <table name="Event" tag="0"/>
\r
64 <table name="Property" tag="1"/>
\r
67 <map name="MethodDefOrRef" bits="1">
\r
68 <table name="Method" tag="0" token-type="MethodDef"/>
\r
69 <table name="MemberRef" tag="1"/>
\r
72 <map name="MemberForwarded" bits="1">
\r
73 <table name="Field" tag="0" token-type="FieldDef"/>
\r
74 <table name="Method" tag="1" token-type="MethodDef"/>
\r
77 <map name="Implementation" bits="2">
\r
78 <table name="File" tag="0"/>
\r
79 <table name="AssemblyRef" tag="1"/>
\r
80 <table name="ExportedType" tag="2"/><!-- specs: tag value absent -->
\r
83 <map name="CustomAttributeType" bits="3">
\r
84 <table name="TypeRef" tag="0"/><!-- specs: not used -->
\r
85 <table name="TypeDef" tag="1"/><!-- specs: not used -->
\r
86 <table name="Method" tag="2" token-type="MethodDef"/>
\r
87 <table name="MemberRef" tag="3"/>
\r
88 <table name="String" tag="4"/><!-- specs: not used -->
\r
91 <!-- LAMESPEC: 2 bits per tag, specs claims 3 -->
\r
92 <map name="ResolutionScope" bits="2">
\r
93 <table name="Module" tag="0"/>
\r
94 <table name="ModuleRef" tag="1"/>
\r
95 <table name="AssemblyRef" tag="2"/><!-- LAMESPEC: tag=3 -->
\r
96 <table name="TypeRef" tag="3"/><!-- LAMESPEC: tag=4 -->
\r
102 <!-- 22.1.15 Element Types used in Signatures -->
\r
104 <type name="End" value="0x00" remarks="Marks end of a list."/>
\r
105 <type name="Void" value="0x01"/>
\r
106 <type name="Boolean" value="0x02"/>
\r
107 <type name="Char" value="0x03"/>
\r
108 <type name="I1" value="0x04"/>
\r
109 <type name="U1" value="0x05"/>
\r
110 <type name="I2" value="0x06"/>
\r
111 <type name="U2" value="0x07"/>
\r
112 <type name="I4" value="0x08"/>
\r
113 <type name="U4" value="0x09"/>
\r
114 <type name="I8" value="0x0a"/>
\r
115 <type name="U8" value="0x0b"/>
\r
116 <type name="R4" value="0x0c"/>
\r
117 <type name="R8" value="0x0d"/>
\r
118 <type name="String" value="0x0e"/>
\r
119 <type name="Ptr" value="0x0f" remarks="Followed by <type> token."/>
\r
120 <type name="ByRef" value="0x10" remarks="Followed by <type> token."/>
\r
121 <type name="ValueType" value="0x11" remarks="Followed by <type> token."/>
\r
122 <type name="Class" value="0x12" remarks="Followed by <type> token."/>
\r
123 <type name="Array" value="0x14"/>
\r
124 <type name="TypedByRef" value="0x16"/>
\r
125 <type name="I" value="0x18" remarks="System.IntPtr"/>
\r
126 <type name="U" value="0x19" remarks="System.UIntPtr"/>
\r
127 <type name="FnPtr" value="0x1b" remarks="Followed by full method signature."/>
\r
128 <type name="Object" value="0x1c" remarks="System.Object"/>
\r
129 <type name="SzArray" value="0x1d" remarks="Single-dim array with 0 lower bound."/>
\r
130 <type name="CModReqd" value="0x1f" remarks="Required modifier : followed by a TypeDef or TypeRef token."/>
\r
131 <type name="CModOpt" value="0x20" remarks="Optional modifier : followed by a TypeDef or TypeRef token."/>
\r
132 <type name="Internal" value="0x21" remarks="Implemented within the CLR."/>
\r
134 <type name="Modifier" value="0x40" remarks="Or'd with following element types."/>
\r
135 <type name="Sentinel" value="0x41" remarks="Sentinel for varargs method signature."/>
\r
136 <type name="Pinned" value="0x45" remarks="Denotes a local variable that points at a pinned object."/>
\r
149 <table name="Module" id="0x00" section="21.27">
\r
151 <field name="Generation" type="ushort"/>
\r
152 <field name="Name" type="index(#Strings)"/>
\r
153 <field name="Mvid" type="index(#GUID)"/>
\r
154 <field name="EncId" type="index(#GUID)"/>
\r
155 <field name="EncBaseId" type="index(#GUID)"/>
\r
161 <table name="TypeRef" id="0x01" section="21.35">
\r
163 <field name="ResolutionScope" type="coded-index(ResolutionScope)"/>
\r
164 <field name="Name" type="index(#Strings)"/>
\r
165 <field name="Namespace" type="index(#Strings)"/>
\r
171 <table name="TypeDef" id="0x02" section="21.34">
\r
173 <field name="Flags" type="uint" cli-type="System.Reflection.TypeAttributes"/>
\r
174 <field name="Name" type="index(#Strings)"/>
\r
175 <field name="Namespace" type="index(#Strings)"/>
\r
176 <field name="Extends" type="coded-index(TypeDefOrRef)"/>
\r
177 <field name="FieldList" type="index(Field)"/>
\r
178 <field name="MethodList" type="index(Method)"/>
\r
184 <table name="FieldPtr" id="0x03" temporary="yes">
\r
186 <field name="Field" type="index(Field)"/>
\r
192 <table name="Field" id="0x04" section="21.15">
\r
194 <field name="Flags" type="ushort" cli-type="System.Reflection.FieldAttributes"/>
\r
195 <field name="Name" type="index(#Strings)"/>
\r
196 <field name="Signature" type="index(#Blob)"/>
\r
202 <table name="MethodPtr" id="0x05" temporary="yes">
\r
204 <field name="Method" type="index(Method)"/>
\r
210 <table name="Method" id="0x06" section="21.24">
\r
212 <field name="RVA" type="RVA" remarks="RVA of the COR_ILMETHOD structure for the body of the method."/>
\r
213 <field name="ImplFlags" type="ushort" cli-type="System.Reflection.MethodImplAttributes"/>
\r
214 <field name="Flags" type="ushort" cli-type="System.Reflection.MethodAttributes"/><!-- ??? MethodAttribute -->
\r
215 <field name="Name" type="index(#Strings)"/>
\r
216 <field name="Signature" type="index(#Blob)"/>
\r
217 <field name="ParamList" type="index(Param)"/>
\r
223 <table name="ParamPtr" id="0x07" temporary="yes">
\r
225 <field name="Param" type="index(Param)"/>
\r
231 <table name="Param" id="0x08" section="21.30">
\r
233 <field name="Flags" type="ushort" cli-type="System.Reflection.ParameterAttributes"/><!-- specs: ParamAttributes -->
\r
234 <field name="Sequence" type="ushort"/>
\r
235 <field name="Name" type="index(#Strings)"/>
\r
241 <table name="InterfaceImpl" id="0x09" section="21.21">
\r
243 <field name="Class" type="index(TypeDef)"/>
\r
244 <field name="Interface" type="coded-index(TypeDefOrRef)"/>
\r
251 <table name="MemberRef" id="0x0a" section="21.23">
\r
253 <field name="Class" type="coded-index(MemberRefParent)"/>
\r
254 <field name="Name" type="index(#Strings)"/>
\r
255 <field name="Signature" type="index(#Blob)"/>
\r
261 <table name="Constant" id="0x0b" section="21.9">
\r
263 <field name="Type" type="short" cli-type="ElementType" remarks="1 byte ElementType constant, followed by a 1-byte padding zero."/>
\r
264 <field name="Parent" type="coded-index(HasConstant)"/>
\r
265 <field name="Value" type="index(#Blob)"/>
\r
271 <table name="CustomAttribute" id="0x0c" section="21.10">
\r
273 <field name="Parent" type="coded-index(HasCustomAttribute)"/>
\r
274 <field name="Type" type="coded-index(CustomAttributeType)"/>
\r
275 <field name="Value" type="index(#Blob)"/>
\r
281 <table name="FieldMarshal" id="0x0d" section="21.17">
\r
283 <field name="Parent" type="coded-index(HasFieldMarshal)"/>
\r
284 <field name="NativeType" type="index(#Blob)"/>
\r
290 <table name="DeclSecurity" id="0x0e" section="21.11">
\r
292 <field name="Action" type="short"/><!-- TODO: System.Security.SecurityAction -->
\r
293 <field name="Parent" type="coded-index(HasDeclSecurity)"/>
\r
294 <field name="PermissionSet" type="index(#Blob)"/>
\r
300 <table name="ClassLayout" id="0x0f" section="21.8">
\r
302 <field name="PackingSize" type="short"/><!-- TODO: use enum? -->
\r
303 <field name="ClassSize" type="int"/>
\r
304 <field name="Parent" type="index(TypeDef)"/>
\r
310 <table name="FieldLayout" id="0x10" section="21.16">
\r
312 <field name="Offset" type="int"/>
\r
313 <field name="Field" type="index(Field)"/>
\r
319 <table name="StandAloneSig" id="0x11" section="21.33">
\r
321 <field name="Signature" type="index(#Blob)"/>
\r
327 <table name="EventMap" id="0x12" section="21.12">
\r
329 <field name="Parent" type="index(TypeDef)"/>
\r
330 <field name="EventList" type="index(Event)"/>
\r
336 <table name="EventPtr" id="0x13" temporary="yes">
\r
338 <field name="Event" type="index(Event)"/>
\r
344 <table name="Event" id="0x14" section="21.13">
\r
346 <field name="EventFlags" type="short" cli-type="System.Reflection.EventAttributes"/><!-- specs: EventAttribute -->
\r
347 <field name="Name" type="index(#Strings)"/>
\r
348 <field name="EventType" type="coded-index(TypeDefOrRef)"/>
\r
354 <table name="PropertyMap" id="0x15" section="21.32">
\r
356 <field name="Parent" type="index(TypeDef)"/>
\r
357 <field name="PropertyList" type="index(Property)"/>
\r
363 <table name="PropertyPtr" id="0x16" temporary="yes">
\r
365 <field name="Property" type="index(Property)"/>
\r
371 <table name="Property" id="0x17" section="21.30"><!-- NOTE: previous name was "Properties" -->
\r
373 <field name="Flags" type="ushort" cli-type="System.Reflection.PropertyAttributes"/>
\r
374 <field name="Name" type="index(#Strings)"/>
\r
375 <field name="Type" type="index(#Blob)"/>
\r
381 <table name="MethodSemantics" id="0x18" section="21.26">
\r
383 <field name="Semantics" type="ushort" cli-type="MethodSemanticsAttributes"/>
\r
384 <field name="Method" type="index(Method)"/>
\r
385 <field name="Association" type="coded-index(HasSemantics)"/>
\r
391 <table name="MethodImpl" id="0x19" section="21.25">
\r
393 <field name="Class" type="index(TypeDef)"/>
\r
394 <field name="MethodBody" type="coded-index(MethodDefOrRef)"/>
\r
395 <field name="MethodDeclaration" type="coded-index(MethodDefOrRef)"/>
\r
401 <table name="ModuleRef" id="0x1a" section="21.28">
\r
403 <field name="Name" type="index(#Strings)"/>
\r
409 <table name="TypeSpec" id="0x1b" section="21.36">
\r
411 <field name="Signature" type="index(#Blob)"/>
\r
417 <table name="ImplMap" id="0x1c" section="21.20">
\r
419 <field name="MappingFlags" type="ushort" cli-type="PInvokeAttributes"/>
\r
420 <field name="MemberForwarded" type="coded-index(MemberForwarded)"/>
\r
421 <field name="ImportName" type="index(#Strings)"/>
\r
422 <field name="ImportScope" type="index(ModuleRef)"/>
\r
428 <table name="FieldRVA" id="0x1d" section="21.18">
\r
430 <field name="RVA" type="RVA"/>
\r
431 <field name="Field" type="index(Field)"/>
\r
437 <table name="ENCLog" id="0x1e" temporary="yes">
\r
439 <field name="Token" type="uint"/>
\r
440 <field name="FuncCode" type="uint"/>
\r
446 <table name="ENCMap" id="0x1f" temporary="yes">
\r
448 <field name="Token" type="uint"/>
\r
454 <table name="Assembly" id="0x20" section="21.2">
\r
456 <field name="HashAlgId" type="int" cli-type="System.Configuration.Assemblies.AssemblyHashAlgorithm"/>
\r
457 <field name="MajorVersion" type="short"/>
\r
458 <field name="MinorVersion" type="short"/>
\r
459 <field name="BuildNumber" type="short"/>
\r
460 <field name="RevisionNumber" type="short"/>
\r
461 <field name="Flags" type="uint" cli-type="AssemblyFlags"/>
\r
462 <field name="PublicKey" type="index(#Blob)"/>
\r
463 <field name="Name" type="index(#Strings)"/>
\r
464 <field name="Culture" type="index(#Strings)"/>
\r
470 <table name="AssemblyProcessor" id="0x21" section="21.4">
\r
472 <field name="Processor" type="int"/>
\r
478 <table name="AssemblyOS" id="0x22" section="21.3">
\r
480 <field name="OSPlatformID" type="int"/>
\r
481 <field name="OSMajorVersion" type="int"/>
\r
482 <field name="OSMinorVersion" type="int"/>
\r
488 <table name="AssemblyRef" id="0x23" section="21.5">
\r
490 <field name="MajorVersion" type="short"/>
\r
491 <field name="MinorVersion" type="short"/>
\r
492 <field name="BuildNumber" type="short"/>
\r
493 <field name="RevisionNumber" type="short"/>
\r
494 <field name="Flags" type="uint" cli-type="AssemblyFlags"/>
\r
495 <field name="PublicKeyOrToken" type="index(#Blob)"/>
\r
496 <field name="Name" type="index(#Strings)"/>
\r
497 <field name="Culture" type="index(#Strings)"/>
\r
498 <field name="HashValue" type="index(#Blob)"/>
\r
504 <table name="AssemblyRefProcessor" id="0x24" section="21.7">
\r
506 <field name="Processor" type="int"/>
\r
507 <field name="AssemblyRef" type="index(AssemblyRef)"/>
\r
513 <table name="AssemblyRefOS" id="0x25" section="21.6">
\r
515 <field name="OSPlatformID" type="int"/>
\r
516 <field name="OSMajorVersion" type="int"/>
\r
517 <field name="OSMinorVersion" type="int"/>
\r
518 <field name="AssemblyRef" type="index(AssemblyRef)"/>
\r
524 <table name="File" id="0x26" section="21.19">
\r
526 <field name="Flags" type="uint" cli-type="System.IO.FileAttributes"/>
\r
527 <field name="Name" type="index(#Strings)"/>
\r
528 <field name="HashValue" type="index(#Blob)"/>
\r
534 <table name="ExportedType" id="0x27" section="21.14">
\r
536 <field name="Flags" type="uint" cli-type="System.Reflection.TypeAttributes"/>
\r
537 <field name="TypeDefId" type="index(TypeDef)"/>
\r
538 <field name="TypeName" type="index(#Strings)"/>
\r
539 <field name="TypeNamespace" type="index(#Strings)"/>
\r
540 <field name="Implementation" type="coded-index(Implementation)"/>
\r
546 <table name="ManifestResource" id="0x28" section="21.22">
\r
548 <field name="Offset" type="int"/>
\r
549 <field name="Flags" type="uint" cli-type="ManifestResourceAttributes"/>
\r
550 <field name="Name" type="index(#Strings)"/>
\r
551 <field name="Implementation" type="coded-index(Implementation)"/>
\r
557 <table name="NestedClass" id="0x29" section="21.29">
\r
559 <field name="NestedClass" type="index(TypeDef)"/>
\r
560 <field name="EnclosingClass" type="index(TypeDef)"/>
\r
566 <table name="TypeTyPar" id="0x2a" temporary="yes">
\r
568 <field name="Number" type="ushort"/>
\r
569 <field name="Class" type="index(TypeDef)"/>
\r
570 <field name="Bound" type="coded-index(TypeDefOrRef)"/>
\r
571 <field name="Name" type="index(#Strings)"/>
\r
577 <table name="MethodTyPar" id="0x2b" temporary="yes">
\r
579 <field name="Number" type="ushort"/>
\r
580 <field name="Method" type="index(Method)"/>
\r
581 <field name="Bound" type="coded-index(TypeDefOrRef)"/>
\r
582 <field name="Name" type="index(#Strings)"/>
\r