From 1cee17ea1752bcd4a9110c06e69373cbbc9ac81a Mon Sep 17 00:00:00 2001 From: Ian Piumarta Date: Tue, 1 Sep 2020 19:43:52 +0900 Subject: [PATCH] Add flags to Map with MAP_ENCLOSED bit; add pool pointer to Map for scope free list --- object.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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; }