diff --git a/lang/object.c b/lang/object.c index 027f1ad..71a1e78 100644 --- a/lang/object.c +++ b/lang/object.c @@ -29,17 +29,18 @@ abort_if(object == NULL, "object_priv: no object"); struct object *obj = (struct object *)object; abort_if(obj->class_data != class, "object_priv: incompatible class"); - return object->priv_data; + return obj->priv_data; } -void object_hold(Object obj) { - abort_if(obj == NULL, "object_hold holding NULL"); +void object_hold(Object object) { + abort_if(object == NULL, "object_hold holding NULL"); + struct object *obj = (struct object *)object; atomic_fetch_add_explicit(&obj->ref_count, 1, memory_order_relaxed); } void object_drop(Object *objptr) { abort_if(*objptr == NULL, "object_drop dropping NULL"); - Object obj = *objptr; + struct object *obj = (struct object *)*objptr; atomic_int count = atomic_fetch_sub_explicit( &obj->ref_count, 1, memory_order_relaxed); if (count == 1) { @@ -50,7 +51,8 @@ *objptr = NULL; } -void dispatch_call(VmState state, Object obj, const char *name) { +void dispatch_call(VmState state, Object object, const char *name) { + struct object *obj = (struct object *)object; struct object_call *call = obj->class_data->calls; while (call->name != NULL) { if (strcmp(call->name, name) == 0) { diff --git a/lang/types.h b/lang/types.h index 5c38c8d..1dfebae 100644 --- a/lang/types.h +++ b/lang/types.h @@ -4,9 +4,7 @@ #ifndef TYPES_H #define TYPES_H -struct object; - -typedef struct object *Object; +typedef void *Object; typedef void *VmState; #endif