diff --git a/object.c b/object.c index 6e47932..388a12a 100644 --- a/object.c +++ b/object.c @@ -357,6 +357,14 @@ oop makeMap() return newMap; } +oop makeMapCapacity(size_t capa) +{ + oop map= makeMap(); + set(map, Map, elements, realloc(get(map, Map, elements), sizeof(struct Pair) * capa)); + set(map, Map, capacity, capa); + return map; +} + size_t map_size(oop map) { assert(is(Map, map)); diff --git a/parse.leg b/parse.leg index c5b6579..795dcbb 100644 --- a/parse.leg +++ b/parse.leg @@ -2046,37 +2046,14 @@ oop prim_Integer(oop scope, oop params) oop prim_Map(oop scope, oop params) { - if (!map_hasIntegerKey(params, 0)) return null; + if (!map_hasIntegerKey(params, 0)) return makeMap(); oop arg= get(params, Map, elements)[0].value; switch (getType(arg)) { case Undefined: { return makeMap(); } case Integer: { - oop map= makeMap(); - map_set(map, makeInteger(0), arg); - return map; - } - case Function: { - oop map= makeMap(); - map_set(map, get(arg, Function, name), arg); - return map; - } - case String: { - oop map= makeMap(); - size_t len= string_size(arg); - for(size_t i=0; i