summaryrefslogtreecommitdiff
path: root/src/vm/customattribute.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm/customattribute.cpp')
-rw-r--r--src/vm/customattribute.cpp84
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)
{