reorganized files

This commit is contained in:
Francesco Cozzuto
2021-12-01 14:43:11 +01:00
parent a7cdb0943d
commit fb9b22fa46
6 changed files with 22 additions and 22 deletions
+57
View File
@@ -0,0 +1,57 @@
#include "../utils/defs.h"
#include "objects.h"
typedef struct ClosureObject ClosureObject;
struct ClosureObject {
Object base;
ClosureObject *prev;
Object *vars;
};
static Object *select(Object *self, Object *key, Heap *heap, Error *err);
static const Type t_closure = {
.base = (Object) { .type = &t_type, .flags = Object_STATIC },
.name = "closure",
.size = sizeof(ClosureObject),
.select = select,
};
Object *Object_NewClosure(Object *parent, Object *new_map, Heap *heap, Error *error)
{
ClosureObject *obj = (ClosureObject*) Heap_Malloc(heap, &t_closure, error);
if(obj == NULL)
return NULL;
if(parent != NULL && parent->type != &t_closure)
{
Error_Report(error, 0, "Object is not a closure");
return NULL;
}
obj->prev = (ClosureObject*) parent;
obj->vars = new_map;
return (Object*) obj;
}
static Object *select(Object *self, Object *key, Heap *heap, Error *err)
{
ClosureObject *closure = (ClosureObject*) self;
Object *selected = NULL;
while(closure != NULL && selected == NULL)
{
selected = Object_Select(closure->vars, key, heap, err);
if(err->occurred)
return NULL;
closure = closure->prev;
}
return selected;
}
+1
View File
@@ -86,6 +86,7 @@ Object* Object_Prev (Object *iter, Heap *heap, Error *err);
Object* Object_NewMap(int num, Heap *heap, Error *error);
Object* Object_NewList(int capacity, Heap *heap, Error *error);
Object* Object_NewNone(Heap *heap, Error *error);
Object* Object_NewClosure(Object *parent, Object *new_map, Heap *heap, Error *error);
Object* Object_FromInt (long long int val, Heap *heap, Error *error);
Object* Object_FromBool (_Bool val, Heap *heap, Error *error);