diff options
Diffstat (limited to 'binding_generator.py')
-rw-r--r-- | binding_generator.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/binding_generator.py b/binding_generator.py index ed91fa3..1c07b06 100644 --- a/binding_generator.py +++ b/binding_generator.py @@ -587,6 +587,8 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl result.append("") result.append("\tstatic struct _MethodBindings {") + result.append("\t\tGDExtensionTypeFromVariantConstructorFunc from_variant_constructor;") + if "constructors" in builtin_api: for constructor in builtin_api["constructors"]: result.append(f'\t\tGDExtensionPtrConstructor constructor_{constructor["index"]};') @@ -628,6 +630,9 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl result.append("\tstatic void _init_bindings_constructors_destructor();") result.append("") + result.append(f"\t{class_name}(const Variant *p_variant);") + + result.append("") result.append("public:") result.append( @@ -962,6 +967,10 @@ def generate_builtin_class_source(builtin_api, size, used_classes, fully_used_cl result.append(f"void {class_name}::_init_bindings_constructors_destructor() {{") + result.append( + f"\t_method_bindings.from_variant_constructor = internal::gdextension_interface_get_variant_to_type_constructor({enum_type_name});" + ) + if "constructors" in builtin_api: for constructor in builtin_api["constructors"]: result.append( @@ -1043,6 +1052,11 @@ def generate_builtin_class_source(builtin_api, size, used_classes, fully_used_cl copy_constructor_index = -1 + result.append(f"{class_name}::{class_name}(const Variant *p_variant) {{") + result.append("\t_method_bindings.from_variant_constructor(&opaque, p_variant->_native_ptr());") + result.append("}") + result.append("") + if "constructors" in builtin_api: for constructor in builtin_api["constructors"]: method_signature = f"{class_name}::{class_name}(" |