summaryrefslogtreecommitdiffstats
path: root/binding_generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'binding_generator.py')
-rw-r--r--binding_generator.py103
1 files changed, 52 insertions, 51 deletions
diff --git a/binding_generator.py b/binding_generator.py
index 07191e4..d04c698 100644
--- a/binding_generator.py
+++ b/binding_generator.py
@@ -66,14 +66,14 @@ def generate_wrappers(target):
txt += "\n#endif\n"
- with open(target, "w") as f:
+ with open(target, "w", encoding="utf-8") as f:
f.write(txt)
def get_file_list(api_filepath, output_dir, headers=False, sources=False):
api = {}
files = []
- with open(api_filepath) as api_file:
+ with open(api_filepath, encoding="utf-8") as api_file:
api = json.load(api_file)
core_gen_folder = Path(output_dir) / "gen" / "include" / "godot_cpp" / "core"
@@ -163,7 +163,7 @@ def generate_bindings(api_filepath, use_template_get_node, bits="64", precision=
target_dir = Path(output_dir) / "gen"
- with open(api_filepath) as api_file:
+ with open(api_filepath, encoding="utf-8") as api_file:
api = json.load(api_file)
shutil.rmtree(target_dir, ignore_errors=True)
@@ -219,7 +219,7 @@ def generate_builtin_bindings(api, output_dir, build_config):
# Create a file for Variant size, since that class isn't generated.
variant_size_filename = include_gen_folder / "variant_size.hpp"
- with variant_size_filename.open("+w") as variant_size_file:
+ with variant_size_filename.open("+w", encoding="utf-8") as variant_size_file:
variant_size_source = []
add_header("variant_size.hpp", variant_size_source)
@@ -295,15 +295,15 @@ def generate_builtin_bindings(api, output_dir, build_config):
fully_used_classes = list(fully_used_classes)
fully_used_classes.sort()
- with header_filename.open("w+") as header_file:
+ with header_filename.open("w+", encoding="utf-8") as header_file:
header_file.write(generate_builtin_class_header(builtin_api, size, used_classes, fully_used_classes))
- with source_filename.open("w+") as source_file:
+ with source_filename.open("w+", encoding="utf-8") as source_file:
source_file.write(generate_builtin_class_source(builtin_api, size, used_classes, fully_used_classes))
# Create a header with all builtin types for convenience.
builtin_header_filename = include_gen_folder / "builtin_types.hpp"
- with builtin_header_filename.open("w+") as builtin_header_file:
+ with builtin_header_filename.open("w+", encoding="utf-8") as builtin_header_file:
builtin_header = []
add_header("builtin_types.hpp", builtin_header)
@@ -323,7 +323,7 @@ def generate_builtin_bindings(api, output_dir, build_config):
# Create a header with bindings for builtin types.
builtin_binds_filename = include_gen_folder / "builtin_binds.hpp"
- with builtin_binds_filename.open("w+") as builtin_binds_file:
+ with builtin_binds_filename.open("w+", encoding="utf-8") as builtin_binds_file:
builtin_binds = []
add_header("builtin_binds.hpp", builtin_binds)
@@ -791,24 +791,24 @@ def generate_builtin_class_source(builtin_api, size, used_classes, fully_used_cl
result.append("\tString::_init_bindings_constructors_destructor();")
result.append(f"\t{class_name}::_init_bindings_constructors_destructor();")
- result.append("\tStringName __name;")
+ result.append("\tStringName _gde_name;")
if "methods" in builtin_api:
for method in builtin_api["methods"]:
# TODO: Add error check for hash mismatch.
- result.append(f'\t__name = StringName("{method["name"]}");')
+ result.append(f'\t_gde_name = StringName("{method["name"]}");')
result.append(
- f'\t_method_bindings.method_{method["name"]} = internal::gdextension_interface_variant_get_ptr_builtin_method({enum_type_name}, __name._native_ptr(), {method["hash"]});'
+ f'\t_method_bindings.method_{method["name"]} = internal::gdextension_interface_variant_get_ptr_builtin_method({enum_type_name}, _gde_name._native_ptr(), {method["hash"]});'
)
if "members" in builtin_api:
for member in builtin_api["members"]:
- result.append(f'\t__name = StringName("{member["name"]}");')
+ result.append(f'\t_gde_name = StringName("{member["name"]}");')
result.append(
- f'\t_method_bindings.member_{member["name"]}_setter = internal::gdextension_interface_variant_get_ptr_setter({enum_type_name}, __name._native_ptr());'
+ f'\t_method_bindings.member_{member["name"]}_setter = internal::gdextension_interface_variant_get_ptr_setter({enum_type_name}, _gde_name._native_ptr());'
)
result.append(
- f'\t_method_bindings.member_{member["name"]}_getter = internal::gdextension_interface_variant_get_ptr_getter({enum_type_name}, __name._native_ptr());'
+ f'\t_method_bindings.member_{member["name"]}_getter = internal::gdextension_interface_variant_get_ptr_getter({enum_type_name}, _gde_name._native_ptr());'
)
if "indexing_return_type" in builtin_api:
@@ -1149,18 +1149,18 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
fully_used_classes = list(fully_used_classes)
fully_used_classes.sort()
- with header_filename.open("w+") as header_file:
+ with header_filename.open("w+", encoding="utf-8") as header_file:
header_file.write(
generate_engine_class_header(class_api, used_classes, fully_used_classes, use_template_get_node)
)
- with source_filename.open("w+") as source_file:
+ with source_filename.open("w+", encoding="utf-8") as source_file:
source_file.write(
generate_engine_class_source(class_api, used_classes, fully_used_classes, use_template_get_node)
)
register_engine_classes_filename = Path(output_dir) / "src" / "register_engine_classes.cpp"
- with register_engine_classes_filename.open("w+") as source_file:
+ with register_engine_classes_filename.open("w+", encoding="utf-8") as source_file:
source_file.write(generate_register_engine_classes_source(api))
for native_struct in api["native_structures"]:
@@ -1189,8 +1189,9 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
for included in used_classes:
result.append(f"#include <godot_cpp/{get_include_path(included)}>")
- if len(used_classes) > 0:
- result.append("")
+ if len(used_classes) == 0:
+ result.append("#include <godot_cpp/core/method_ptrcall.hpp>")
+ result.append("")
result.append("namespace godot {")
result.append("")
@@ -1208,7 +1209,7 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
result.append("")
result.append(f"#endif // ! {header_guard}")
- with header_filename.open("w+") as header_file:
+ with header_filename.open("w+", encoding="utf-8") as header_file:
header_file.write("\n".join(result))
@@ -1452,15 +1453,15 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
if is_singleton:
result.append(f"{class_name} *{class_name}::get_singleton() {{")
- result.append(f"\tconst StringName __class_name = {class_name}::get_class_static();")
+ result.append(f"\tconst StringName _gde_class_name = {class_name}::get_class_static();")
result.append(
- "\tstatic GDExtensionObjectPtr singleton_obj = internal::gdextension_interface_global_get_singleton(__class_name._native_ptr());"
+ "\tstatic GDExtensionObjectPtr singleton_obj = internal::gdextension_interface_global_get_singleton(_gde_class_name._native_ptr());"
)
result.append("#ifdef DEBUG_ENABLED")
result.append("\tERR_FAIL_COND_V(singleton_obj == nullptr, nullptr);")
result.append("#endif // DEBUG_ENABLED")
result.append(
- f"\tstatic {class_name} *singleton = reinterpret_cast<{class_name} *>(internal::gdextension_interface_object_get_instance_binding(singleton_obj, internal::token, &{class_name}::___binding_callbacks));"
+ f"\tstatic {class_name} *singleton = reinterpret_cast<{class_name} *>(internal::gdextension_interface_object_get_instance_binding(singleton_obj, internal::token, &{class_name}::_gde_binding_callbacks));"
)
result.append("\treturn singleton;")
result.append("}")
@@ -1479,20 +1480,20 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
result.append(method_signature + " {")
# Method body.
- result.append(f"\tconst StringName __class_name = {class_name}::get_class_static();")
- result.append(f'\tconst StringName __method_name = "{method["name"]}";')
+ result.append(f"\tconst StringName _gde_class_name = {class_name}::get_class_static();")
+ result.append(f'\tconst StringName _gde_method_name = "{method["name"]}";')
result.append(
- f'\tstatic GDExtensionMethodBindPtr ___method_bind = internal::gdextension_interface_classdb_get_method_bind(__class_name._native_ptr(), __method_name._native_ptr(), {method["hash"]});'
+ f'\tstatic GDExtensionMethodBindPtr _gde_method_bind = internal::gdextension_interface_classdb_get_method_bind(_gde_class_name._native_ptr(), _gde_method_name._native_ptr(), {method["hash"]});'
)
method_call = "\t"
has_return = "return_value" in method and method["return_value"]["type"] != "void"
if has_return:
result.append(
- f'\tCHECK_METHOD_BIND_RET(___method_bind, {get_default_value_for_type(method["return_value"]["type"])});'
+ f'\tCHECK_METHOD_BIND_RET(_gde_method_bind, {get_default_value_for_type(method["return_value"]["type"])});'
)
else:
- result.append("\tCHECK_METHOD_BIND(___method_bind);")
+ result.append("\tCHECK_METHOD_BIND(_gde_method_bind);")
is_ref = False
if not vararg:
@@ -1501,34 +1502,34 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
meta_type = method["return_value"]["meta"] if "meta" in method["return_value"] else None
if is_enum(return_type):
if method["is_static"]:
- method_call += f"return ({get_gdextension_type(correct_type(return_type, meta_type))})internal::_call_native_mb_ret<int64_t>(___method_bind, nullptr"
+ method_call += f"return ({get_gdextension_type(correct_type(return_type, meta_type))})internal::_call_native_mb_ret<int64_t>(_gde_method_bind, nullptr"
else:
- method_call += f"return ({get_gdextension_type(correct_type(return_type, meta_type))})internal::_call_native_mb_ret<int64_t>(___method_bind, _owner"
+ method_call += f"return ({get_gdextension_type(correct_type(return_type, meta_type))})internal::_call_native_mb_ret<int64_t>(_gde_method_bind, _owner"
elif is_pod_type(return_type) or is_variant(return_type):
if method["is_static"]:
- method_call += f"return internal::_call_native_mb_ret<{get_gdextension_type(correct_type(return_type, meta_type))}>(___method_bind, nullptr"
+ method_call += f"return internal::_call_native_mb_ret<{get_gdextension_type(correct_type(return_type, meta_type))}>(_gde_method_bind, nullptr"
else:
- method_call += f"return internal::_call_native_mb_ret<{get_gdextension_type(correct_type(return_type, meta_type))}>(___method_bind, _owner"
+ method_call += f"return internal::_call_native_mb_ret<{get_gdextension_type(correct_type(return_type, meta_type))}>(_gde_method_bind, _owner"
elif is_refcounted(return_type):
if method["is_static"]:
- method_call += f"return Ref<{return_type}>::___internal_constructor(internal::_call_native_mb_ret_obj<{return_type}>(___method_bind, nullptr"
+ method_call += f"return Ref<{return_type}>::_gde_internal_constructor(internal::_call_native_mb_ret_obj<{return_type}>(_gde_method_bind, nullptr"
else:
- method_call += f"return Ref<{return_type}>::___internal_constructor(internal::_call_native_mb_ret_obj<{return_type}>(___method_bind, _owner"
+ method_call += f"return Ref<{return_type}>::_gde_internal_constructor(internal::_call_native_mb_ret_obj<{return_type}>(_gde_method_bind, _owner"
is_ref = True
else:
if method["is_static"]:
method_call += (
- f"return internal::_call_native_mb_ret_obj<{return_type}>(___method_bind, nullptr"
+ f"return internal::_call_native_mb_ret_obj<{return_type}>(_gde_method_bind, nullptr"
)
else:
method_call += (
- f"return internal::_call_native_mb_ret_obj<{return_type}>(___method_bind, _owner"
+ f"return internal::_call_native_mb_ret_obj<{return_type}>(_gde_method_bind, _owner"
)
else:
if method["is_static"]:
- method_call += "internal::_call_native_mb_no_ret(___method_bind, nullptr"
+ method_call += "internal::_call_native_mb_no_ret(_gde_method_bind, nullptr"
else:
- method_call += "internal::_call_native_mb_no_ret(___method_bind, _owner"
+ method_call += "internal::_call_native_mb_no_ret(_gde_method_bind, _owner"
if "arguments" in method:
method_call += ", "
@@ -1545,7 +1546,7 @@ def generate_engine_class_source(class_api, used_classes, fully_used_classes, us
else: # vararg.
result.append("\tGDExtensionCallError error;")
result.append("\tVariant ret;")
- method_call += "internal::gdextension_interface_object_method_bind_call(___method_bind, _owner, reinterpret_cast<GDExtensionConstVariantPtr *>(args), arg_count, &ret, &error"
+ method_call += "internal::gdextension_interface_object_method_bind_call(_gde_method_bind, _owner, reinterpret_cast<GDExtensionConstVariantPtr *>(args), arg_count, &ret, &error"
if is_ref:
method_call += ")" # Close Ref<> constructor.
@@ -1657,7 +1658,7 @@ def generate_global_constants(api, output_dir):
header.append("")
header.append(f"#endif // ! {header_guard}")
- with header_filename.open("w+") as header_file:
+ with header_filename.open("w+", encoding="utf-8") as header_file:
header_file.write("\n".join(header))
@@ -1698,7 +1699,7 @@ def generate_global_constant_binds(api, output_dir):
header.append(f"#endif // ! {header_guard}")
- with header_filename.open("w+") as header_file:
+ with header_filename.open("w+", encoding="utf-8") as header_file:
header_file.write("\n".join(header))
@@ -1747,7 +1748,7 @@ def generate_utility_functions(api, output_dir):
header.append("")
header.append(f"#endif // ! {header_guard}")
- with header_filename.open("w+") as header_file:
+ with header_filename.open("w+", encoding="utf-8") as header_file:
header_file.write("\n".join(header))
# Generate source.
@@ -1772,28 +1773,28 @@ def generate_utility_functions(api, output_dir):
# Function body.
- source.append(f'\tconst StringName __function_name = "{function["name"]}";')
+ source.append(f'\tconst StringName _gde_function_name = "{function["name"]}";')
source.append(
- f'\tstatic GDExtensionPtrUtilityFunction ___function = internal::gdextension_interface_variant_get_ptr_utility_function(__function_name._native_ptr(), {function["hash"]});'
+ f'\tstatic GDExtensionPtrUtilityFunction _gde_function = internal::gdextension_interface_variant_get_ptr_utility_function(_gde_function_name._native_ptr(), {function["hash"]});'
)
has_return = "return_type" in function and function["return_type"] != "void"
if has_return:
source.append(
- f'\tCHECK_METHOD_BIND_RET(___function, {get_default_value_for_type(function["return_type"])});'
+ f'\tCHECK_METHOD_BIND_RET(_gde_function, {get_default_value_for_type(function["return_type"])});'
)
else:
- source.append("\tCHECK_METHOD_BIND(___function);")
+ source.append("\tCHECK_METHOD_BIND(_gde_function);")
function_call = "\t"
if not vararg:
if has_return:
function_call += "return "
if function["return_type"] == "Object":
- function_call += "internal::_call_utility_ret_obj(___function"
+ function_call += "internal::_call_utility_ret_obj(_gde_function"
else:
- function_call += f'internal::_call_utility_ret<{get_gdextension_type(correct_type(function["return_type"]))}>(___function'
+ function_call += f'internal::_call_utility_ret<{get_gdextension_type(correct_type(function["return_type"]))}>(_gde_function'
else:
- function_call += "internal::_call_utility_no_ret(___function"
+ function_call += "internal::_call_utility_no_ret(_gde_function"
if "arguments" in function:
function_call += ", "
@@ -1812,7 +1813,7 @@ def generate_utility_functions(api, output_dir):
source.append(f'\t{get_gdextension_type(correct_type(function["return_type"]))} ret;')
else:
source.append("\tVariant ret;")
- function_call += "___function(&ret, reinterpret_cast<GDExtensionConstVariantPtr *>(args), arg_count"
+ function_call += "_gde_function(&ret, reinterpret_cast<GDExtensionConstVariantPtr *>(args), arg_count"
function_call += ");"
source.append(function_call)
@@ -1825,7 +1826,7 @@ def generate_utility_functions(api, output_dir):
source.append("} // namespace godot")
- with source_filename.open("w+") as source_file:
+ with source_filename.open("w+", encoding="utf-8") as source_file:
source_file.write("\n".join(source))