6
6
using Mono . Cecil ;
7
7
using Mono . Cecil . Cil ;
8
8
using Mono . Collections . Generic ;
9
+ using nanoFramework . Tools . MetadataProcessor . Core . Extensions ;
9
10
using Stubble . Core . Builders ;
10
11
using System ;
11
12
using System . Collections . Generic ;
@@ -55,9 +56,28 @@ public void DumpAll()
55
56
56
57
private void DumpCustomAttributes ( DumpAllTable dumpTable )
57
58
{
58
- foreach ( var a in _tablesContext . AssemblyDefinition . CustomAttributes )
59
+ foreach ( var a in _tablesContext . TypeDefinitionTable . Items . Where ( td => td . HasCustomAttributes ) )
59
60
{
61
+ foreach ( var ma in a . Methods )
62
+ {
63
+ var attribute = new AttributeCustom ( )
64
+ {
65
+ Name = a . Module . Assembly . Name . Name ,
66
+ ReferenceId = ma . MetadataToken . ToInt32 ( ) . ToString ( "x8" ) ,
67
+ TypeToken = a . CustomAttributes [ 0 ] . Constructor . MetadataToken . ToInt32 ( ) . ToString ( "x8" )
68
+ } ;
69
+
70
+ dumpTable . Attributes . Add ( attribute ) ;
71
+ }
72
+
73
+ var attribute1 = new AttributeCustom ( )
74
+ {
75
+ Name = a . Module . Assembly . Name . Name ,
76
+ ReferenceId = a . MetadataToken . ToInt32 ( ) . ToString ( "x8" ) ,
77
+ TypeToken = a . CustomAttributes [ 0 ] . Constructor . MetadataToken . ToInt32 ( ) . ToString ( "x8" )
78
+ } ;
60
79
80
+ dumpTable . Attributes . Add ( attribute1 ) ;
61
81
}
62
82
}
63
83
@@ -85,7 +105,7 @@ private void DumpUserStrings(DumpAllTable dumpTable)
85
105
86
106
private void DumpTypeDefinitions ( DumpAllTable dumpTable )
87
107
{
88
- foreach ( var t in _tablesContext . TypeDefinitionTable . Items )
108
+ foreach ( var t in _tablesContext . TypeDefinitionTable . Items . OrderBy ( tr => tr . MetadataToken . ToInt32 ( ) ) )
89
109
{
90
110
// fill type definition
91
111
var typeDef = new TypeDef ( )
@@ -142,7 +162,7 @@ private void DumpTypeDefinitions(DumpAllTable dumpTable)
142
162
ReferenceId = m . MetadataToken . ToInt32 ( ) . ToString ( "x8" ) ,
143
163
Name = m . Name ,
144
164
RVA = m . RVA . ToString ( "x8" ) ,
145
- Implementation = "Implementation " ,
165
+ Implementation = "00000000 " ,
146
166
Signature = PrintSignatureForMethod ( m )
147
167
} ;
148
168
@@ -231,24 +251,37 @@ private void DumpTypeDefinitions(DumpAllTable dumpTable)
231
251
232
252
private void DumpTypeReferences ( DumpAllTable dumpTable )
233
253
{
234
- foreach ( var t in _tablesContext . TypeReferencesTable . Items )
254
+ foreach ( var t in _tablesContext . TypeReferencesTable . Items . OrderBy ( tr => tr . MetadataToken . ToInt32 ( ) ) )
235
255
{
236
256
ushort refId ;
237
257
238
258
var typeRef = new TypeRef ( )
239
259
{
240
- Name = t . Name ,
241
- Scope = _tablesContext . TypeReferencesTable . GetScope ( t ) . ToString ( "x8" )
260
+ Name = t . FullName ,
261
+ Scope = new MetadataToken ( TokenType . AssemblyRef , _tablesContext . TypeReferencesTable . GetScope ( t ) ) . ToInt32 ( ) . ToString ( "x8" )
242
262
} ;
243
263
244
264
if ( _tablesContext . TypeReferencesTable . TryGetTypeReferenceId ( t , out refId ) )
245
265
{
246
- typeRef . ReferenceId = "0x" + refId . ToString ( "x8" ) ;
247
- typeRef . Name = t . FullName ;
266
+ typeRef . ReferenceId = new MetadataToken ( TokenType . TypeRef , refId ) . ToInt32 ( ) . ToString ( "x8" ) ;
248
267
}
249
268
250
- // TODO
251
- // list member refs
269
+ // list member refs
270
+ foreach ( var m in _tablesContext . MethodReferencesTable . Items . Where ( mr => mr . DeclaringType == t ) )
271
+ {
272
+ var memberRef = new MemberRef ( )
273
+ {
274
+ Name = m . Name
275
+ } ;
276
+
277
+ if ( _tablesContext . MethodReferencesTable . TryGetMethodReferenceId ( m , out refId ) )
278
+ {
279
+ memberRef . ReferenceId = new MetadataToken ( TokenType . MemberRef , refId ) . ToInt32 ( ) . ToString ( "x8" ) ;
280
+ memberRef . Signature = PrintSignatureForMethod ( m ) ;
281
+ }
282
+
283
+ typeRef . MemberReferences . Add ( memberRef ) ;
284
+ }
252
285
253
286
dumpTable . TypeReferences . Add ( typeRef ) ;
254
287
}
@@ -266,8 +299,8 @@ private void DumpAssemblyReferences(DumpAllTable dumpTable)
266
299
dumpTable . AssemblyReferences . Add ( new AssemblyRef ( )
267
300
{
268
301
Name = a . Name ,
269
- ReferenceId = "0x" + _tablesContext . AssemblyReferenceTable . GetReferenceId ( a ) . ToString ( "x8" ) ,
270
- Flags = "0x "
302
+ ReferenceId = new MetadataToken ( TokenType . AssemblyRef , _tablesContext . AssemblyReferenceTable . GetReferenceId ( a ) ) . ToInt32 ( ) . ToString ( "x8" ) ,
303
+ Flags = "00000000 "
271
304
} ) ;
272
305
}
273
306
}
@@ -330,20 +363,29 @@ private string PrintSignatureForType(TypeReference type)
330
363
return arraySig . ToString ( ) ;
331
364
}
332
365
366
+ if ( type . MetadataType == MetadataType . IntPtr )
367
+ {
368
+ return "I" ;
369
+ }
370
+
371
+ if ( type . MetadataType == MetadataType . UIntPtr )
372
+ {
373
+ return "U" ;
374
+ }
375
+
333
376
return "" ;
334
377
}
335
378
336
379
private string PrintSignatureForMethod ( MethodReference method )
337
380
{
338
381
var sig = new StringBuilder ( PrintSignatureForType ( method . ReturnType ) ) ;
339
382
340
- sig . Append ( "(" ) ;
383
+ sig . Append ( "( " ) ;
341
384
342
385
foreach ( var p in method . Parameters )
343
386
{
344
- sig . Append ( " " ) ;
345
387
sig . Append ( PrintSignatureForType ( p . ParameterType ) ) ;
346
- sig . Append ( " , " ) ;
388
+ sig . Append ( ", " ) ;
347
389
}
348
390
349
391
// remove trailing", "
@@ -356,7 +398,7 @@ private string PrintSignatureForMethod(MethodReference method)
356
398
sig . Append ( " " ) ;
357
399
}
358
400
359
- sig . Append ( ")" ) ;
401
+ sig . Append ( " )" ) ;
360
402
361
403
return sig . ToString ( ) ;
362
404
}
@@ -365,13 +407,12 @@ private string PrintSignatureForMethod(MethodReference method)
365
407
private string PrintSignatureForLocalVar ( Collection < VariableDefinition > variables )
366
408
{
367
409
StringBuilder sig = new StringBuilder ( ) ;
368
- sig . Append ( "{" ) ;
410
+ sig . Append ( "{ " ) ;
369
411
370
412
foreach ( var l in variables )
371
413
{
372
- sig . Append ( " " ) ;
373
414
sig . Append ( PrintSignatureForType ( l . VariableType ) ) ;
374
- sig . Append ( " , " ) ;
415
+ sig . Append ( ", " ) ;
375
416
}
376
417
377
418
// remove trailing", "
@@ -384,7 +425,7 @@ private string PrintSignatureForLocalVar(Collection<VariableDefinition> variable
384
425
sig . Append ( " " ) ;
385
426
}
386
427
387
- sig . Append ( "}" ) ;
428
+ sig . Append ( " }" ) ;
388
429
389
430
return sig . ToString ( ) ;
390
431
}
0 commit comments