summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/gc.c b/gc.c
index 3b2d5c9519..53c0ec5dd4 100644
--- a/gc.c
+++ b/gc.c
@@ -1813,12 +1813,28 @@ rb_data_object_alloc(VALUE klass, void *datap, RUBY_DATA_FUNC dmark, RUBY_DATA_F
}
VALUE
+rb_data_object_zalloc(VALUE klass, size_t size, RUBY_DATA_FUNC dmark, RUBY_DATA_FUNC dfree)
+{
+ VALUE obj = rb_data_object_alloc(klass, 0, dmark, dfree);
+ DATA_PTR(obj) = xcalloc(1, size);
+ return obj;
+}
+
+VALUE
rb_data_typed_object_alloc(VALUE klass, void *datap, const rb_data_type_t *type)
{
if (klass) Check_Type(klass, T_CLASS);
return newobj_of(klass, T_DATA | (type->flags & ~T_MASK), (VALUE)type, (VALUE)1, (VALUE)datap);
}
+VALUE
+rb_data_typed_object_zalloc(VALUE klass, size_t size, const rb_data_type_t *type)
+{
+ VALUE obj = rb_data_typed_object_alloc(klass, 0, type);
+ DATA_PTR(obj) = xcalloc(1, size);
+ return obj;
+}
+
size_t
rb_objspace_data_type_memsize(VALUE obj)
{