private void EmitInstantiatedTypeSignature(InstantiatedType type, SignatureContext context) { EcmaModule targetModule = context.GetTargetModule(type); EmitModuleOverride(targetModule, context); EmitElementType(CorElementType.ELEMENT_TYPE_GENERICINST); EmitTypeSignature(type.GetTypeDefinition(), context.InnerContext(targetModule)); EmitUInt((uint)type.Instantiation.Length); for (int paramIndex = 0; paramIndex < type.Instantiation.Length; paramIndex++) { EmitTypeSignature(type.Instantiation[paramIndex], context); } }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ReadyToRunCodegenNodeFactory r2rFactory = (ReadyToRunCodegenNodeFactory)factory; ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder(); dataBuilder.AddSymbol(this); EcmaModule targetModule = _signatureContext.GetTargetModule(_arrayType); SignatureContext innerContext = dataBuilder.EmitFixup(r2rFactory, ReadyToRunFixupKind.READYTORUN_FIXUP_NewArray, targetModule, _signatureContext); dataBuilder.EmitTypeSignature(_arrayType, innerContext); return(dataBuilder.ToObjectData()); }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder(); if (!relocsOnly) { dataBuilder.AddSymbol(this); EcmaModule targetModule = _signatureContext.GetTargetModule(_arrayType); SignatureContext innerContext = dataBuilder.EmitFixup(factory, ReadyToRunFixupKind.NewArray, targetModule, _signatureContext); dataBuilder.EmitTypeSignature(_arrayType, innerContext); } return(dataBuilder.ToObjectData()); }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ReadyToRunCodegenNodeFactory r2rFactory = (ReadyToRunCodegenNodeFactory)factory; ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder(); if (!relocsOnly) { dataBuilder.AddSymbol(this); EcmaModule targetModule = _signatureContext.GetTargetModule(_typeDesc); SignatureContext innerContext = dataBuilder.EmitFixup(r2rFactory, ReadyToRunFixupKind.NewObject, targetModule, _signatureContext); dataBuilder.EmitTypeSignature(_typeDesc, innerContext); } return(dataBuilder.ToObjectData()); }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder(); if (!relocsOnly) { dataBuilder.AddSymbol(this); EcmaModule targetModule = _signatureContext.GetTargetModule(_fieldDesc); SignatureContext innerContext = dataBuilder.EmitFixup(factory, _fixupKind, targetModule, _signatureContext); dataBuilder.EmitFieldSignature(_fieldDesc, innerContext); } return(dataBuilder.ToObjectData()); }
public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) { if (relocsOnly) { return(new ObjectData(Array.Empty <byte>(), null, 1, null)); } ReadyToRunCodegenNodeFactory r2rFactory = (ReadyToRunCodegenNodeFactory)factory; // Determine the need for module override EcmaModule targetModule; if (_methodArgument != null) { targetModule = _methodArgument.Token.Module; } else if (_typeArgument != null) { targetModule = _signatureContext.GetTargetModule(_typeArgument); } else if (_fieldArgument != null) { targetModule = _signatureContext.GetTargetModule(_fieldArgument); } else { throw new NotImplementedException(); } ReadyToRunFixupKind fixupToEmit; TypeDesc contextTypeToEmit = null; switch (_runtimeLookupKind) { case CORINFO_RUNTIME_LOOKUP_KIND.CORINFO_LOOKUP_CLASSPARAM: fixupToEmit = ReadyToRunFixupKind.READYTORUN_FIXUP_TypeDictionaryLookup; break; case CORINFO_RUNTIME_LOOKUP_KIND.CORINFO_LOOKUP_METHODPARAM: fixupToEmit = ReadyToRunFixupKind.READYTORUN_FIXUP_MethodDictionaryLookup; break; case CORINFO_RUNTIME_LOOKUP_KIND.CORINFO_LOOKUP_THISOBJ: fixupToEmit = ReadyToRunFixupKind.READYTORUN_FIXUP_ThisObjDictionaryLookup; contextTypeToEmit = _methodContext.ContextType; break; default: throw new NotImplementedException(); } ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder(); dataBuilder.AddSymbol(this); SignatureContext innerContext = dataBuilder.EmitFixup(r2rFactory, fixupToEmit, targetModule, _signatureContext); if (contextTypeToEmit != null) { dataBuilder.EmitTypeSignature(contextTypeToEmit, innerContext); } dataBuilder.EmitByte((byte)_fixupKind); if (_methodArgument != null) { dataBuilder.EmitMethodSignature( method: _methodArgument.Method, constrainedType: _typeArgument, methodToken: _methodArgument.Token, enforceDefEncoding: false, context: innerContext, isUnboxingStub: false, isInstantiatingStub: true); } else if (_typeArgument != null) { dataBuilder.EmitTypeSignature(_typeArgument, innerContext); } else if (_fieldArgument != null) { dataBuilder.EmitFieldSignature(_fieldArgument, innerContext); } else { throw new NotImplementedException(); } return(dataBuilder.ToObjectData()); }