public override Vertex WriteVertex(NodeFactory factory) { Vertex containingType = _containingTypeSig.WriteVertex(factory); Vertex methodSig = _methodSig.WriteVertex(factory); Vertex methodNameAndSig = GetNativeWriter(factory).GetMethodNameAndSigSignature(_method.Name, methodSig); Debug.Assert(_instantiationArgsSig == null || (_method.HasInstantiation && _method.Instantiation.Length == _instantiationArgsSig.Length)); Vertex[] args = null; MethodFlags flags = 0; if (_method.HasInstantiation) { flags |= MethodFlags.HasInstantiation; args = new Vertex[_method.Instantiation.Length]; for (int i = 0; i < args.Length; i++) { args[i] = _instantiationArgsSig[i].WriteVertex(factory); } } Vertex signature = GetNativeWriter(factory).GetMethodSignature((uint)flags, 0, containingType, methodNameAndSig, args); return(SetSavedVertex(factory.MetadataManager.NativeLayoutInfo.LdTokenInfoSection.Place(signature))); }
public override Vertex WriteVertex(NodeFactory factory) { Vertex containingType = GetContainingTypeVertex(factory); Vertex methodSig = _methodSig.WriteVertex(factory); Vertex methodNameAndSig = GetNativeWriter(factory).GetMethodNameAndSigSignature(_method.Name, methodSig); Vertex[] args = null; MethodFlags flags = 0; if (_method.HasInstantiation) { Debug.Assert(_instantiationArgsSig == null || (_instantiationArgsSig != null && _method.Instantiation.Length == _instantiationArgsSig.Length)); flags |= MethodFlags.HasInstantiation; args = new Vertex[_method.Instantiation.Length]; for (int i = 0; i < args.Length; i++) { if ((_flags & MethodEntryFlags.CreateInstantiatedSignature) != 0) { IEETypeNode eetypeNode = factory.NecessaryTypeSymbol(_method.Instantiation[i]); uint typeIndex = factory.MetadataManager.NativeLayoutInfo.ExternalReferences.GetIndex(eetypeNode); args[i] = GetNativeWriter(factory).GetExternalTypeSignature(typeIndex); } else { args[i] = _instantiationArgsSig[i].WriteVertex(factory); } } } uint fptrReferenceId = 0; if ((_flags & MethodEntryFlags.SaveEntryPoint) != 0) { flags |= MethodFlags.HasFunctionPointer; bool getUnboxingStub = _method.OwningType.IsValueType && !_method.Signature.IsStatic; IMethodNode methodEntryPointNode = factory.MethodEntrypoint(_method, getUnboxingStub); fptrReferenceId = factory.MetadataManager.NativeLayoutInfo.ExternalReferences.GetIndex(methodEntryPointNode); if (getUnboxingStub) { flags |= MethodFlags.IsUnboxingStub; } if (_method.IsCanonicalMethod(CanonicalFormKind.Universal)) { flags |= MethodFlags.FunctionPointerIsUSG; } } return(GetNativeWriter(factory).GetMethodSignature((uint)flags, fptrReferenceId, containingType, methodNameAndSig, args)); }
public override Vertex WriteVertex(NodeFactory factory) { Vertex methodSig = _methodSig.WriteVertex(factory); return(GetNativeWriter(factory).GetMethodNameAndSigSignature(_method.Name, methodSig)); }