Browse Source

nim bindings: remove to 'const to bitfield' conversion

Andre Weissflog 3 years ago
parent
commit
f833d5600e
1 changed files with 3 additions and 27 deletions
  1. 3 27
      bindgen/gen_nim.py

+ 3 - 27
bindgen/gen_nim.py

@@ -35,11 +35,6 @@ ignores = [
     'sdtx_vprintf',
 ]
 
-# consts that should be converted to Nim enum bitfields, values mimic C type declarations
-const_bitfield_overrides = {
-    'SAPP_MODIFIER_': 'sapp_event_modifier',
-}
-
 overrides = {
     'sgl_error':                    'sgl_get_error',
     'sgl_deg':                      'sgl_as_degrees',
@@ -59,7 +54,6 @@ overrides = {
     'SAPP_KEYCODE_9':               'SAPP_KEYCODE_DIGIT_9',
     'SG_IMAGETYPE_2D':              'SG_IMAGETYPE_TWO_DEE',
     'SG_IMAGETYPE_3D':              'SG_IMAGETYPE_THREE_DEE',
-    'sapp_event.modifiers':         'sapp_event_modifier', # type declared above
     'ptr':                          'pointer', # range ptr
 }
 
@@ -189,14 +183,6 @@ def check_ignore(name):
 def is_power_of_two(val):
     return val == 0 or val & (val - 1) == 0
 
-def check_consts_bitfield_override(decl):
-    for override in const_bitfield_overrides:
-        if all(override in item['name'] for item in decl['items']):
-            if any(not is_power_of_two(int(item['value'])) for item in decl['items']):
-                print(f"warning: bitfield override '{override}' encountered non-power-of-two value")
-            return const_bitfield_overrides[override]
-    return None
-
 def wrap_keywords(s):
     if s in keywords:
         return f'`{s}`'
@@ -380,7 +366,7 @@ def gen_consts(decl, prefix):
         l(f"  {as_camel_case(item_name, prefix)}* = {item['value']}")
     l("")
 
-def gen_enum(decl, prefix, bitfield=None):
+def gen_enum(decl, prefix):
     item_names_by_value = {}
     value = -1
     has_explicit_values = False
@@ -395,8 +381,7 @@ def gen_enum(decl, prefix, bitfield=None):
             else:
                 value += 1
             item_names_by_value[value] = as_enum_item_name(item_name)
-    enum_name = bitfield if bitfield is not None else decl['name']
-    enum_name_nim = as_nim_type_name(enum_name, prefix)
+    enum_name_nim = as_nim_type_name(decl['name'], prefix)
     l('type')
     l(f"  {enum_name_nim}* {{.pure, size:sizeof(int32).}} = enum")
     if has_explicit_values:
@@ -407,8 +392,6 @@ def gen_enum(decl, prefix, bitfield=None):
     else:
         for name in item_names_by_value.values():
             l(f"    {name},")
-    if bitfield is not None:
-        l(f"  {enum_name_nim}s = set[{enum_name_nim}]")
     l("")
 
 # returns C prototype compatible function args (with pointers)
@@ -503,9 +486,6 @@ def pre_parse(inp):
             enum_items[enum_name] = []
             for item in decl['items']:
                 enum_items[enum_name].append(as_enum_item_name(item['name']))
-    for bitfield in const_bitfield_overrides.values():
-        enum_types.append(bitfield)
-        enum_types.append(bitfield + 's')
 
 def gen_imports(inp, dep_prefixes):
     for dep_prefix in dep_prefixes:
@@ -599,11 +579,7 @@ def gen_module(inp, dep_prefixes):
         if not decl['is_dep']:
             kind = decl['kind']
             if kind == 'consts':
-                bitfield = check_consts_bitfield_override(decl)
-                if bitfield is not None:
-                    gen_enum(decl, prefix, bitfield=bitfield)
-                else:
-                    gen_consts(decl, prefix)
+                gen_consts(decl, prefix)
             elif not check_ignore(decl['name']):
                 if kind == 'struct':
                     gen_struct(decl, prefix)