@@ -29,21 +29,6 @@ public override string GetComment (object data, string fieldName)
29
29
return String . Empty ;
30
30
}
31
31
32
- public override string ? GetPointedToSymbolName ( object data , string fieldName )
33
- {
34
- var map_module = EnsureType < TypeMapModule > ( data ) ;
35
-
36
- if ( String . Compare ( "map" , fieldName , StringComparison . Ordinal ) == 0 ) {
37
- return map_module . MapSymbolName ;
38
- }
39
-
40
- if ( String . Compare ( "duplicate_map" , fieldName , StringComparison . Ordinal ) == 0 ) {
41
- return map_module . DuplicateMapSymbolName ;
42
- }
43
-
44
- return null ;
45
- }
46
-
47
32
public override ulong GetBufferSize ( object data , string fieldName )
48
33
{
49
34
var map_module = EnsureType < TypeMapModule > ( data ) ;
@@ -126,12 +111,6 @@ sealed class TypeMapModule
126
111
[ NativeAssembler ( Ignore = true ) ]
127
112
public Guid MVID ;
128
113
129
- [ NativeAssembler ( Ignore = true ) ]
130
- public string ? MapSymbolName ;
131
-
132
- [ NativeAssembler ( Ignore = true ) ]
133
- public string ? DuplicateMapSymbolName ;
134
-
135
114
[ NativeAssembler ( Ignore = true ) ]
136
115
public TypeMapGenerator . ModuleReleaseData Data ;
137
116
@@ -147,11 +126,11 @@ sealed class TypeMapModule
147
126
public uint assembly_name_index ;
148
127
public uint assembly_name_length ;
149
128
150
- [ NativeAssembler ( UsesDataProvider = true ) , NativePointer ( PointsToSymbol = "" ) ]
151
- public TypeMapModuleEntry map ;
129
+ [ NativeAssembler ( UsesDataProvider = true ) ]
130
+ public uint map_index ;
152
131
153
- [ NativeAssembler ( UsesDataProvider = true ) , NativePointer ( PointsToSymbol = "" ) ]
154
- public TypeMapModuleEntry duplicate_map ;
132
+ [ NativeAssembler ( UsesDataProvider = true ) ]
133
+ public uint duplicate_map_index ;
155
134
}
156
135
157
136
// Order of fields and their type must correspond *exactly* to that in
@@ -187,12 +166,10 @@ sealed class TypeMapJava
187
166
188
167
sealed class ModuleMapData
189
168
{
190
- public string SymbolLabel { get ; }
191
169
public List < StructureInstance < TypeMapModuleEntry > > Entries { get ; }
192
170
193
- public ModuleMapData ( string symbolLabel , List < StructureInstance < TypeMapModuleEntry > > entries )
171
+ public ModuleMapData ( List < StructureInstance < TypeMapModuleEntry > > entries )
194
172
{
195
- SymbolLabel = symbolLabel ;
196
173
Entries = entries ;
197
174
}
198
175
}
@@ -219,6 +196,8 @@ sealed class ConstructionState
219
196
public Dictionary < string , TypeMapJava > JavaTypesByName ;
220
197
public List < StructureInstance < TypeMapJava > > JavaMap ;
221
198
public List < ModuleMapData > AllModulesData ;
199
+ public List < List < StructureInstance < TypeMapModuleEntry > > > AllModulesMaps ;
200
+ public List < List < StructureInstance < TypeMapModuleEntry > > > AllModulesDuplicates ;
222
201
public LlvmIrStringBlob AssemblyNamesBlob ;
223
202
public LlvmIrStringBlob JavaTypeNamesBlob ;
224
203
public LlvmIrStringBlob ManagedTypeNamesBlob ;
@@ -289,13 +268,25 @@ protected override void Construct (LlvmIrModule module)
289
268
java_to_managed_hashes . WriteOptions &= ~ LlvmIrVariableWriteOptions . ArrayWriteIndexComments ;
290
269
module . Add ( java_to_managed_hashes ) ;
291
270
292
- foreach ( ModuleMapData mmd in cs . AllModulesData ) {
293
- var mmdVar = new LlvmIrGlobalVariable ( mmd . Entries , mmd . SymbolLabel , LlvmIrVariableOptions . LocalConstant ) {
294
- BeforeWriteCallback = SortEntriesAndUpdateJavaIndexes ,
295
- BeforeWriteCallbackCallerState = cs ,
296
- } ;
297
- module . Add ( mmdVar ) ;
298
- }
271
+ // foreach (ModuleMapData mmd in cs.AllModulesData) {
272
+ // var mmdVar = new LlvmIrGlobalVariable (mmd.Entries, mmd.SymbolLabel, LlvmIrVariableOptions.LocalConstant) {
273
+ // BeforeWriteCallback = SortEntriesAndUpdateJavaIndexes,
274
+ // BeforeWriteCallbackCallerState = cs,
275
+ // };
276
+ // module.Add (mmdVar);
277
+ // }
278
+
279
+ var modulesMapData = new LlvmIrGlobalVariable ( cs . AllModulesMaps , "modules_map_data" , LlvmIrVariableOptions . GlobalConstant ) {
280
+ BeforeWriteCallback = SortEntriesAndUpdateJavaIndexes ,
281
+ BeforeWriteCallbackCallerState = cs ,
282
+ } ;
283
+ module . Add ( modulesMapData ) ;
284
+
285
+ var modulesDuplicatesData = new LlvmIrGlobalVariable ( cs . AllModulesMaps , "modules_duplicates_data" , LlvmIrVariableOptions . GlobalConstant ) {
286
+ BeforeWriteCallback = SortEntriesAndUpdateJavaIndexes ,
287
+ BeforeWriteCallbackCallerState = cs ,
288
+ } ;
289
+ module . Add ( modulesMapData ) ;
299
290
300
291
module . AddGlobalVariable ( "java_to_managed_map" , cs . JavaMap , LlvmIrVariableOptions . GlobalConstant , " Java to managed map" ) ;
301
292
module . AddGlobalVariable ( "java_type_names" , cs . JavaTypeNamesBlob , LlvmIrVariableOptions . GlobalConstant , " Java type names" ) ;
@@ -433,21 +424,17 @@ void InitMapModules (ConstructionState cs)
433
424
434
425
cs . MapModules = new List < StructureInstance < TypeMapModule > > ( ) ;
435
426
cs . AssemblyNamesBlob = new ( ) ;
436
- foreach ( TypeMapGenerator . ModuleReleaseData data in mappingData . Modules ) {
437
- string mapName = $ "module{ moduleCounter ++ } _managed_to_java";
438
- string duplicateMapName ;
439
-
440
- if ( data . DuplicateTypes . Count == 0 ) {
441
- duplicateMapName = String . Empty ;
442
- } else {
443
- duplicateMapName = $ "{ mapName } _duplicates";
444
- }
427
+ cs . AllModulesMaps = new ( ) ;
428
+ cs . AllModulesDuplicates = new ( ) ;
445
429
430
+ uint map_start_index = 0 ;
431
+ uint duplicates_start_index = 0 ;
432
+ foreach ( TypeMapGenerator . ModuleReleaseData data in mappingData . Modules ) {
433
+ bool haveDuplicates = data . DuplicateTypes . Count > 0 ;
446
434
( int assemblyNameIndex , int assemblyNameLength ) = cs . AssemblyNamesBlob . Add ( data . AssemblyName ) ;
435
+
447
436
var map_module = new TypeMapModule {
448
437
MVID = data . Mvid ,
449
- MapSymbolName = mapName ,
450
- DuplicateMapSymbolName = duplicateMapName . Length == 0 ? null : duplicateMapName ,
451
438
Data = data ,
452
439
AssemblyName = data . AssemblyName ,
453
440
@@ -456,8 +443,13 @@ void InitMapModules (ConstructionState cs)
456
443
duplicate_count = ( uint ) data . DuplicateTypes . Count ,
457
444
assembly_name_index = ( uint ) assemblyNameIndex ,
458
445
assembly_name_length = ( uint ) assemblyNameLength ,
446
+ map_index = map_start_index ,
447
+ duplicate_map_index = haveDuplicates ? duplicates_start_index : 0 ,
459
448
} ;
460
449
450
+ map_start_index += map_module . entry_count ;
451
+ duplicates_start_index += map_module . duplicate_count ;
452
+
461
453
cs . MapModules . Add ( new StructureInstance < TypeMapModule > ( typeMapModuleStructureInfo , map_module ) ) ;
462
454
}
463
455
}
@@ -469,14 +461,15 @@ void MapStructures (LlvmIrModule module)
469
461
typeMapModuleEntryStructureInfo = module . MapStructure < TypeMapModuleEntry > ( ) ;
470
462
}
471
463
472
- void PrepareMapModuleData ( string moduleDataSymbolLabel , IEnumerable < TypeMapGenerator . TypeMapReleaseEntry > moduleEntries , ConstructionState cs )
464
+ void PrepareMapModuleData ( IEnumerable < TypeMapGenerator . TypeMapReleaseEntry > moduleEntries , List < List < StructureInstance < TypeMapModuleEntry > > > destCollection , string sectionComment , ConstructionState cs )
473
465
{
474
466
var mapModuleEntries = new List < StructureInstance < TypeMapModuleEntry > > ( ) ;
475
467
foreach ( TypeMapGenerator . TypeMapReleaseEntry entry in moduleEntries ) {
476
468
if ( ! cs . JavaTypesByName . TryGetValue ( entry . JavaName , out TypeMapJava javaType ) ) {
477
469
throw new InvalidOperationException ( $ "Internal error: Java type '{ entry . JavaName } ' not found in cache") ;
478
470
}
479
471
472
+ mapModuleEntries . Add ( new StructureInstance < TypeMapModuleEntry > ( typeMapModuleEntryStructureInfo , sectionComment ) ) ;
480
473
var map_entry = new TypeMapModuleEntry {
481
474
JavaTypeMapEntry = javaType ,
482
475
ManagedTypeName = entry . ManagedTypeName ,
@@ -487,19 +480,27 @@ void PrepareMapModuleData (string moduleDataSymbolLabel, IEnumerable<TypeMapGene
487
480
} ;
488
481
mapModuleEntries . Add ( new StructureInstance < TypeMapModuleEntry > ( typeMapModuleEntryStructureInfo , map_entry ) ) ;
489
482
}
490
-
491
- // mapModuleEntries.Sort ((StructureInstance<TypeMapModuleEntry> a, StructureInstance<TypeMapModuleEntry> b) => a.Instance.type_token_id.CompareTo (b.Instance.type_token_id));
492
- cs . AllModulesData . Add ( new ModuleMapData ( moduleDataSymbolLabel , mapModuleEntries ) ) ;
483
+ destCollection . Add ( mapModuleEntries ) ;
493
484
}
494
485
495
486
void PrepareModules ( ConstructionState cs )
496
487
{
497
488
cs . AllModulesData = new List < ModuleMapData > ( ) ;
498
489
foreach ( StructureInstance < TypeMapModule > moduleInstance in cs . MapModules ) {
499
490
TypeMapModule module = moduleInstance . Instance ;
500
- PrepareMapModuleData ( module . MapSymbolName , module . Data . Types , cs ) ;
491
+ PrepareMapModuleData (
492
+ module . Data . Types ,
493
+ cs . AllModulesMaps ,
494
+ $ "Module: { module . AssemblyName } ; MVID: { module . MVID } ; number of entries: { module . Data . Types . Length } ",
495
+ cs
496
+ ) ;
501
497
if ( module . Data . DuplicateTypes . Count > 0 ) {
502
- PrepareMapModuleData ( module . DuplicateMapSymbolName , module . Data . DuplicateTypes , cs ) ;
498
+ PrepareMapModuleData (
499
+ module . Data . DuplicateTypes ,
500
+ cs . AllModulesDuplicates ,
501
+ $ "Module: { module . AssemblyName } ; MVID: { module . MVID } ; number of entries: { module . Data . DuplicateTypes . Count } ",
502
+ cs
503
+ ) ;
503
504
}
504
505
}
505
506
}
0 commit comments