Browse Source

add sokol_log.h to nim bindings

Andre Weissflog 2 years ago
parent
commit
166db786aa
1 changed files with 27 additions and 15 deletions
  1. 27 15
      bindgen/gen_nim.py

+ 27 - 15
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):