general cleanups. Removed lots of unused code and redundant error checks
This commit is contained in:
+7
-171
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user