Skip to content

Commit ae86ee3

Browse files
committed
Update header: const variants of pointer types
1 parent e71c622 commit ae86ee3

File tree

17 files changed

+204
-159
lines changed

17 files changed

+204
-159
lines changed

godot-codegen/input/gdnative_interface.h

Lines changed: 107 additions & 104 deletions
Large diffs are not rendered by default.

godot-codegen/input/tweak.patch

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,32 @@
1-
diff --git b/godot-codegen/input/gdnative_interface.h a/godot-codegen/input/gdnative_interface.h
2-
index 041a6e5..c1b932a 100644
3-
--- b/godot-codegen/input/gdnative_interface.h
4-
+++ a/godot-codegen/input/gdnative_interface.h
5-
@@ -136,13 +136,13 @@ typedef enum {
1+
diff --git a/godot-codegen/input/gdnative_interface.h b/godot-codegen/input/gdnative_interface.h
2+
index 486f5be..304ccdf 100644
3+
--- a/godot-codegen/input/gdnative_interface.h
4+
+++ b/godot-codegen/input/gdnative_interface.h
5+
@@ -140,17 +140,17 @@ typedef enum {
66

77
} GDNativeVariantOperator;
88

99
-typedef void *GDNativeVariantPtr;
10+
-typedef const void *GDNativeConstVariantPtr;
1011
-typedef void *GDNativeStringNamePtr;
12+
-typedef const void *GDNativeConstStringNamePtr;
1113
-typedef void *GDNativeStringPtr;
14+
-typedef const void *GDNativeConstStringPtr;
1215
-typedef void *GDNativeObjectPtr;
16+
-typedef const void *GDNativeConstObjectPtr;
1317
-typedef void *GDNativeTypePtr;
14-
-typedef void *GDNativeExtensionPtr;
15-
-typedef void *GDNativeMethodBindPtr;
18+
-typedef const void *GDNativeConstTypePtr;
19+
-typedef const void *GDNativeMethodBindPtr;
1620
+typedef struct TagVariant *GDNativeVariantPtr;
21+
+typedef const struct TagVariant *GDNativeConstVariantPtr;
1722
+typedef struct TagStringName *GDNativeStringNamePtr;
23+
+typedef const struct TagStringName *GDNativeConstStringNamePtr;
1824
+typedef struct TagString *GDNativeStringPtr;
25+
+typedef const struct TagString *GDNativeConstStringPtr;
1926
+typedef struct TagObject *GDNativeObjectPtr;
27+
+typedef const struct TagObject *GDNativeConstObjectPtr;
2028
+typedef struct TagType *GDNativeTypePtr;
21-
+typedef struct TagExtension *GDNativeExtensionPtr;
29+
+typedef const struct TagType *GDNativeConstTypePtr;
2230
+typedef struct TagMethodBind *GDNativeMethodBindPtr;
2331
typedef int64_t GDNativeInt;
2432
typedef uint8_t GDNativeBool;

godot-codegen/src/central_generator.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ fn make_sys_code(central_items: &CentralItems) -> String {
161161
} = central_items;
162162

163163
let sys_tokens = quote! {
164-
use crate::{GDNativeVariantPtr, GDNativeTypePtr, GodotFfi, ffi_methods};
164+
use crate::{GDNativeVariantPtr, GDNativeTypePtr, GDNativeConstTypePtr, GodotFfi, ffi_methods};
165165

166166
pub mod types {
167167
#(#opaque_types)*
@@ -592,8 +592,8 @@ fn make_construct_fns(
592592

593593
// Generic signature: fn(base: GDNativeTypePtr, args: *const GDNativeTypePtr)
594594
let decls = quote! {
595-
pub #construct_default: unsafe extern "C" fn(GDNativeTypePtr, *const GDNativeTypePtr),
596-
pub #construct_copy: unsafe extern "C" fn(GDNativeTypePtr, *const GDNativeTypePtr),
595+
pub #construct_default: unsafe extern "C" fn(GDNativeTypePtr, *mut GDNativeConstTypePtr),
596+
pub #construct_copy: unsafe extern "C" fn(GDNativeTypePtr, *mut GDNativeConstTypePtr),
597597
#(#construct_extra_decls)*
598598
};
599599

@@ -643,7 +643,7 @@ fn make_extra_constructors(
643643

644644
let err = format_load_error(&ident);
645645
extra_decls.push(quote! {
646-
pub #ident: unsafe extern "C" fn(GDNativeTypePtr, *const GDNativeTypePtr),
646+
pub #ident: unsafe extern "C" fn(GDNativeTypePtr, *mut GDNativeConstTypePtr),
647647
});
648648

649649
let i = i as i32;
@@ -707,7 +707,7 @@ fn make_operator_fns(
707707

708708
// Field declaration
709709
let decl = quote! {
710-
pub #operator: unsafe extern "C" fn(GDNativeTypePtr, GDNativeTypePtr, GDNativeTypePtr),
710+
pub #operator: unsafe extern "C" fn(GDNativeConstTypePtr, GDNativeConstTypePtr, GDNativeTypePtr),
711711
};
712712

713713
// Field initialization in new()

godot-codegen/src/class_generator.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -405,10 +405,10 @@ fn make_method_definition(method: &Method, class_name: &str, ctx: &mut Context)
405405
#( #arg_exprs ),*
406406
];
407407
let mut __args = Vec::new();
408-
__args.extend(__explicit_args.iter().map(Variant::var_sys));
409-
__args.extend(varargs.iter().map(Variant::var_sys));
408+
__args.extend(__explicit_args.iter().map(Variant::var_sys_const));
409+
__args.extend(varargs.iter().map(Variant::var_sys_const));
410410

411-
let __args_ptr = __args.as_ptr();
411+
let __args_ptr = __args.as_mut_ptr();
412412

413413
#call
414414
}
@@ -428,10 +428,10 @@ fn make_method_definition(method: &Method, class_name: &str, ctx: &mut Context)
428428
);
429429
let __call_fn = sys::interface_fn!(object_method_bind_ptrcall);
430430

431-
let __args = [
431+
let mut __args = [
432432
#( #arg_exprs ),*
433433
];
434-
let __args_ptr = __args.as_ptr();
434+
let __args_ptr = __args.as_mut_ptr();
435435

436436
#call
437437
}
@@ -465,10 +465,10 @@ pub(crate) fn make_function_definition(
465465
let __call_fn = sys::interface_fn!(variant_get_ptr_utility_function)(__function_name.string_sys(), #hash);
466466
let __call_fn = __call_fn.unwrap_unchecked();
467467

468-
let __args = [
468+
let mut __args = [
469469
#( #arg_exprs ),*
470470
];
471-
let __args_ptr = __args.as_ptr();
471+
let __args_ptr = __args.as_mut_ptr();
472472

473473
#call
474474
};
@@ -503,7 +503,7 @@ fn make_params(
503503
});
504504
} else {
505505
arg_exprs.push(quote! {
506-
<#param_ty as sys::GodotFfi>::sys(&#param_name)
506+
<#param_ty as sys::GodotFfi>::sys_const(&#param_name)
507507
});
508508
}
509509
}

godot-core/src/builtin/arrays.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,27 @@ impl<T> TypedArray<T> {
7272
impl<T> Clone for TypedArray<T> {
7373
fn clone(&self) -> Self {
7474
unsafe {
75-
Self::from_sys_init(|opaque_ptr| {
76-
let ctor = sys::builtin_fn!(array_construct_copy);
77-
ctor(opaque_ptr, &self.sys() as *const sys::GDNativeTypePtr);
75+
Self::from_sys_init(|self_ptr| {
76+
let ctor = ::godot_ffi::builtin_fn!(array_construct_copy);
77+
let mut args = [self.sys_const()];
78+
ctor(self_ptr, args.as_mut_ptr());
7879
})
7980
}
8081
}
8182
}
83+
84+
// TODO enable this:
85+
// impl_builtin_traits! {
86+
// for TypedArray<T> {
87+
// Clone => array_construct_copy;
88+
// Drop => array_destroy;
89+
// }
90+
// }
91+
8292
impl<T> GodotFfi for TypedArray<T> {
8393
ffi_methods! { type sys::GDNativeTypePtr = *mut Opaque; .. }
8494
}
95+
8596
impl<T> Drop for TypedArray<T> {
8697
fn drop(&mut self) {
8798
unsafe {

godot-core/src/builtin/macros.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ macro_rules! impl_builtin_traits_inner {
2727
unsafe {
2828
Self::from_sys_init(|self_ptr| {
2929
let ctor = ::godot_ffi::builtin_fn!($gd_method);
30-
let args = [self.sys()];
31-
ctor(self_ptr, args.as_ptr());
30+
let mut args = [self.sys_const()];
31+
ctor(self_ptr, args.as_mut_ptr());
3232
})
3333
}
3434
}
@@ -141,9 +141,9 @@ macro_rules! impl_builtin_froms {
141141
fn from(other: &$From) -> Self {
142142
unsafe {
143143
Self::from_sys_init(|ptr| {
144-
let args = [other.sys()];
144+
let mut args = [other.sys_const()];
145145
::godot_ffi::builtin_call! {
146-
$from_fn(ptr, args.as_ptr())
146+
$from_fn(ptr, args.as_mut_ptr())
147147
}
148148
})
149149
}

godot-core/src/builtin/meta/signature.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub trait SignatureTuple {
1818

1919
fn varcall<C: GodotClass>(
2020
instance_ptr: sys::GDExtensionClassInstancePtr,
21-
args_ptr: *const sys::GDNativeVariantPtr,
21+
args_ptr: *mut sys::GDNativeConstVariantPtr,
2222
ret: sys::GDNativeVariantPtr,
2323
err: *mut sys::GDNativeCallError,
2424
func: fn(&mut C, Self::Params) -> Self::Ret,
@@ -29,7 +29,7 @@ pub trait SignatureTuple {
2929
// We could fall back to varcalls in such cases, and not require GodotFfi categorically.
3030
fn ptrcall<C: GodotClass>(
3131
instance_ptr: sys::GDExtensionClassInstancePtr,
32-
args_ptr: *const sys::GDNativeTypePtr,
32+
args_ptr: *mut sys::GDNativeConstTypePtr,
3333
ret: sys::GDNativeTypePtr,
3434
func: fn(&mut C, Self::Params) -> Self::Ret,
3535
method_name: &str,
@@ -106,7 +106,7 @@ macro_rules! impl_signature_for_tuple {
106106
#[inline]
107107
fn varcall<C : GodotClass>(
108108
instance_ptr: sys::GDExtensionClassInstancePtr,
109-
args_ptr: *const sys::GDNativeVariantPtr,
109+
args_ptr: *mut sys::GDNativeConstVariantPtr,
110110
ret: sys::GDNativeVariantPtr,
111111
err: *mut sys::GDNativeCallError,
112112
func: fn(&mut C, Self::Params) -> Self::Ret,
@@ -138,7 +138,7 @@ macro_rules! impl_signature_for_tuple {
138138
#[inline]
139139
fn ptrcall<C : GodotClass>(
140140
instance_ptr: sys::GDExtensionClassInstancePtr,
141-
args_ptr: *const sys::GDNativeTypePtr,
141+
args_ptr: *mut sys::GDNativeConstTypePtr,
142142
ret: sys::GDNativeTypePtr,
143143
func: fn(&mut C, Self::Params) -> Self::Ret,
144144
method_name: &str,

godot-core/src/builtin/node_path.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ impl From<&GodotString> for NodePath {
2828
unsafe {
2929
Self::from_sys_init(|self_ptr| {
3030
let ctor = sys::builtin_fn!(node_path_from_string);
31-
let args = [path.sys()];
32-
ctor(self_ptr, args.as_ptr());
31+
let mut args = [path.sys_const()];
32+
ctor(self_ptr, args.as_mut_ptr());
3333
})
3434
}
3535
}
@@ -40,8 +40,8 @@ impl From<&NodePath> for GodotString {
4040
unsafe {
4141
Self::from_sys_init(|self_ptr| {
4242
let ctor = sys::builtin_fn!(string_from_node_path);
43-
let args = [path.sys()];
44-
ctor(self_ptr, args.as_ptr());
43+
let mut args = [path.sys_const()];
44+
ctor(self_ptr, args.as_mut_ptr());
4545
})
4646
}
4747
}

godot-core/src/builtin/others.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ impl Callable {
5555
unsafe {
5656
Self::from_sys_init(|self_ptr| {
5757
let ctor = sys::builtin_fn!(callable_from_object_method);
58-
let args = [object.sys(), method.sys()];
59-
ctor(self_ptr, args.as_ptr());
58+
let mut args = [object.sys_const(), method.sys_const()];
59+
ctor(self_ptr, args.as_mut_ptr());
6060
})
6161
}
6262
}

godot-core/src/builtin/string_name.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ impl From<&GodotString> for StringName {
108108
unsafe {
109109
Self::from_sys_init(|self_ptr| {
110110
let ctor = sys::builtin_fn!(string_name_from_string);
111-
let args = [s.sys()];
112-
ctor(self_ptr, args.as_ptr());
111+
let mut args = [s.sys_const()];
112+
ctor(self_ptr, args.as_mut_ptr());
113113
})
114114
}
115115
}
@@ -127,8 +127,8 @@ impl From<&StringName> for GodotString {
127127
unsafe {
128128
Self::from_sys_init(|self_ptr| {
129129
let ctor = sys::builtin_fn!(string_from_string_name);
130-
let args = [s.sys()];
131-
ctor(self_ptr, args.as_ptr());
130+
let mut args = [s.sys_const()];
131+
ctor(self_ptr, args.as_mut_ptr());
132132
})
133133
}
134134
}

0 commit comments

Comments
 (0)