summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaul Santos <raulsntos@gmail.com>2024-08-10 16:45:35 +0200
committerRaul Santos <raulsntos@gmail.com>2024-09-12 02:15:55 +0200
commitaaffab8afbf0b60b95090c26bd87a272ca478f75 (patch)
tree53edde23efed845ea5a47f24dcd8884bd7f32335
parent97ef3c837263099faf02d8ebafd6c77c94d2aaba (diff)
downloadredot-engine-aaffab8afbf0b60b95090c26bd87a272ca478f75.tar.gz
Add metadata for `char16_t` and `char32_t`
We don't seem to expose any API that uses `char16_t` yet, but I added it anyway since we make the type info for it. I didn't add anything for `wchar_t` because we are not making a type info so maybe we don't have a need for it yet, it could be added in the future. To prevent breaking compatibility with the C# bindings, we ignore the `char32_t` metadata and still use `System.Int64`.
-rw-r--r--core/extension/extension_api_dump.cpp2
-rw-r--r--core/extension/gdextension_interface.h4
-rw-r--r--core/variant/type_info.h8
-rw-r--r--modules/mono/editor/bindings_generator.cpp6
4 files changed, 15 insertions, 5 deletions
diff --git a/core/extension/extension_api_dump.cpp b/core/extension/extension_api_dump.cpp
index 296ebc901f..4042d6b80d 100644
--- a/core/extension/extension_api_dump.cpp
+++ b/core/extension/extension_api_dump.cpp
@@ -88,7 +88,7 @@ static String get_property_info_type_name(const PropertyInfo &p_info) {
}
static String get_type_meta_name(const GodotTypeInfo::Metadata metadata) {
- static const char *argmeta[11] = { "none", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float", "double" };
+ static const char *argmeta[13] = { "none", "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64", "float", "double", "char16", "char32" };
return argmeta[metadata];
}
diff --git a/core/extension/gdextension_interface.h b/core/extension/gdextension_interface.h
index d3132baf1b..988974b5d5 100644
--- a/core/extension/gdextension_interface.h
+++ b/core/extension/gdextension_interface.h
@@ -421,7 +421,9 @@ typedef enum {
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_UINT32,
GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_UINT64,
GDEXTENSION_METHOD_ARGUMENT_METADATA_REAL_IS_FLOAT,
- GDEXTENSION_METHOD_ARGUMENT_METADATA_REAL_IS_DOUBLE
+ GDEXTENSION_METHOD_ARGUMENT_METADATA_REAL_IS_DOUBLE,
+ GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_CHAR16,
+ GDEXTENSION_METHOD_ARGUMENT_METADATA_INT_IS_CHAR32,
} GDExtensionClassMethodArgumentMetadata;
typedef void (*GDExtensionClassMethodCall)(void *method_userdata, GDExtensionClassInstancePtr p_instance, const GDExtensionConstVariantPtr *p_args, GDExtensionInt p_argument_count, GDExtensionVariantPtr r_return, GDExtensionCallError *r_error);
diff --git a/core/variant/type_info.h b/core/variant/type_info.h
index d51c80eebe..6bb703f2dd 100644
--- a/core/variant/type_info.h
+++ b/core/variant/type_info.h
@@ -47,7 +47,9 @@ enum Metadata {
METADATA_INT_IS_UINT32,
METADATA_INT_IS_UINT64,
METADATA_REAL_IS_FLOAT,
- METADATA_REAL_IS_DOUBLE
+ METADATA_REAL_IS_DOUBLE,
+ METADATA_INT_IS_CHAR16,
+ METADATA_INT_IS_CHAR32,
};
}
@@ -104,8 +106,8 @@ MAKE_TYPE_INFO_WITH_META(uint32_t, Variant::INT, GodotTypeInfo::METADATA_INT_IS_
MAKE_TYPE_INFO_WITH_META(int32_t, Variant::INT, GodotTypeInfo::METADATA_INT_IS_INT32)
MAKE_TYPE_INFO_WITH_META(uint64_t, Variant::INT, GodotTypeInfo::METADATA_INT_IS_UINT64)
MAKE_TYPE_INFO_WITH_META(int64_t, Variant::INT, GodotTypeInfo::METADATA_INT_IS_INT64)
-MAKE_TYPE_INFO(char16_t, Variant::INT)
-MAKE_TYPE_INFO(char32_t, Variant::INT)
+MAKE_TYPE_INFO_WITH_META(char16_t, Variant::INT, GodotTypeInfo::METADATA_INT_IS_CHAR16)
+MAKE_TYPE_INFO_WITH_META(char32_t, Variant::INT, GodotTypeInfo::METADATA_INT_IS_CHAR32)
MAKE_TYPE_INFO_WITH_META(float, Variant::FLOAT, GodotTypeInfo::METADATA_REAL_IS_FLOAT)
MAKE_TYPE_INFO_WITH_META(double, Variant::FLOAT, GodotTypeInfo::METADATA_REAL_IS_DOUBLE)
diff --git a/modules/mono/editor/bindings_generator.cpp b/modules/mono/editor/bindings_generator.cpp
index 2ec073e4fa..3222c58c4e 100644
--- a/modules/mono/editor/bindings_generator.cpp
+++ b/modules/mono/editor/bindings_generator.cpp
@@ -3448,6 +3448,12 @@ StringName BindingsGenerator::_get_int_type_name_from_meta(GodotTypeInfo::Metada
case GodotTypeInfo::METADATA_INT_IS_UINT64:
return "ulong";
break;
+ case GodotTypeInfo::METADATA_INT_IS_CHAR16:
+ return "char";
+ break;
+ case GodotTypeInfo::METADATA_INT_IS_CHAR32:
+ // To prevent breaking compatibility, C# bindings need to keep using `long`.
+ return "long";
default:
// Assume INT64
return "long";