public override ObjectData GetData(NodeFactory factory, bool relocsOnly) { Debug.Assert(MethodHasAssociatedData(factory, _methodNode)); ObjectDataBuilder objData = new ObjectDataBuilder(factory, relocsOnly); objData.RequireInitialAlignment(1); objData.AddSymbol(this); AssociatedDataFlags flags = AssociatedDataFlags.None; var flagsReservation = objData.ReserveByte(); ISpecialUnboxThunkNode unboxThunkNode = _methodNode as ISpecialUnboxThunkNode; if (unboxThunkNode != null && unboxThunkNode.IsSpecialUnboxingThunk) { flags |= AssociatedDataFlags.HasUnboxingStubTarget; objData.EmitReloc(unboxThunkNode.GetUnboxingThunkTarget(factory), RelocType.IMAGE_REL_BASED_RELPTR32); } objData.EmitByte(flagsReservation, (byte)flags); return(objData.ToObjectData()); }
public static bool MethodHasAssociatedData(NodeFactory factory, IMethodNode methodNode) { // Instantiating unboxing stubs. We need to store their non-unboxing target pointer (looked up by runtime) ISpecialUnboxThunkNode unboxThunk = methodNode as ISpecialUnboxThunkNode; if (unboxThunk != null && unboxThunk.IsSpecialUnboxingThunk) { return(true); } return(false); }