diff options
| author | Andre Weissflog <floooh@gmail.com> | 2023-02-12 17:25:06 +0100 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2023-02-12 17:25:06 +0100 |
| commit | 166db786aab4a34833db1a7c48945a8ebe5215ec (patch) | |
| tree | 948fd76f54209b68fd896c7fa138fe046d92e013 /bindgen | |
| parent | 17611db5916c894b65153a55cc9ba528ed7794e3 (diff) | |
add sokol_log.h to nim bindings
Diffstat (limited to 'bindgen')
| -rw-r--r-- | bindgen/gen_nim.py | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/bindgen/gen_nim.py b/bindgen/gen_nim.py index 06e5b641..06a3b919 100644 --- a/bindgen/gen_nim.py +++ b/bindgen/gen_nim.py @@ -10,6 +10,7 @@ import gen_util as util import os, shutil, sys module_names = { + 'slog_': 'log', 'sg_': 'gfx', 'sapp_': 'app', 'sapp_sg': 'glue', @@ -21,6 +22,7 @@ module_names = { } c_source_paths = { + 'slog_': 'sokol-nim/src/sokol/c/sokol_log.c', 'sg_': 'sokol-nim/src/sokol/c/sokol_gfx.c', 'sapp_': 'sokol-nim/src/sokol/c/sokol_app.c', 'sapp_sg': 'sokol-nim/src/sokol/c/sokol_glue.c', @@ -31,6 +33,10 @@ c_source_paths = { 'sshape_': 'sokol-nim/src/sokol/c/sokol_shape.c', } +c_callbacks = [ + 'slog_func', +] + ignores = [ 'sdtx_printf', 'sdtx_vprintf', @@ -47,6 +53,8 @@ overrides = { 'SG_BUFFERTYPE_INDEXBUFFER': 'SG_BUFFERTYPE_INDEX_BUFFER', 'SG_ACTION_DONTCARE': 'SG_ACTION_DONT_CARE', 'ptr': 'addr', # range ptr + 'func': 'fn', + 'slog_func': 'fn', } enumPrefixOverrides = { @@ -412,22 +420,26 @@ def funcdecl_result(decl, prefix): return nim_res_type def gen_func_nim(decl, prefix): - nim_func_name = as_camel_case(check_override(decl['name']), prefix, wrap=False) + c_func_name = decl['name'] + nim_func_name = as_camel_case(check_override(c_func_name), prefix, wrap=False) nim_res_type = funcdecl_result(decl, prefix) - l(f"proc c_{nim_func_name}({funcdecl_args_c(decl, prefix)}):{nim_res_type} {{.cdecl, importc:\"{decl['name']}\".}}") - l(f"proc {wrap_keywords(nim_func_name)}*({funcdecl_args_nim(decl, prefix)}):{nim_res_type} =") - s = f" c_{nim_func_name}(" - for i, param_decl in enumerate(decl['params']): - if i > 0: - s += ", " - arg_name = param_decl['name'] - arg_type = param_decl['type'] - if is_const_struct_ptr(arg_type): - s += f"unsafeAddr({arg_name})" - else: - s += arg_name - s += ")" - l(s) + if c_func_name in c_callbacks: + l(f"proc {nim_func_name}*({funcdecl_args_c(decl, prefix)}):{nim_res_type} {{.cdecl, importc:\"{c_func_name}\".}}") + else: + l(f"proc c_{nim_func_name}({funcdecl_args_c(decl, prefix)}):{nim_res_type} {{.cdecl, importc:\"{c_func_name}\".}}") + l(f"proc {wrap_keywords(nim_func_name)}*({funcdecl_args_nim(decl, prefix)}):{nim_res_type} =") + s = f" c_{nim_func_name}(" + for i, param_decl in enumerate(decl['params']): + if i > 0: + s += ", " + arg_name = param_decl['name'] + arg_type = param_decl['type'] + if is_const_struct_ptr(arg_type): + s += f"unsafeAddr({arg_name})" + else: + s += arg_name + s += ")" + l(s) l("") def gen_array_converters(decl, prefix): |