diff --git a/object.c b/object.c index 5b31491..66a97d8 100644 --- a/object.c +++ b/object.c @@ -121,11 +121,19 @@ struct Pair { oop value; }; +enum { + MAP_ENCLOSED = 1 << 0, // set when map is used as a scope and closed over by a function +}; + struct Map { type_t type; + int flags; struct Pair *elements; // even are keys, odd are values [ key val key val key val ] - size_t size; size_t capacity; + union { + size_t size; // free Maps will be reset to 0 size on allocation + oop pool; // free list of Map objects + }; }; union object { @@ -294,7 +302,7 @@ oop makeFunction(primitive_t primitive, oop name, oop param, oop body, oop paren oop makeMap() { - oop newMap = malloc(sizeof(union object)); + oop newMap = malloc(sizeof(union object)); assert(0 == newMap->Map.flags); newMap->type = Map; return newMap; }