From e5dbe1e28340a9d1a7b651b35d8de449c46fcf23 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Wed, 26 Nov 2014 21:17:16 +0200
Subject: [PATCH] map: Add empty fixed map.

Useful when need to call kw-receiving functions  without any keywords
from C, etc.
---
 py/map.c | 10 ++++++++++
 py/obj.h |  2 ++
 2 files changed, 12 insertions(+)

diff --git a/py/map.c b/py/map.c
index fb0c5a079..a06325862 100644
--- a/py/map.c
+++ b/py/map.c
@@ -34,6 +34,16 @@
 #include "obj.h"
 #include "runtime0.h"
 
+// Fixed empty map. Useful when need to call kw-receiving functions
+// without any keywords from C, etc.
+const mp_map_t mp_const_empty_map = {
+    .all_keys_are_qstrs = 0,
+    .table_is_fixed_array = 1,
+    .used = 0,
+    .alloc = 0,
+    .table = NULL,
+};
+
 // approximatelly doubling primes; made with Mathematica command: Table[Prime[Floor[(1.7)^n]], {n, 3, 24}]
 // prefixed with zero for the empty case.
 STATIC uint32_t doubling_primes[] = {0, 7, 19, 43, 89, 179, 347, 647, 1229, 2297, 4243, 7829, 14347, 26017, 47149, 84947, 152443, 273253, 488399, 869927, 1547173, 2745121, 4861607};
diff --git a/py/obj.h b/py/obj.h
index 09f277a19..8a8a1eb21 100644
--- a/py/obj.h
+++ b/py/obj.h
@@ -148,6 +148,8 @@ typedef enum _mp_map_lookup_kind_t {
     MP_MAP_LOOKUP_REMOVE_IF_FOUND,    // 2
 } mp_map_lookup_kind_t;
 
+extern const mp_map_t mp_const_empty_map;
+
 static inline bool MP_MAP_SLOT_IS_FILLED(const mp_map_t *map, mp_uint_t pos) { return ((map)->table[pos].key != MP_OBJ_NULL && (map)->table[pos].key != MP_OBJ_SENTINEL); }
 
 void mp_map_init(mp_map_t *map, mp_uint_t n);
-- 
GitLab