general cleanups. Removed lots of unused code and redundant error checks

This commit is contained in:
Francesco Cozzuto
2022-08-24 16:46:32 +02:00
parent 71e8a9e4cb
commit cd74dda4a9
29 changed files with 333 additions and 813 deletions
+7 -171
View File
@@ -28,15 +28,15 @@
** +--------------------------------------------------------------------------+
*/
#include "../utils/defs.h"
#include "objects.h"
#include "../utils/defs.h"
static _Bool op_eql(Object *self, Object *other);
TypeObject t_type = {
.base = (Object) { .type = &t_type, .flags = Object_STATIC },
.name = "type",
.size = sizeof (TypeObject),
.size = sizeof(TypeObject),
.op_eql = op_eql,
};
@@ -70,41 +70,11 @@ const TypeObject *Object_GetType(const Object *obj)
return obj->type;
}
unsigned int Object_GetSize(const Object *obj, Error *err)
{
UNUSED(err);
ASSERT(err != NULL);
ASSERT(obj != NULL);
const TypeObject *type = Object_GetType(obj);
ASSERT(type);
return type->size;
}
unsigned int Object_GetDeepSize(const Object *obj, Error *err)
{
ASSERT(err != NULL);
ASSERT(obj != NULL);
const TypeObject *type = Object_GetType(obj);
ASSERT(type);
if(type->deepsize == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(obj), __func__);
return 0;
}
return type->deepsize(obj);
}
int Object_Hash(Object *obj)
{
ASSERT(obj != NULL);
const TypeObject *type = Object_GetType(obj);
ASSERT(type != NULL);
ASSERT(type->hash != NULL);
ASSERT(type != NULL && type->hash != NULL);
return type->hash(obj);
}
@@ -225,158 +195,24 @@ int Object_Count(Object *coll, Error *err)
return type->count(coll);
}
Object *Object_Next(Object *iter, Heap *heap, Error *err)
{
ASSERT(err);
ASSERT(iter);
const TypeObject *type = Object_GetType(iter);
ASSERT(type);
if(type->next == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(iter), __func__);
return NULL;
}
return type->next(iter, heap, err);
}
Object *Object_Prev(Object *iter, Heap *heap, Error *err)
{
ASSERT(err);
ASSERT(iter);
const TypeObject *type = Object_GetType(iter);
ASSERT(type);
if(type->prev == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(iter), __func__);
return NULL;
}
return type->prev(iter, heap, err);
}
_Bool Object_IsInt(Object *obj)
{
ASSERT(obj != NULL);
ASSERT(obj->type != NULL);
return obj->type->atomic == ATMTP_INT;
return Object_GetType(obj) == Object_GetIntType();
}
_Bool Object_IsBool(Object *obj)
{
ASSERT(obj != NULL);
ASSERT(obj->type != NULL);
return obj->type->atomic == ATMTP_BOOL;
return Object_GetType(obj) == Object_GetBoolType();
}
_Bool Object_IsFloat(Object *obj)
{
ASSERT(obj != NULL);
ASSERT(obj->type != NULL);
return obj->type->atomic == ATMTP_FLOAT;
return Object_GetType(obj) == Object_GetFloatType();
}
_Bool Object_IsString(Object *obj)
{
ASSERT(obj != NULL);
ASSERT(obj->type != NULL);
return obj->type->atomic == ATMTP_STRING;
}
long long int Object_ToInt(Object *obj, Error *err)
{
ASSERT(err);
ASSERT(obj);
if(!Object_IsInt(obj))
{
Error_Report(err, 0, "Object is not an integer");
return 0;
}
const TypeObject *type = Object_GetType(obj);
ASSERT(type);
if(type->to_int == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(obj), __func__);
return 0;
}
return type->to_int(obj, err);
}
_Bool Object_ToBool(Object *obj, Error *err)
{
ASSERT(err);
ASSERT(obj);
if(!Object_IsBool(obj))
{
Error_Report(err, 0, "Object is not a boolean");
return 0;
}
const TypeObject *type = Object_GetType(obj);
ASSERT(type);
if(type->to_bool == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(obj), __func__);
return 0;
}
return type->to_bool(obj, err);
}
double Object_ToFloat(Object *obj, Error *err)
{
ASSERT(err);
ASSERT(obj);
if(!Object_IsFloat(obj))
{
Error_Report(err, 0, "Object is not a floating");
return 0;
}
const TypeObject *type = Object_GetType(obj);
ASSERT(type);
if(type->to_float == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(obj), __func__);
return 0;
}
return type->to_float(obj, err);
}
const char *Object_ToString(Object *obj, int *size, Heap *heap, Error *err)
{
ASSERT(err != NULL);
ASSERT(obj != NULL);
if(!Object_IsString(obj))
{
Error_Report(err, 0, "Object is not a string");
return NULL;
}
const TypeObject *type = Object_GetType(obj);
ASSERT(type);
if(type->to_string == NULL)
{
Error_Report(err, 0, "Object %s doesn't implement %s", Object_GetName(obj), __func__);
return NULL;
}
return type->to_string(obj, size, heap, err);
return Object_GetType(obj) == Object_GetStringType();
}
_Bool Object_Compare(Object *obj1, Object *obj2, Error *error)