public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { // This node does not trigger generation of other nodes. if (relocsOnly) { return(new ObjectData(Array.Empty <byte>(), Array.Empty <Relocation>(), 1, new ISymbolNode[] { this })); } var writer = new NativeWriter(); var typeMapHashTable = new VertexHashtable(); Section hashTableSection = writer.NewSection(); hashTableSection.Place(typeMapHashTable); foreach (var delegateEntry in factory.MetadataManager.DelegateMarshalingThunks) { Internal.TypeSystem.TypeDesc delegateType = delegateEntry.Value.DelegateType; Vertex vertex = writer.GetTuple( writer.GetUnsignedConstant(_externalReferences.GetIndex(factory.NecessaryTypeSymbol(delegateType))), writer.GetUnsignedConstant(_externalReferences.GetIndex(factory.MethodEntrypoint(delegateEntry.Value))) ); int hashCode = delegateType.GetHashCode(); typeMapHashTable.Append((uint)hashCode, hashTableSection.Place(vertex)); } byte[] hashTableBytes = writer.Save(); _endSymbol.SetSymbolOffset(hashTableBytes.Length); return(new ObjectData(hashTableBytes, Array.Empty <Relocation>(), 1, new ISymbolNode[] { this, _endSymbol })); }
private static void PrintMethod(EcmaMethod method) { Write(method.Name); Write("("); try { if (method.Signature.Length > 0) { bool first = true; for (int i = 0; i < method.Signature.Length; i++) { Internal.TypeSystem.TypeDesc parameter = method.Signature[i]; if (first) { first = false; } else { Write(", "); } Write(parameter.ToString()); } } } catch { Write("Error while getting method signature"); } Write(")"); }