summaryrefslogtreecommitdiff
path: root/src/zap
diff options
context:
space:
mode:
authorFadi Hanna <fadim@microsoft.com>2016-08-04 12:51:18 -0700
committerGitHub <noreply@github.com>2016-08-04 12:51:18 -0700
commit010f42a541f9d1e787774a538d9b923a506ea8f2 (patch)
tree74fbcb4c733adfe6d57f5f352433345355289d56 /src/zap
parentc166c0ec0156e905c722889a84c815e802b47cbd (diff)
downloadcoreclr-010f42a541f9d1e787774a538d9b923a506ea8f2.tar.gz
coreclr-010f42a541f9d1e787774a538d9b923a506ea8f2.tar.bz2
coreclr-010f42a541f9d1e787774a538d9b923a506ea8f2.zip
Adding support to the following generic dictionary entry slots for R2R: (#6291)
DeclaringTypeHandleSlot ConstrainedMethodEntrySlot
Diffstat (limited to 'src/zap')
-rw-r--r--src/zap/zapimport.cpp17
-rw-r--r--src/zap/zapreadytorun.cpp2
2 files changed, 15 insertions, 4 deletions
diff --git a/src/zap/zapimport.cpp b/src/zap/zapimport.cpp
index 400ea7884d..47d0def2c1 100644
--- a/src/zap/zapimport.cpp
+++ b/src/zap/zapimport.cpp
@@ -1808,6 +1808,7 @@ ZapImport * ZapImportTable::GetDictionaryLookupCell(CORCOMPILE_FIXUP_BLOB_KIND k
switch (pLookup->runtimeLookupFlags)
{
case READYTORUN_FIXUP_TypeHandle:
+ case READYTORUN_FIXUP_DeclaringTypeHandle:
{
if (pResolvedToken->pTypeSpec == NULL)
{
@@ -1815,7 +1816,17 @@ ZapImport * ZapImportTable::GetDictionaryLookupCell(CORCOMPILE_FIXUP_BLOB_KIND k
ThrowHR(E_NOTIMPL);
}
- sigBuilder.AppendData(ENCODE_TYPE_HANDLE);
+ if (pLookup->runtimeLookupFlags == READYTORUN_FIXUP_DeclaringTypeHandle)
+ {
+ _ASSERTE(pLookup->runtimeLookupArgs != NULL);
+ sigBuilder.AppendData(ENCODE_DECLARINGTYPE_HANDLE);
+ GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), (CORINFO_CLASS_HANDLE)pLookup->runtimeLookupArgs, &sigBuilder, NULL, NULL);
+ }
+ else
+ {
+ sigBuilder.AppendData(ENCODE_TYPE_HANDLE);
+ }
+
if (pResolvedToken->tokenType == CORINFO_TOKENKIND_Newarr)
sigBuilder.AppendElementType(ELEMENT_TYPE_SZARRAY);
sigBuilder.AppendBlob((PVOID)pResolvedToken->pTypeSpec, pResolvedToken->cbTypeSpec);
@@ -1827,7 +1838,7 @@ ZapImport * ZapImportTable::GetDictionaryLookupCell(CORCOMPILE_FIXUP_BLOB_KIND k
break;
case READYTORUN_FIXUP_MethodEntry:
- EncodeMethod(ENCODE_METHOD_ENTRY, pResolvedToken->hMethod, &sigBuilder, pResolvedToken, NULL, TRUE);
+ EncodeMethod(ENCODE_METHOD_ENTRY, pResolvedToken->hMethod, &sigBuilder, pResolvedToken, (CORINFO_RESOLVED_TOKEN*)pLookup->runtimeLookupArgs, TRUE);
break;
case READYTORUN_FIXUP_VirtualEntry:
@@ -1838,8 +1849,6 @@ ZapImport * ZapImportTable::GetDictionaryLookupCell(CORCOMPILE_FIXUP_BLOB_KIND k
EncodeField(ENCODE_FIELD_HANDLE, pResolvedToken->hField, &sigBuilder, pResolvedToken, TRUE);
break;
- // TODO: support for the rest of the dictionary signature kinds
-
default:
_ASSERTE(!"Invalid R2R fixup kind!");
ThrowHR(E_NOTIMPL);
diff --git a/src/zap/zapreadytorun.cpp b/src/zap/zapreadytorun.cpp
index 7a9a802c76..ea42a25b8d 100644
--- a/src/zap/zapreadytorun.cpp
+++ b/src/zap/zapreadytorun.cpp
@@ -515,6 +515,8 @@ static_assert_no_msg((int)READYTORUN_FIXUP_Check_FieldOffset == (int)ENC
static_assert_no_msg((int)READYTORUN_FIXUP_DelegateCtor == (int)ENCODE_DELEGATE_CTOR);
+static_assert_no_msg((int)READYTORUN_FIXUP_DeclaringTypeHandle == (int)ENCODE_DECLARINGTYPE_HANDLE);
+
//
// READYTORUN_EXCEPTION
//