aboutsummaryrefslogtreecommitdiff
path: root/bindgen
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2022-06-25 17:13:14 +0200
committerAndre Weissflog <floooh@gmail.com>2022-06-25 17:13:14 +0200
commitc5bec4a41507cedfcc6566a8f3b266c2a776c7e4 (patch)
tree7ee376d71ed855e5b85f4e1861b8a49ceae21a9f /bindgen
parentf833d5600ededd632afda7a94ae67cd39e3c42d0 (diff)
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.
Diffstat (limited to 'bindgen')
-rw-r--r--bindgen/gen_nim.py62
1 files changed, 36 insertions, 26 deletions
diff --git a/bindgen/gen_nim.py b/bindgen/gen_nim.py
index c118797e..83e50f52 100644
--- a/bindgen/gen_nim.py
+++ b/bindgen/gen_nim.py
@@ -42,21 +42,38 @@ overrides = {
'SG_BUFFERTYPE_VERTEXBUFFER': 'SG_BUFFERTYPE_VERTEX_BUFFER',
'SG_BUFFERTYPE_INDEXBUFFER': 'SG_BUFFERTYPE_INDEX_BUFFER',
'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
}
+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 = {
'int': 'cint',
'bool': 'bool',
@@ -133,17 +150,14 @@ yield
struct_types = []
enum_types = []
-enum_items = {}
out_lines = ''
def reset_globals():
global struct_types
global enum_types
- global enum_items
global out_lines
struct_types = []
enum_types = []
- enum_items = {}
out_lines = ''
re_1d_array = re.compile("^(?:const )?\w*\s\*?\[\d*\]$")
@@ -200,20 +214,19 @@ def as_camel_case(s, prefix):
outp += part.capitalize()
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):
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]
for part in parts[1:]:
outp += part.capitalize()
- if outp[0].isdigit():
- outp = '_' + outp
return wrap_keywords(outp)
-def enum_default_item(enum_name):
- return enum_items[enum_name][0]
-
def is_prim_type(s):
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)
enum_name_nim = as_nim_type_name(decl['name'], prefix)
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:
# Nim requires explicit enum values to be declared in ascending order
for value in sorted(item_names_by_value):
@@ -483,9 +496,6 @@ def pre_parse(inp):
elif kind == 'enum':
enum_name = decl['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):
for dep_prefix in dep_prefixes: