diff options
| author | Felipe Contreras <felipe.contreras@gmail.com> | 2021-05-15 16:21:01 -0500 |
|---|---|---|
| committer | David Bremner <david@tethera.net> | 2021-05-17 07:25:14 -0300 |
| commit | fba9774a81e90a179ccfa810c47a501eaf266e2b (patch) | |
| tree | 6e49156bad957ed80195e0d9dd6c33dbea17c2a7 /bindings/ruby/defs.h | |
| parent | 12c36a5e3f676d5108cede6ac09204fb62fa20b1 (diff) | |
ruby: move towards more modern RTypedData
Virtually the whole ruby core moved from RData to RTypeData, let's do so
ourselves too.
Basically the information typically passed through Data_Wrap_Struct is
now stored in a struct rb_data_type_t (mark and free functions). This
has the advantage that more information can be easily added, like the
name of the type, a custom data ponter, and more.
Data_Wrap_Struct is replaced with TypedData_Wrap_Struct, and the
information is stored in a struct rb_data_type_t, rather than passed
as arguments.
Check_Type is replaced with Check_TypedStruct, which is a wrapper for
rb_check_typeddata (with casts).
#define Check_TypedStruct(v, t) \
rb_check_typeddata(RBIMPL_CAST((VALUE)(v)), (t))
We can use rb_check_typeddata directly, just like we use rb_data_object_get
directly.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Diffstat (limited to 'bindings/ruby/defs.h')
| -rw-r--r-- | bindings/ruby/defs.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h index fcf1ea39..6dbaa85d 100644 --- a/bindings/ruby/defs.h +++ b/bindings/ruby/defs.h @@ -55,9 +55,11 @@ extern ID ID_db_mode; # define RSTRING_PTR(v) (RSTRING((v))->ptr) #endif /* !defined (RSTRING_PTR) */ +extern const rb_data_type_t notmuch_rb_object_type; + #define Data_Get_Notmuch_Object(obj, ptr) \ do { \ - (ptr) = rb_data_object_get ((obj)); \ + (ptr) = rb_check_typeddata ((obj), ¬much_rb_object_type); \ if (RB_UNLIKELY (!(ptr))) { \ VALUE cname = rb_class_name (CLASS_OF ((obj))); \ rb_raise (rb_eRuntimeError, "%"PRIsVALUE" object destroyed", cname); \ @@ -65,7 +67,7 @@ extern ID ID_db_mode; } while (0) #define Data_Wrap_Notmuch_Object(klass, ptr) \ - Data_Wrap_Struct ((klass), NULL, NULL, (ptr)) + TypedData_Wrap_Struct ((klass), ¬much_rb_object_type, (ptr)) #define Data_Get_Notmuch_Database(obj, ptr) \ Data_Get_Notmuch_Object ((obj), (ptr)) |
