diff options
Diffstat (limited to 'src/md')
-rw-r--r-- | src/md/ceefilegen/cceegen.cpp | 24 | ||||
-rw-r--r-- | src/md/winmd/adapter.cpp | 28 | ||||
-rw-r--r-- | src/md/winmd/inc/adapter.h | 2 | ||||
-rw-r--r-- | src/md/winmd/winmdimport.cpp | 30 |
4 files changed, 50 insertions, 34 deletions
diff --git a/src/md/ceefilegen/cceegen.cpp b/src/md/ceefilegen/cceegen.cpp index 268093cd6b..0cf0780d15 100644 --- a/src/md/ceefilegen/cceegen.cpp +++ b/src/md/ceefilegen/cceegen.cpp @@ -572,18 +572,20 @@ HRESULT CCeeGen::emitMetaData(IMetaDataEmit *emitter, CeeSection* section, DWORD _ASSERTE(metaDataLen <= buffLen); #ifdef ENC_DELTA_HACK - extern int __cdecl fclose(FILE *); - WCHAR szFileName[256]; - DWORD len = GetEnvironmentVariable(W("COMP_ENC_EMIT"), szFileName, ARRAYSIZE(szFileName)); - _ASSERTE(len < (ARRAYSIZE(szFileName) + 6)); // +6 for the .dmeta - if (len > 0 && len < (ARRAYSIZE(szFileName) + 6)) { - wcscat_s(szFileName, ARRAYSIZE(szFileName), W(".dmeta")); - FILE *pDelta; - int ec = _wfopen_s(&pDelta, szFileName, W("wb")); - if (FAILED(ec)) { return HRESULT_FROM_WIN32(ERROR_OPEN_FAILED); } - fwrite(buffer, 1, metaDataLen, pDelta); - fclose(pDelta); + extern int __cdecl fclose(FILE *); + WCHAR szFileName[256]; + DWORD len = GetEnvironmentVariable(W("COMP_ENC_EMIT"), szFileName, ARRAYSIZE(szFileName)); + _ASSERTE(len < (ARRAYSIZE(szFileName) + 6)); // +6 for the .dmeta + if (len > 0 && len < (ARRAYSIZE(szFileName) + 6)) + { + wcscat_s(szFileName, ARRAYSIZE(szFileName), W(".dmeta")); + FILE *pDelta; + int ec = _wfopen_s(&pDelta, szFileName, W("wb")); + if (FAILED(ec)) { return HRESULT_FROM_WIN32(ERROR_OPEN_FAILED); } + fwrite(buffer, 1, metaDataLen, pDelta); + fclose(pDelta); + } } #endif diff --git a/src/md/winmd/adapter.cpp b/src/md/winmd/adapter.cpp index 5b4d95cc7c..2c9dd1b9fd 100644 --- a/src/md/winmd/adapter.cpp +++ b/src/md/winmd/adapter.cpp @@ -88,6 +88,8 @@ HRESULT CheckIfWinMDAdapterNeeded(IMDCommon *pRawMDCommon) HRESULT hr; LPWSTR wszCorVersion = NULL; WinMDAdapter* pNewAdapter = NULL; + ULONG numAssemblyRefs = 0; + const char *szClrPortion = NULL; *ppAdapter = NULL; @@ -102,7 +104,7 @@ HRESULT CheckIfWinMDAdapterNeeded(IMDCommon *pRawMDCommon) //------------------------------------------------------------------------------------------------ LPCSTR szVersion; IfFailGo(pRawMDCommon->GetVersionString(&szVersion)); - const char *szClrPortion = strchr(szVersion, ';'); + szClrPortion = strchr(szVersion, ';'); if (szClrPortion) { pNewAdapter->m_scenario = kWinMDExp; @@ -148,7 +150,7 @@ HRESULT CheckIfWinMDAdapterNeeded(IMDCommon *pRawMDCommon) //------------------------------------------------------------------------------------------------ // Find an assemblyRef to mscorlib (required to exist in .winmd files precisely to make the adapter's job easier. //------------------------------------------------------------------------------------------------ - ULONG numAssemblyRefs = pNewAdapter->m_pRawMetaModelCommonRO->CommonGetRowCount(mdtAssemblyRef); + numAssemblyRefs = pNewAdapter->m_pRawMetaModelCommonRO->CommonGetRowCount(mdtAssemblyRef); pNewAdapter->m_assemblyRefMscorlib = 0; pNewAdapter->m_fReferencesMscorlibV4 = FALSE; for (ULONG rid = 1; rid <= numAssemblyRefs; rid++) @@ -860,10 +862,11 @@ WinMDAdapter::GetTypeRefProps( HRESULT hr; ULONG treatment; + ULONG treatmentClass; IfFailGo(GetTypeRefTreatment(tkTypeRef, &treatment)); _ASSERTE(treatment != kTrNotYetInitialized); - ULONG treatmentClass = treatment & kTrClassMask; + treatmentClass = treatment & kTrClassMask; if (treatmentClass == kTrClassWellKnownRedirected) { ULONG nRewritePairIndex = treatment & ~kTrClassMask; @@ -998,9 +1001,10 @@ WinMDAdapter::GetTypeRefRedirectedInfo( HRESULT hr; ULONG treatment; + ULONG treatmentClass; IfFailGo(GetTypeRefTreatment(tkTypeRef, &treatment)); - ULONG treatmentClass = treatment & kTrClassMask; + treatmentClass = treatment & kTrClassMask; if (treatmentClass == kTrClassWellKnownRedirected) { *pIndex = (RedirectedTypeIndex)(treatment & ~kTrClassMask); @@ -1278,11 +1282,14 @@ HRESULT WinMDAdapter::ModifyMethodProps(mdMethodDef tkMethodDef, /*[in, out]*/ D _ASSERTE(TypeFromToken(tkMethodDef) == mdtMethodDef); ULONG mdTreatment; + DWORD dwAttr; + DWORD dwImplFlags; + ULONG ulRVA; IfFailGo(GetMethodDefTreatment(tkMethodDef, &mdTreatment)); - DWORD dwAttr = pdwAttr ? *pdwAttr: 0; - DWORD dwImplFlags = pdwImplFlags ? *pdwImplFlags : 0; - ULONG ulRVA = pulRVA ? *pulRVA : 0; + dwAttr = pdwAttr ? *pdwAttr: 0; + dwImplFlags = pdwImplFlags ? *pdwImplFlags : 0; + ulRVA = pulRVA ? *pulRVA : 0; switch (mdTreatment & kMdTreatmentMask) { @@ -2400,9 +2407,12 @@ HRESULT WinMDAdapter::TranslateWinMDAttributeUsageAttribute(mdTypeDef tkTypeDefO { IfFailGo(COR_E_BADIMAGEFORMAT); } - DWORD wfTargetValue = *(DWORD*)(pbWFUsageBlob + 2); - *pClrTargetValue = ConvertToClrAttributeTarget(wfTargetValue); + { + DWORD wfTargetValue = *(DWORD*)(pbWFUsageBlob + 2); + *pClrTargetValue = ConvertToClrAttributeTarget(wfTargetValue); + } + // add AttributeTargets.Method, AttributeTargets.Constructor , AttributeTargets.Property, and AttributeTargets.Event if this is the VersionAttribute LPCSTR szNamespace; LPCSTR szName; diff --git a/src/md/winmd/inc/adapter.h b/src/md/winmd/inc/adapter.h index e69b620938..e42992f81f 100644 --- a/src/md/winmd/inc/adapter.h +++ b/src/md/winmd/inc/adapter.h @@ -136,7 +136,7 @@ public: static BOOL ConvertWellKnownTypeNameFromClrToWinRT(LPCSTR *pszFullName); // Map a well-known CLR typename to WinRT typename - static BOOL WinMDAdapter::ConvertWellKnownTypeNameFromClrToWinRT(LPCSTR *pszNamespace, LPCSTR *pszName); + static BOOL ConvertWellKnownTypeNameFromClrToWinRT(LPCSTR *pszNamespace, LPCSTR *pszName); // Returns names of redirected type 'index'. static void GetRedirectedTypeInfo( diff --git a/src/md/winmd/winmdimport.cpp b/src/md/winmd/winmdimport.cpp index fe80bf0b04..cc983d2bfc 100644 --- a/src/md/winmd/winmdimport.cpp +++ b/src/md/winmd/winmdimport.cpp @@ -588,13 +588,15 @@ class WinMDImport : public IMetaDataImport2 *pmb = mdMethodDefNil; - // check to see if this is a vararg signature - PCCOR_SIGNATURE pvSigTemp = pvSigBlob; - if (isCallConv(CorSigUncompressCallingConv(pvSigTemp), IMAGE_CEE_CS_CALLCONV_VARARG)) { - // Get the fixed part of VARARG signature - IfFailGo(_GetFixedSigOfVarArg(pvSigBlob, cbSigBlob, &qbSig, &cbSigBlob)); - pvSigBlob = (PCCOR_SIGNATURE) qbSig.Ptr(); + // check to see if this is a vararg signature + PCCOR_SIGNATURE pvSigTemp = pvSigBlob; + if (isCallConv(CorSigUncompressCallingConv(pvSigTemp), IMAGE_CEE_CS_CALLCONV_VARARG)) + { + // Get the fixed part of VARARG signature + IfFailGo(_GetFixedSigOfVarArg(pvSigBlob, cbSigBlob, &qbSig, &cbSigBlob)); + pvSigBlob = (PCCOR_SIGNATURE) qbSig.Ptr(); + } } // now iterate all methods in td and compare name and signature @@ -1654,15 +1656,17 @@ class WinMDImport : public IMetaDataImport2 // Step 1: Call EnumAssemblyRefs with an empty buffer to create the HENUMInternal IfFailGo(m_pRawAssemblyImport->EnumAssemblyRefs(phEnum, NULL, 0, NULL)); - // Step 2: Increment the cound to include the extra assembly refs - HENUMInternal *phInternalEnum = static_cast<HENUMInternal*>(*phEnum); + { + // Step 2: Increment the count to include the extra assembly refs + HENUMInternal *phInternalEnum = static_cast<HENUMInternal*>(*phEnum); - _ASSERTE(phInternalEnum->m_EnumType == MDSimpleEnum); + _ASSERTE(phInternalEnum->m_EnumType == MDSimpleEnum); - _ASSERTE( phInternalEnum->m_ulCount == m_pWinMDAdapter->GetRawAssemblyRefCount()); - int n = m_pWinMDAdapter->GetExtraAssemblyRefCount(); - phInternalEnum->m_ulCount += n; - phInternalEnum->u.m_ulEnd += n; + _ASSERTE( phInternalEnum->m_ulCount == m_pWinMDAdapter->GetRawAssemblyRefCount()); + int n = m_pWinMDAdapter->GetExtraAssemblyRefCount(); + phInternalEnum->m_ulCount += n; + phInternalEnum->u.m_ulEnd += n; + } // Step 3: Call EnumAssemblyRefs again and pass in the modifed HENUMInternal and the real buffer IfFailGo(m_pRawAssemblyImport->EnumAssemblyRefs(phEnum, rAssemblyRefs, cMax, pcTokens)); |