@@ -238,14 +238,7 @@ CompilerConfiguration configuration
238238
239239 var module = assembly . DefineDynamicModule ( "CompiledWebAssembly" ) ;
240240
241- var importBuilder = module . DefineType ( "Imports" ) ;
242- var instanceContainer = typeof ( Instance < > ) . MakeGenericType ( importBuilder ) ;
243- var exportContainer = module . DefineType ( "Exports" ) ;
244-
245- FromBinary ( assembly , reader , configuration , instanceContainer , exportContainer , module , importBuilder ) ;
246-
247- importBuilder . CreateType ( ) ;
248- exportContainer . CreateType ( ) ;
241+ FromBinary ( assembly , reader , configuration , null , null , module , null ) ;
249242
250243 return assembly ;
251244 }
@@ -280,8 +273,8 @@ private static ConstructorInfo FromBinary(
280273 AssemblyBuilder assembly ,
281274 Reader reader ,
282275 CompilerConfiguration configuration ,
283- Type instanceContainer ,
284- Type exportContainer ,
276+ Type ? instanceContainer ,
277+ Type ? exportContainer ,
285278 ModuleBuilder module ,
286279 TypeBuilder ? importBuilder = null
287280 )
@@ -310,7 +303,14 @@ private static ConstructorInfo FromBinary(
310303 var previousSection = Section. None;
311304
312305 var context = new CompilationContext ( configuration ) ;
313- var exportsBuilder = context. CheckedExportsBuilder = module. DefineType( "CompiledExports" , ClassAttributes , exportContainer ) ;
306+ var exportsBuilder = context. CheckedExportsBuilder = module. DefineType(
307+ #if NET9_0_OR_GREATER
308+ configuration . TypeName ,
309+ #else
310+ "CompiledExports" ,
311+ #endif
312+ ClassAttributes ,
313+ exportContainer ) ;
314314 MethodBuilder ? importedMemoryProvider = null ;
315315 FieldBuilder? memory = null ;
316316
@@ -329,7 +329,7 @@ private static ConstructorInfo FromBinary(
329329 }
330330 else
331331 {
332- var usableConstructor = exportContainer . GetTypeInfo ( ) . DeclaredConstructors . FirstOrDefault ( c => c . GetParameters ( ) . Length == 0 ) ;
332+ var usableConstructor = exportContainer ? . GetTypeInfo ( ) . DeclaredConstructors . FirstOrDefault ( c => c . GetParameters ( ) . Length == 0 ) ;
333333 if ( usableConstructor != null )
334334 {
335335 instanceConstructorIL . Emit ( OpCodes . Ldarg_0 ) ;
@@ -633,6 +633,9 @@ private static ConstructorInfo FromBinary(
633633 instanceConstructorIL. Emit( OpCodes. Ret) ; //Finish the constructor.
634634 var exportInfo = exportsBuilder. CreateTypeInfo( ) ;
635635
636+ if ( importBuilder is null && instanceContainer is null )
637+ return exportInfo. DeclaredConstructors. First( ) ;
638+
636639 TypeInfo instance;
637640 {
638641 var instanceBuilder = module. DefineType( "CompiledInstance", ClassAttributes, instanceContainer) ;
@@ -660,7 +663,7 @@ private static ConstructorInfo FromBinary(
660663
661664 importConstructor = importConstructorBuilder;
662665 }
663- else
666+ else if ( instanceContainer is not null )
664667 {
665668 importConstructor = instanceContainer
666669 . GetTypeInfo( )
@@ -670,6 +673,10 @@ private static ConstructorInfo FromBinary(
670673 ? . ParameterType == exportContainer
671674 ) ;
672675 }
676+ else
677+ {
678+ return exportInfo. DeclaredConstructors . First ( ) ;
679+ }
673680
674681 il. Emit ( OpCodes . Call , importConstructor ) ;
675682 il. Emit ( OpCodes . Ret ) ;
0 commit comments