From 7ee123b1e205f544a59775cfbe267936591bf5c8 Mon Sep 17 00:00:00 2001 From: Aleksey Kliger Date: Wed, 14 Jun 2017 17:14:29 -0400 Subject: [PATCH] [coop handles] Add MONO_HANDLE_SET_FIELD_REF macro Set a field in an object when you have a MonoClassField* --- mono/metadata/handle.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mono/metadata/handle.h b/mono/metadata/handle.h index e0bf25281c5..5de55eebc82 100644 --- a/mono/metadata/handle.h +++ b/mono/metadata/handle.h @@ -423,6 +423,13 @@ This is why we evaluate index and value before any call to MONO_HANDLE_RAW or ot *(TYPE*)(mono_handle_unsafe_field_addr (__obj, __field)) = __value; \ } while (0) +#define MONO_HANDLE_SET_FIELD_REF(HANDLE,FIELD,VALH) do { \ + MonoObjectHandle __obj = MONO_HANDLE_CAST (MonoObject, (HANDLE)); \ + MonoClassField *__field = (FIELD); \ + MonoObjectHandle __value = MONO_HANDLE_CAST (MonoObject, (VALH)); \ + mono_gc_wbarrier_generic_store (mono_handle_unsafe_field_addr (__obj, __field), MONO_HANDLE_RAW (__value)); \ + } while (0) + /* Baked typed handles we all want */ TYPED_HANDLE_DECL (MonoString); TYPED_HANDLE_DECL (MonoArray); -- 2.25.1