public void TestSerializedSignatureWithReferenceToMDIntArray() { var typeInInitialContext = _context.GetWellKnownType(WellKnownType.Int32).MakeArrayType(3); // Create assembly with reference to interesting type TypeSystemMetadataEmitter metadataEmitter = new TypeSystemMetadataEmitter(new System.Reflection.AssemblyName("Lookup"), _context); var token = metadataEmitter.GetTypeRef(typeInInitialContext); Stream peStream = new MemoryStream(); metadataEmitter.SerializeToStream(peStream); peStream.Seek(0, SeekOrigin.Begin); // Create new TypeSystemContext with just created assembly inside var lookupContext = new TestTypeSystemContext(TargetArchitecture.X64); var systemModule = lookupContext.CreateModuleForSimpleName("CoreTestAssembly"); lookupContext.SetSystemModule(systemModule); lookupContext.CreateModuleForSimpleName("Lookup", peStream); // Use generated assembly to trigger a load through the token created above and verify that it loads correctly var ilLookupModule = (EcmaModule)lookupContext.GetModuleForSimpleName("Lookup"); TypeDesc int32ArrayFromLookup = ilLookupModule.GetType(token); var typeInLookupContext = lookupContext.GetWellKnownType(WellKnownType.Int32).MakeArrayType(3); Assert.Equal(typeInLookupContext, int32ArrayFromLookup); }
public void TestSerializedSignatureWithArrayShapes() { MetadataType modOptTester = _testModule.GetType("", "ModOptTester"); MethodDesc methodWithInterestingShapes = modOptTester.GetMethods().Single(m => string.Equals(m.Name, "Method4")); // Create assembly with reference to interesting method TypeSystemMetadataEmitter metadataEmitter = new TypeSystemMetadataEmitter(new System.Reflection.AssemblyName("Lookup"), _context); var token = metadataEmitter.GetMethodRef(methodWithInterestingShapes); Stream peStream = new MemoryStream(); metadataEmitter.SerializeToStream(peStream); peStream.Seek(0, SeekOrigin.Begin); // Create new TypeSystemContext with just created assembly inside var lookupContext = new TestTypeSystemContext(TargetArchitecture.X64); var systemModule = lookupContext.CreateModuleForSimpleName("CoreTestAssembly"); lookupContext.SetSystemModule(systemModule); lookupContext.CreateModuleForSimpleName("Lookup", peStream); // Use generated assembly to trigger a load through the token created above and verify that it loads correctly var ilLookupModule = (EcmaModule)lookupContext.GetModuleForSimpleName("Lookup"); MethodDesc method4 = ilLookupModule.GetMethod(token); Assert.Equal("Method4", method4.Name); }
private void ResetEmitter() { _reader = null; AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = _assemblyName; assemblyName.Version = _version; _currentBinaryEmitter = new ManagedBinaryEmitterForInternalUse(assemblyName, _module.Context, _assemblyFlags, _publicKeyArray, _hashAlgorithm, _moduleToIndex, _module); foreach (var entry in _values) { var perMetadata = _perMetadata[entry.Item1]; var handle = perMetadata.HandleGenerationFunction(_currentBinaryEmitter, entry.Item2); Debug.Assert(handle == ExistingEntities[entry.Item2]); } }
private int GetAssemblyRefHandle(TypeSystemMetadataEmitter emitter, object name) { return(MetadataTokens.GetToken(emitter.GetAssemblyRef((AssemblyName)name))); }
private int GetUserStringHandle(TypeSystemMetadataEmitter emitter, object str) { return(MetadataTokens.GetToken(emitter.GetUserStringHandle((string)str))); }
private int GetHandleForTypeSystemEntity(TypeSystemMetadataEmitter emitter, object type) { return(MetadataTokens.GetToken(emitter.EmitMetadataHandleForTypeSystemEntity((TypeSystemEntity)type))); }