Forráskód Böngészése

nim bindings: change enum naming conventions

Enum items are now prefixes instead of relying on the enum
name for scoping. This was necessary because Nim's
'pure' doesn't enforce putting the enum name in front
of the enum items.
Andre Weissflog 3 éve
szülő
commit
c5bec4a415
1 módosított fájl, 36 hozzáadás és 26 törlés
  1. 36 26
      bindgen/gen_nim.py

+ 36 - 26
bindgen/gen_nim.py

@@ -42,21 +42,38 @@ overrides = {
     'SG_BUFFERTYPE_VERTEXBUFFER':   'SG_BUFFERTYPE_VERTEX_BUFFER',
     'SG_BUFFERTYPE_VERTEXBUFFER':   'SG_BUFFERTYPE_VERTEX_BUFFER',
     'SG_BUFFERTYPE_INDEXBUFFER':    'SG_BUFFERTYPE_INDEX_BUFFER',
     'SG_BUFFERTYPE_INDEXBUFFER':    'SG_BUFFERTYPE_INDEX_BUFFER',
     'SG_ACTION_DONTCARE':           'SG_ACTION_DONT_CARE',
     'SG_ACTION_DONTCARE':           'SG_ACTION_DONT_CARE',
-    'SAPP_KEYCODE_0':               'SAPP_KEYCODE_DIGIT_0',
-    'SAPP_KEYCODE_1':               'SAPP_KEYCODE_DIGIT_1',
-    'SAPP_KEYCODE_2':               'SAPP_KEYCODE_DIGIT_2',
-    'SAPP_KEYCODE_3':               'SAPP_KEYCODE_DIGIT_3',
-    'SAPP_KEYCODE_4':               'SAPP_KEYCODE_DIGIT_4',
-    'SAPP_KEYCODE_5':               'SAPP_KEYCODE_DIGIT_5',
-    'SAPP_KEYCODE_6':               'SAPP_KEYCODE_DIGIT_6',
-    'SAPP_KEYCODE_7':               'SAPP_KEYCODE_DIGIT_7',
-    'SAPP_KEYCODE_8':               'SAPP_KEYCODE_DIGIT_8',
-    'SAPP_KEYCODE_9':               'SAPP_KEYCODE_DIGIT_9',
-    'SG_IMAGETYPE_2D':              'SG_IMAGETYPE_TWO_DEE',
-    'SG_IMAGETYPE_3D':              'SG_IMAGETYPE_THREE_DEE',
     'ptr':                          'pointer', # range ptr
     'ptr':                          'pointer', # range ptr
 }
 }
 
 
+enumPrefixOverrides = {
+    # sokol_gfx.h
+    'PIXELFORMAT': 'pixelFormat',
+    'RESOURCESTATE': 'resourceState',
+    'BUFFERTYPE': 'bufferType',
+    'INDEXTYPE': 'indexType',
+    'IMAGETYPE': 'imageType',
+    'SAMPLERTYPE': 'samplerType',
+    'CUBEFACE': 'cubeFace',
+    'SHADERSTAGE': 'shaderStage',
+    'PRIMITIVETYPE': 'primitiveType',
+    'BORDERCOLOR': 'borderColor',
+    'VERTEXFORMAT': 'vertexFormat',
+    'VERTEXSTEP': 'vertexStep',
+    'UNIFORMTYPE': 'uniformType',
+    'UNIFORMLAYOUT': 'uniformLayout',
+    'CULLMODE': 'cullMode',
+    'FACEWINDING': 'faceWinding',
+    'COMPAREFUNC': 'compareFunc',
+    'STENCILOP': 'stencilOp',
+    'BLENDFACTOR': 'blendFactor',
+    'BLENDOP': 'blendOp',
+    'COLORMASK': 'colorMask',
+    # sokol_app.h
+    'EVENTTYPE': 'eventType',
+    'KEYCODE': 'keyCode',
+    'MOUSEBUTTON': 'mouseButton',
+}
+
 prim_types = {
 prim_types = {
     'int':          'cint',
     'int':          'cint',
     'bool':         'bool',
     'bool':         'bool',
@@ -133,17 +150,14 @@ yield
 
 
 struct_types = []
 struct_types = []
 enum_types = []
 enum_types = []
-enum_items = {}
 out_lines = ''
 out_lines = ''
 
 
 def reset_globals():
 def reset_globals():
     global struct_types
     global struct_types
     global enum_types
     global enum_types
-    global enum_items
     global out_lines
     global out_lines
     struct_types = []
     struct_types = []
     enum_types = []
     enum_types = []
-    enum_items = {}
     out_lines = ''
     out_lines = ''
 
 
 re_1d_array = re.compile("^(?:const )?\w*\s\*?\[\d*\]$")
 re_1d_array = re.compile("^(?:const )?\w*\s\*?\[\d*\]$")
@@ -200,20 +214,19 @@ def as_camel_case(s, prefix):
         outp += part.capitalize()
         outp += part.capitalize()
     return wrap_keywords(outp)
     return wrap_keywords(outp)
 
 
-# PREFIX_ENUM_BLA_BLO => Bla, _PREFIX_ENUM_BLA_BLO => blaBlo
+# PREFIX_ENUM_BLA_BLO => blaBlo
 def as_enum_item_name(s):
 def as_enum_item_name(s):
     outp = s.lstrip('_')
     outp = s.lstrip('_')
-    parts = outp.lower().split('_')[2:]
+    parts = outp.split('_')[1:]
+    if parts[0] in enumPrefixOverrides:
+        parts[0] = enumPrefixOverrides[parts[0]]
+    else:
+        parts[0] = parts[0].lower()
     outp = parts[0]
     outp = parts[0]
     for part in parts[1:]:
     for part in parts[1:]:
         outp += part.capitalize()
         outp += part.capitalize()
-    if outp[0].isdigit():
-        outp = '_' + outp
     return wrap_keywords(outp)
     return wrap_keywords(outp)
 
 
-def enum_default_item(enum_name):
-    return enum_items[enum_name][0]
-
 def is_prim_type(s):
 def is_prim_type(s):
     return s in prim_types
     return s in prim_types
 
 
@@ -383,7 +396,7 @@ def gen_enum(decl, prefix):
             item_names_by_value[value] = as_enum_item_name(item_name)
             item_names_by_value[value] = as_enum_item_name(item_name)
     enum_name_nim = as_nim_type_name(decl['name'], prefix)
     enum_name_nim = as_nim_type_name(decl['name'], prefix)
     l('type')
     l('type')
-    l(f"  {enum_name_nim}* {{.pure, size:sizeof(int32).}} = enum")
+    l(f"  {enum_name_nim}* {{.size:sizeof(int32).}} = enum")
     if has_explicit_values:
     if has_explicit_values:
         # Nim requires explicit enum values to be declared in ascending order
         # Nim requires explicit enum values to be declared in ascending order
         for value in sorted(item_names_by_value):
         for value in sorted(item_names_by_value):
@@ -483,9 +496,6 @@ def pre_parse(inp):
         elif kind == 'enum':
         elif kind == 'enum':
             enum_name = decl['name']
             enum_name = decl['name']
             enum_types.append(enum_name)
             enum_types.append(enum_name)
-            enum_items[enum_name] = []
-            for item in decl['items']:
-                enum_items[enum_name].append(as_enum_item_name(item['name']))
 
 
 def gen_imports(inp, dep_prefixes):
 def gen_imports(inp, dep_prefixes):
     for dep_prefix in dep_prefixes:
     for dep_prefix in dep_prefixes: