diff options
Diffstat (limited to 'src/vm/customattribute.cpp')
-rw-r--r-- | src/vm/customattribute.cpp | 84 |
1 files changed, 42 insertions, 42 deletions
diff --git a/src/vm/customattribute.cpp b/src/vm/customattribute.cpp index 48d79a2271..a83815f8bf 100644 --- a/src/vm/customattribute.cpp +++ b/src/vm/customattribute.cpp @@ -141,58 +141,56 @@ CustomAttributeManagedValues Attribute::GetManagedCaValue(CaValue* pCaVal) CustomAttributeManagedValues gc; ZeroMemory(&gc, sizeof(gc)); - - CorSerializationType type = pCaVal->type.tag; - - if (type == SERIALIZATION_TYPE_ENUM) - { - gc.string = StringObject::NewString(pCaVal->type.szEnumName, pCaVal->type.cEnumName); - } - else if (type == SERIALIZATION_TYPE_STRING) - { - gc.string = NULL; + GCPROTECT_BEGIN(gc) + { + CorSerializationType type = pCaVal->type.tag; - if (pCaVal->str.pStr) - gc.string = StringObject::NewString(pCaVal->str.pStr, pCaVal->str.cbStr); - } - else if (type == SERIALIZATION_TYPE_TYPE) - { - gc.string = StringObject::NewString(pCaVal->str.pStr, pCaVal->str.cbStr); - } - else if (type == SERIALIZATION_TYPE_SZARRAY) - { - CorSerializationType arrayType = pCaVal->type.arrayType; - ULONG length = pCaVal->arr.length; - BOOL bAllBlittableCa = arrayType != SERIALIZATION_TYPE_ENUM; + if (type == SERIALIZATION_TYPE_ENUM) + { + gc.string = StringObject::NewString(pCaVal->type.szEnumName, pCaVal->type.cEnumName); + } + else if (type == SERIALIZATION_TYPE_STRING) + { + gc.string = NULL; + + if (pCaVal->str.pStr) + gc.string = StringObject::NewString(pCaVal->str.pStr, pCaVal->str.cbStr); + } + else if (type == SERIALIZATION_TYPE_TYPE) + { + gc.string = StringObject::NewString(pCaVal->str.pStr, pCaVal->str.cbStr); + } + else if (type == SERIALIZATION_TYPE_SZARRAY) + { + CorSerializationType arrayType = pCaVal->type.arrayType; + ULONG length = pCaVal->arr.length; + BOOL bAllBlittableCa = arrayType != SERIALIZATION_TYPE_ENUM; - if (length == (ULONG)-1) - return gc; - - gc.array = (CaValueArrayREF)AllocateValueSzArray(MscorlibBinder::GetClass(CLASS__CUSTOM_ATTRIBUTE_ENCODED_ARGUMENT), length); - CustomAttributeValue* pValues = gc.array->GetDirectPointerToNonObjectElements(); + if (arrayType == SERIALIZATION_TYPE_ENUM) + gc.string = StringObject::NewString(pCaVal->type.szEnumName, pCaVal->type.cEnumName); - for (COUNT_T i = 0; i < length; i ++) - Attribute::SetBlittableCaValue(&pValues[i], &pCaVal->arr[i], &bAllBlittableCa); + if (length != (ULONG)-1) + { + gc.array = (CaValueArrayREF)AllocateValueSzArray(MscorlibBinder::GetClass(CLASS__CUSTOM_ATTRIBUTE_ENCODED_ARGUMENT), length); + CustomAttributeValue* pValues = gc.array->GetDirectPointerToNonObjectElements(); - if (!bAllBlittableCa) - { - GCPROTECT_BEGIN(gc) - { - if (arrayType == SERIALIZATION_TYPE_ENUM) - gc.string = StringObject::NewString(pCaVal->type.szEnumName, pCaVal->type.cEnumName); - for (COUNT_T i = 0; i < length; i ++) + Attribute::SetBlittableCaValue(&pValues[i], &pCaVal->arr[i], &bAllBlittableCa); + + if (!bAllBlittableCa) { - CustomAttributeManagedValues managedCaValue = Attribute::GetManagedCaValue(&pCaVal->arr[i]); - Attribute::SetManagedValue( - managedCaValue, - &gc.array->GetDirectPointerToNonObjectElements()[i]); + for (COUNT_T i = 0; i < length; i ++) + { + CustomAttributeManagedValues managedCaValue = Attribute::GetManagedCaValue(&pCaVal->arr[i]); + Attribute::SetManagedValue( + managedCaValue, + &gc.array->GetDirectPointerToNonObjectElements()[i]); + } } } - GCPROTECT_END(); } } - + GCPROTECT_END(); return gc; } @@ -908,6 +906,7 @@ FCIMPL5(VOID, COMCustomAttribute::ParseAttributeUsageAttribute, PVOID pData, ULO } FCIMPLEND +#ifdef FEATURE_CAS_POLICY FCIMPL4(VOID, COMCustomAttribute::GetSecurityAttributes, ReflectModuleBaseObject *pModuleUNSAFE, DWORD tkToken, CLR_BOOL fAssembly, PTRARRAYREF* ppArray) { FCALL_CONTRACT; @@ -993,6 +992,7 @@ FCIMPL4(VOID, COMCustomAttribute::GetSecurityAttributes, ReflectModuleBaseObject HELPER_METHOD_FRAME_END(); } FCIMPLEND +#endif // FEATURE_CAS_POLICY FCIMPL7(void, COMCustomAttribute::GetPropertyOrFieldData, ReflectModuleBaseObject *pModuleUNSAFE, BYTE** ppBlobStart, BYTE* pBlobEnd, STRINGREF* pName, CLR_BOOL* pbIsProperty, OBJECTREF* pType, OBJECTREF* value) { |