Compare commits

...

16 Commits

Author SHA1 Message Date
Thaddeus Crews fab2709394
Merge f5b340ab69 into 1c19d627aa 2023-12-23 13:58:05 +03:00
David Snopek 1c19d627aa
Merge pull request #1340 from aaronfranke/really-packed
Add PackedRealArray as an alias for PackedFloat(32/64)Array
2023-12-20 08:25:42 -06:00
Aaron Franke 646c71c277
Add PackedRealArray as an alias for PackedFloat(32/64)Array 2023-12-19 04:44:05 -06:00
Rémi Verschelde 48afa82f29
Merge pull request #1329 from godotengine/dependabot/github_actions/actions/setup-python-5
Bump actions/setup-python from 4 to 5
2023-12-07 08:58:31 +01:00
Rémi Verschelde 39ca745d0d
Merge pull request #1324 from akien-mga/cmake-remove-hardcoded-warnings
CMake: Remove hardcoded warnings list and forcing -Werror on library builds
2023-12-07 08:57:52 +01:00
dependabot[bot] a7becb43e6
Bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-06 19:33:16 +00:00
Rémi Verschelde 41517eacb1
CMake: Remove hardcoded warnings list and forcing -Werror on library builds
The CMake buildsystem should be completely reviewed to properly match
what is done by SCons, instead of making its own arbitrary decisions on
how godot-cpp should be compiled.

Currently the SCons setup doesn't include warning options, so CMake
shouldn't either. Options similar to upstream Godot's SCons setup could
be added, and then replicated for CMake.
2023-12-01 10:45:07 +01:00
Rémi Verschelde 17137b2e2e
Merge pull request #1323 from dsnopek/gcc-type-limits-error
Prevent `-Wtype-limits` warning on GCC 11 due to unsigned comparison
2023-12-01 10:36:59 +01:00
David Snopek cad5be53b1 Avoid error from -Werror=type-limits on GCC 11 2023-11-30 17:52:33 -06:00
Rémi Verschelde 54136ee835
Add 4.2 branch to README 2023-11-30 10:02:53 +01:00
Rémi Verschelde 0f78fc45bd
gdextension: Sync with upstream commit 46dc277917a93cbf601bbcf0d27d00f6feeec0d5 (4.2-stable) 2023-11-30 10:01:44 +01:00
Rémi Verschelde 11b2700b23
Merge pull request #1321 from dsnopek/postinitialize
Send NOTIFICATION_POSTINITIALIZE to extension classes
2023-11-30 09:55:30 +01:00
David Snopek 20c4e843b0 Send NOTIFICATION_POSTINITIALIZE to extension classes 2023-11-29 12:00:43 -06:00
Rémi Verschelde f3143c7a9c
Merge pull request #1320 from mihe/bit-field-size
Change bit field enums to use `uint64_t` as underlying type
2023-11-28 15:05:41 +01:00
Mikael Hermansson 943d1c8cdf Change bit field enums to use `uint64_t` as underlying type 2023-11-28 01:03:41 +01:00
Thaddeus Crews f5b340ab69
Implement typed dictionaries 2023-10-02 11:57:02 -05:00
17 changed files with 2015 additions and 41 deletions

View File

@ -104,7 +104,7 @@ jobs:
continue-on-error: true
- name: Set up Python (for SCons)
uses: actions/setup-python@v4
uses: actions/setup-python@v5
with:
python-version: '3.x'

View File

@ -47,11 +47,6 @@ option(GODOT_CPP_WARNING_AS_ERROR "Treat warnings as errors" OFF)
# Add path to modules
list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
# Check if we are building ourself or being included
if(${PROJECT_NAME} STREQUAL ${CMAKE_PROJECT_NAME})
set(GODOT_CPP_BUILDING_SELF ON)
endif()
# Set some helper variables for readability
set( compiler_is_clang "$<OR:$<CXX_COMPILER_ID:AppleClang>,$<CXX_COMPILER_ID:Clang>>" )
set( compiler_is_gnu "$<CXX_COMPILER_ID:GNU>" )
@ -158,12 +153,6 @@ add_library(godot::cpp ALIAS ${PROJECT_NAME})
include(GodotCompilerWarnings)
# Treat warnings as errors if we are building ourself
if(GODOT_CPP_BUILDING_SELF)
unset( GODOT_CPP_WARNING_AS_ERROR CACHE )
set_warning_as_error()
endif()
target_compile_features(${PROJECT_NAME}
PRIVATE
cxx_std_17

View File

@ -7,8 +7,9 @@
> from Godot's `master` branch.
>
> For users of stable branches, switch to the branch matching your target Godot version:
> - [`4.0`](https://github.com/godotengine/godot-cpp/tree/4.0)
> - [`4.2`](https://github.com/godotengine/godot-cpp/tree/4.2)
> - [`4.1`](https://github.com/godotengine/godot-cpp/tree/4.1)
> - [`4.0`](https://github.com/godotengine/godot-cpp/tree/4.0)
>
> Or check out the Git tag matching your Godot version (e.g. `godot-4.1.1-stable`).
>

View File

@ -422,6 +422,8 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
for include in fully_used_classes:
if include == "TypedArray":
result.append("#include <godot_cpp/variant/typed_array.hpp>")
elif include == "TypedDictionary":
result.append("#include <godot_cpp/variant/typed_dictionary.hpp>")
else:
result.append(f"#include <godot_cpp/{get_include_path(include)}>")
@ -750,6 +752,9 @@ def generate_builtin_class_header(builtin_api, size, used_classes, fully_used_cl
if class_name == "Dictionary":
result.append("\tconst Variant &operator[](const Variant &p_key) const;")
result.append("\tVariant &operator[](const Variant &p_key);")
result.append(
"\tvoid set_typed(uint32_t p_key_type, const StringName &p_key_class_name, const Variant &p_key_script, uint32_t p_value_type, const StringName &p_value_class_name, const Variant &p_value_script);"
)
result.append("};")
@ -1135,6 +1140,32 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
fully_used_classes.add(array_type_name)
else:
used_classes.add(array_type_name)
elif type_name.startswith("typeddictionary::"):
fully_used_classes.add("TypedDictionary")
dict_type_name = type_name.replace("typeddictionary::", "")
if dict_type_name.startswith("const "):
dict_type_name = dict_type_name[6:]
dict_type_names = dict_type_name.split(",")
dict_type_name = dict_type_names[0]
if dict_type_name.endswith("*"):
dict_type_name = dict_type_name[:-1]
if is_included(dict_type_name, class_name):
if is_enum(dict_type_name):
fully_used_classes.add(get_enum_class(dict_type_name))
elif "default_value" in argument:
fully_used_classes.add(dict_type_name)
else:
used_classes.add(dict_type_name)
dict_type_name = dict_type_names[2]
if dict_type_name.endswith("*"):
dict_type_name = dict_type_name[:-1]
if is_included(dict_type_name, class_name):
if is_enum(dict_type_name):
fully_used_classes.add(get_enum_class(dict_type_name))
elif "default_value" in argument:
fully_used_classes.add(dict_type_name)
else:
used_classes.add(dict_type_name)
elif is_enum(type_name):
fully_used_classes.add(get_enum_class(type_name))
elif "default_value" in argument:
@ -1164,6 +1195,32 @@ def generate_engine_classes_bindings(api, output_dir, use_template_get_node):
fully_used_classes.add(array_type_name)
else:
used_classes.add(array_type_name)
elif type_name.startswith("typeddictionary::"):
fully_used_classes.add("TypedDictionary")
dict_type_name = type_name.replace("typeddictionary::", "")
if dict_type_name.startswith("const "):
dict_type_name = dict_type_name[6:]
dict_type_names = dict_type_name.split(",")
dict_type_name = dict_type_names[0]
if dict_type_name.endswith("*"):
dict_type_name = dict_type_name[:-1]
if is_included(dict_type_name, class_name):
if is_enum(dict_type_name):
fully_used_classes.add(get_enum_class(dict_type_name))
elif is_variant(dict_type_name):
fully_used_classes.add(dict_type_name)
else:
used_classes.add(dict_type_name)
dict_type_name = dict_type_names[2]
if dict_type_name.endswith("*"):
dict_type_name = dict_type_name[:-1]
if is_included(dict_type_name, class_name):
if is_enum(dict_type_name):
fully_used_classes.add(get_enum_class(dict_type_name))
elif is_variant(dict_type_name):
fully_used_classes.add(dict_type_name)
else:
used_classes.add(dict_type_name)
elif is_enum(type_name):
fully_used_classes.add(get_enum_class(type_name))
elif is_variant(type_name):
@ -1288,6 +1345,8 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
for included in fully_used_classes:
if included == "TypedArray":
result.append("#include <godot_cpp/variant/typed_array.hpp>")
elif included == "TypedDictionary":
result.append("#include <godot_cpp/variant/typed_dictionary.hpp>")
else:
result.append(f"#include <godot_cpp/{get_include_path(included)}>")
@ -1329,7 +1388,11 @@ def generate_engine_class_header(class_api, used_classes, fully_used_classes, us
if "enums" in class_api:
for enum_api in class_api["enums"]:
result.append(f'\tenum {enum_api["name"]} {{')
if enum_api["is_bitfield"]:
result.append(f'\tenum {enum_api["name"]} : uint64_t {{')
else:
result.append(f'\tenum {enum_api["name"]} {{')
for value in enum_api["values"]:
result.append(f'\t\t{value["name"]} = {value["value"]},')
result.append("\t};")
@ -1686,6 +1749,8 @@ def generate_global_constants(api, output_dir):
header.append(f"#ifndef {header_guard}")
header.append(f"#define {header_guard}")
header.append("")
header.append("#include <cstdint>")
header.append("")
header.append("namespace godot {")
header.append("")
@ -1698,7 +1763,11 @@ def generate_global_constants(api, output_dir):
if enum_def["name"].startswith("Variant."):
continue
header.append(f'\tenum {enum_def["name"]} {{')
if enum_def["is_bitfield"]:
header.append(f'\tenum {enum_def["name"]} : uint64_t {{')
else:
header.append(f'\tenum {enum_def["name"]} {{')
for value in enum_def["values"]:
header.append(f'\t\t{value["name"]} = {value["value"]},')
header.append("\t};")
@ -2273,6 +2342,7 @@ def is_variant(type_name):
or type_name in builtin_classes
or type_name == "Nil"
or type_name.startswith("typedarray::")
or type_name.startswith("typeddictionary::")
)
@ -2298,6 +2368,8 @@ def is_included(type_name, current_type):
"""
if type_name.startswith("typedarray::"):
return True
if type_name.startswith("typeddictionary::"):
return True
to_include = get_enum_class(type_name) if is_enum(type_name) else type_name
if to_include == current_type or is_pod_type(to_include):
return False
@ -2331,6 +2403,12 @@ def correct_typed_array(type_name):
return type_name
def correct_typed_dictionary(type_name):
if type_name.startswith("typeddictionary::"):
return type_name.replace("typeddictionary::", "TypedDictionary<").replace(",", ", ") + ">"
return type_name
def correct_type(type_name, meta=None):
type_conversion = {"float": "double", "int": "int64_t", "Nil": "Variant"}
if meta != None:
@ -2344,6 +2422,8 @@ def correct_type(type_name, meta=None):
return type_conversion[type_name]
if type_name.startswith("typedarray::"):
return type_name.replace("typedarray::", "TypedArray<") + ">"
if type_name.startswith("typeddictionary::"):
return type_name.replace("typeddictionary::", "TypedDictionary<").replace(",", ", ") + ">"
if is_enum(type_name):
if is_bitfield(type_name):
base_class = get_enum_class(type_name)
@ -2448,6 +2528,8 @@ def get_default_value_for_type(type_name):
return "false"
if type_name.startswith("typedarray::"):
return f"{correct_type(type_name)}()"
if type_name.startswith("typeddictionary::"):
return f"{correct_type(type_name)}()"
if is_enum(type_name):
return f"{correct_type(type_name)}(0)"
if is_variant(type_name):

View File

@ -3,9 +3,9 @@
"version_major": 4,
"version_minor": 2,
"version_patch": 0,
"version_status": "rc2",
"version_status": "stable",
"version_build": "official",
"version_full_name": "Godot Engine v4.2.rc2.official"
"version_full_name": "Godot Engine v4.2.stable.official"
},
"builtin_class_sizes": [
{

View File

@ -2115,6 +2115,33 @@ typedef GDExtensionVariantPtr (*GDExtensionInterfaceDictionaryOperatorIndex)(GDE
*/
typedef GDExtensionVariantPtr (*GDExtensionInterfaceDictionaryOperatorIndexConst)(GDExtensionConstTypePtr p_self, GDExtensionConstVariantPtr p_key);
/**
* @name dictionary_ref
* @since 4.2
*
* Sets a Dictionary to be a reference to another Dictionary object.
*
* @param p_self A pointer to the Dictionary object to update.
* @param p_from A pointer to the Dictionary object to reference.
*/
typedef void (*GDExtensionInterfaceDictionaryRef)(GDExtensionTypePtr p_self, GDExtensionConstTypePtr p_from);
/**
* @name dictionary_set_typed
* @since 4.2
*
* Makes a Dictionary into a typed Dictionary.
*
* @param p_self A pointer to the Dictionary.
* @param p_key_type The type of Variant the Dictionary key will store.
* @param p_key_class_name A pointer to a StringName with the name of the object (if p_key_type is GDEXTENSION_VARIANT_TYPE_OBJECT).
* @param p_key_script A pointer to a Script object (if p_key_type is GDEXTENSION_VARIANT_TYPE_OBJECT and the base class is extended by a script).
* @param p_value_type The type of Variant the Dictionary value will store.
* @param p_value_class_name A pointer to a StringName with the name of the object (if p_value_type is GDEXTENSION_VARIANT_TYPE_OBJECT).
* @param p_value_script A pointer to a Script object (if p_value_type is GDEXTENSION_VARIANT_TYPE_OBJECT and the base class is extended by a script).
*/
typedef void (*GDExtensionInterfaceDictionarySetTyped)(GDExtensionTypePtr p_self, GDExtensionVariantType p_key_type, GDExtensionConstStringNamePtr p_key_class_name, GDExtensionConstVariantPtr p_key_script, GDExtensionVariantType p_value_type, GDExtensionConstStringNamePtr p_value_class_name, GDExtensionConstVariantPtr p_value_script);
/* INTERFACE: Object */
/**

View File

@ -33,6 +33,7 @@
#include <godot_cpp/core/object.hpp>
#include <godot_cpp/variant/typed_array.hpp>
#include <godot_cpp/variant/typed_dictionary.hpp>
#include <godot_cpp/variant/variant.hpp>
#include <gdextension_interface.h>
@ -395,6 +396,726 @@ MAKE_TYPED_ARRAY_INFO(Vector<Vector3>, Variant::PACKED_VECTOR3_ARRAY)
MAKE_TYPED_ARRAY_INFO(Vector<Color>, Variant::PACKED_COLOR_ARRAY)
*/
template <class TKey, class TValue>
struct PtrToArg<TypedDictionary<TKey, TValue>> {
_FORCE_INLINE_ static TypedDictionary<TKey, TValue> convert(const void *p_ptr) {
return TypedDictionary<TKey, TValue>(*reinterpret_cast<const Dictionary *>(p_ptr));
}
typedef Dictionary EncodeT;
_FORCE_INLINE_ static void encode(TypedDictionary<TKey, TValue> p_val, void *p_ptr) {
*reinterpret_cast<Dictionary *>(p_ptr) = p_val;
}
};
template <class TKey, class TValue>
struct PtrToArg<const TypedDictionary<TKey, TValue> &> {
typedef Dictionary EncodeT;
_FORCE_INLINE_ static TypedDictionary<TKey, TValue>
convert(const void *p_ptr) {
return TypedDictionary<TKey, TValue>(*reinterpret_cast<const Dictionary *>(p_ptr));
}
};
template <class TKey, class TValue>
struct GetTypeInfo<TypedDictionary<TKey, TValue>> {
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY;
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
static inline PropertyInfo get_class_info() {
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", TKey::get_class_static(), TValue::get_class_static()));
}
};
template <class TKey, class TValue>
struct GetTypeInfo<const TypedDictionary<TKey, TValue> &> {
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY;
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE;
static inline PropertyInfo get_class_info() {
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", TKey::get_class_static(), TValue::get_class_static()));
}
};
#define MAKE_TYPED_DICTIONARY_INFO(m_type, m_variant_type) \
template <> \
struct GetTypeInfo<TypedDictionary<m_type, m_type>> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type).utf8().get_data(), Variant::get_type_name(m_variant_type).utf8().get_data())); \
} \
}; \
template <> \
struct GetTypeInfo<const TypedDictionary<m_type, m_type> &> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type).utf8().get_data(), Variant::get_type_name(m_variant_type).utf8().get_data())); \
} \
};
#define MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(m_type, m_variant_type) \
template <class T> \
struct GetTypeInfo<TypedDictionary<T, m_type>> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", T::get_class_static(), Variant::get_type_name(m_variant_type).utf8().get_data())); \
} \
}; \
template <class T> \
struct GetTypeInfo<const TypedDictionary<T, m_type> &> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", T::get_class_static(), Variant::get_type_name(m_variant_type).utf8().get_data())); \
} \
}; \
template <class T> \
struct GetTypeInfo<TypedDictionary<m_type, T>> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type).utf8().get_data(), T::get_class_static())); \
} \
}; \
template <class T> \
struct GetTypeInfo<const TypedDictionary<m_type, T> &> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type).utf8().get_data(), T::get_class_static())); \
} \
};
#define MAKE_TYPED_DICTIONARY_EXPANDED_INFO(m_type_a, m_variant_type_a, m_type_b, m_variant_type_b) \
template <> \
struct GetTypeInfo<TypedDictionary<m_type_a, m_type_b>> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type_a).utf8().get_data(), Variant::get_type_name(m_variant_type_b).utf8().get_data())); \
} \
}; \
template <> \
struct GetTypeInfo<const TypedDictionary<m_type_a, m_type_b> &> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type_a).utf8().get_data(), Variant::get_type_name(m_variant_type_b).utf8().get_data())); \
} \
}; \
template <> \
struct GetTypeInfo<TypedDictionary<m_type_b, m_type_a>> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type_b).utf8().get_data(), Variant::get_type_name(m_variant_type_a).utf8().get_data())); \
} \
}; \
template <> \
struct GetTypeInfo<const TypedDictionary<m_type_b, m_type_a> &> { \
static constexpr GDExtensionVariantType VARIANT_TYPE = GDEXTENSION_VARIANT_TYPE_DICTIONARY; \
static constexpr GDExtensionClassMethodArgumentMetadata METADATA = GDEXTENSION_METHOD_ARGUMENT_METADATA_NONE; \
static inline PropertyInfo get_class_info() { \
return make_property_info(Variant::Type::DICTIONARY, "", PROPERTY_HINT_DICTIONARY_TYPE, vformat("%s,%s", Variant::get_type_name(m_variant_type_b).utf8().get_data(), Variant::get_type_name(m_variant_type_a).utf8().get_data())); \
} \
};
MAKE_TYPED_DICTIONARY_INFO(bool, Variant::BOOL)
MAKE_TYPED_DICTIONARY_INFO(uint8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(int8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(uint16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_INFO(float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_INFO(double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_INFO(String, Variant::STRING)
MAKE_TYPED_DICTIONARY_INFO(Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_INFO(Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_INFO(Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_INFO(Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_INFO(Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_INFO(Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_INFO(Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_INFO(Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_INFO(Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_INFO(AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_INFO(Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_INFO(Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_INFO(Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_INFO(StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_INFO(NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_INFO(RID, Variant::RID)
MAKE_TYPED_DICTIONARY_INFO(Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_INFO(Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_INFO(Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_INFO(Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Variant, Variant::NIL)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(bool, Variant::BOOL)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(uint8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(int8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(uint16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(String, Variant::STRING)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(RID, Variant::RID)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_WITH_OBJECT_INFO(Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, bool, Variant::BOOL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, uint8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, int8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, uint16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Variant, Variant::NIL, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, uint8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, int8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, uint16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(bool, Variant::BOOL, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, int8_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, uint16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint8_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, uint16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int8_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, int16_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint16_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, uint32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int16_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, int32_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint32_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, uint64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int32_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, int64_t, Variant::INT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(uint64_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, float, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(int64_t, Variant::INT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, double, Variant::FLOAT)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(float, Variant::FLOAT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, String, Variant::STRING)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(double, Variant::FLOAT, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Vector2, Variant::VECTOR2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(String, Variant::STRING, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Vector2i, Variant::VECTOR2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2, Variant::VECTOR2, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Rect2, Variant::RECT2)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector2i, Variant::VECTOR2I, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Rect2i, Variant::RECT2I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2, Variant::RECT2, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Vector3, Variant::VECTOR3)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Rect2i, Variant::RECT2I, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Vector3i, Variant::VECTOR3I)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3, Variant::VECTOR3, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Transform2D, Variant::TRANSFORM2D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Vector3i, Variant::VECTOR3I, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Plane, Variant::PLANE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform2D, Variant::TRANSFORM2D, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Quaternion, Variant::QUATERNION)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Plane, Variant::PLANE, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, AABB, Variant::AABB)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Quaternion, Variant::QUATERNION, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Basis, Variant::BASIS)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(AABB, Variant::AABB, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, Transform3D, Variant::TRANSFORM3D)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Basis, Variant::BASIS, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, Color, Variant::COLOR)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Transform3D, Variant::TRANSFORM3D, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, StringName, Variant::STRING_NAME)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Color, Variant::COLOR, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(StringName, Variant::STRING_NAME, NodePath, Variant::NODE_PATH)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(StringName, Variant::STRING_NAME, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(StringName, Variant::STRING_NAME, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(StringName, Variant::STRING_NAME, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(StringName, Variant::STRING_NAME, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(StringName, Variant::STRING_NAME, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(NodePath, Variant::NODE_PATH, RID, Variant::RID)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(NodePath, Variant::NODE_PATH, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(NodePath, Variant::NODE_PATH, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(NodePath, Variant::NODE_PATH, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(NodePath, Variant::NODE_PATH, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(RID, Variant::RID, Callable, Variant::CALLABLE)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(RID, Variant::RID, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(RID, Variant::RID, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(RID, Variant::RID, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Callable, Variant::CALLABLE, Signal, Variant::SIGNAL)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Callable, Variant::CALLABLE, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Callable, Variant::CALLABLE, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Signal, Variant::SIGNAL, Dictionary, Variant::DICTIONARY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Signal, Variant::SIGNAL, Array, Variant::ARRAY)
MAKE_TYPED_DICTIONARY_EXPANDED_INFO(Dictionary, Variant::DICTIONARY, Array, Variant::ARRAY)
#define CLASS_INFO(m_type) (GetTypeInfo<m_type *>::get_class_info())
} // namespace godot

View File

@ -154,6 +154,7 @@ extern "C" GDExtensionInterfaceArrayRef gdextension_interface_array_ref;
extern "C" GDExtensionInterfaceArraySetTyped gdextension_interface_array_set_typed;
extern "C" GDExtensionInterfaceDictionaryOperatorIndex gdextension_interface_dictionary_operator_index;
extern "C" GDExtensionInterfaceDictionaryOperatorIndexConst gdextension_interface_dictionary_operator_index_const;
extern "C" GDExtensionInterfaceDictionarySetTyped gdextension_interface_dictionary_set_typed;
extern "C" GDExtensionInterfaceObjectMethodBindCall gdextension_interface_object_method_bind_call;
extern "C" GDExtensionInterfaceObjectMethodBindPtrcall gdextension_interface_object_method_bind_ptrcall;
extern "C" GDExtensionInterfaceObjectDestroy gdextension_interface_object_destroy;

File diff suppressed because it is too large Load Diff

View File

@ -356,6 +356,12 @@ String vformat(const String &p_text, const VarArgs... p_args) {
#include <godot_cpp/variant/builtin_vararg_methods.hpp>
#ifdef REAL_T_IS_DOUBLE
using PackedRealArray = PackedFloat64Array;
#else
using PackedRealArray = PackedFloat32Array;
#endif // REAL_T_IS_DOUBLE
} // namespace godot
#endif // GODOT_VARIANT_HPP

View File

@ -50,6 +50,12 @@ void Wrapped::_postinitialize() {
godot::internal::gdextension_interface_object_set_instance(_owner, reinterpret_cast<GDExtensionConstStringNamePtr>(extension_class), this);
}
godot::internal::gdextension_interface_object_set_instance_binding(_owner, godot::internal::token, this, _get_bindings_callbacks());
if (extension_class) {
Object *obj = dynamic_cast<Object *>(this);
if (obj) {
obj->notification(Object::NOTIFICATION_POSTINITIALIZE);
}
}
}
Wrapped::Wrapped(const StringName p_godot_class) {

View File

@ -160,6 +160,7 @@ GDExtensionInterfaceArrayRef gdextension_interface_array_ref = nullptr;
GDExtensionInterfaceArraySetTyped gdextension_interface_array_set_typed = nullptr;
GDExtensionInterfaceDictionaryOperatorIndex gdextension_interface_dictionary_operator_index = nullptr;
GDExtensionInterfaceDictionaryOperatorIndexConst gdextension_interface_dictionary_operator_index_const = nullptr;
GDExtensionInterfaceDictionarySetTyped gdextension_interface_dictionary_set_typed = nullptr;
GDExtensionInterfaceObjectMethodBindCall gdextension_interface_object_method_bind_call = nullptr;
GDExtensionInterfaceObjectMethodBindPtrcall gdextension_interface_object_method_bind_ptrcall = nullptr;
GDExtensionInterfaceObjectDestroy gdextension_interface_object_destroy = nullptr;
@ -271,7 +272,12 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
} else if (internal::godot_version.minor != GODOT_VERSION_MINOR) {
compatible = internal::godot_version.minor > GODOT_VERSION_MINOR;
} else {
#if GODOT_VERSION_PATCH > 0
compatible = internal::godot_version.patch >= GODOT_VERSION_PATCH;
#else
// Prevent -Wtype-limits warning due to unsigned comparison.
compatible = true;
#endif
}
if (!compatible) {
// We need to use snprintf() here because vformat() uses Variant, and we haven't loaded
@ -392,6 +398,7 @@ GDExtensionBool GDExtensionBinding::init(GDExtensionInterfaceGetProcAddress p_ge
LOAD_PROC_ADDRESS(array_set_typed, GDExtensionInterfaceArraySetTyped);
LOAD_PROC_ADDRESS(dictionary_operator_index, GDExtensionInterfaceDictionaryOperatorIndex);
LOAD_PROC_ADDRESS(dictionary_operator_index_const, GDExtensionInterfaceDictionaryOperatorIndexConst);
LOAD_PROC_ADDRESS(dictionary_set_typed, GDExtensionInterfaceDictionarySetTyped);
LOAD_PROC_ADDRESS(object_method_bind_call, GDExtensionInterfaceObjectMethodBindCall);
LOAD_PROC_ADDRESS(object_method_bind_ptrcall, GDExtensionInterfaceObjectMethodBindPtrcall);
LOAD_PROC_ADDRESS(object_destroy, GDExtensionInterfaceObjectDestroy);

View File

@ -227,4 +227,10 @@ Variant &Dictionary::operator[](const Variant &p_key) {
return *var;
}
void Dictionary::set_typed(uint32_t p_key_type, const StringName &p_key_class_name, const Variant &p_key_script, uint32_t p_value_type, const StringName &p_value_class_name, const Variant &p_value_script) {
// p_key_type/p_value_type are not Variant::Type so that header doesn't depend on <variant.hpp>.
internal::gdextension_interface_dictionary_set_typed((GDExtensionTypePtr *)this, (GDExtensionVariantType)p_key_type, (GDExtensionConstStringNamePtr)&p_key_class_name, (GDExtensionConstVariantPtr)&p_key_script,
(GDExtensionVariantType)p_value_type, (GDExtensionConstStringNamePtr)&p_value_class_name, (GDExtensionConstVariantPtr)&p_value_script);
}
} // namespace godot

View File

@ -59,31 +59,9 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
else()
#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
# using Clang
#elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# using GCC and maybe MinGW?
set(GODOT_LINKER_FLAGS "-static-libgcc -static-libstdc++ -Wl,-R,'$$ORIGIN'")
# Hmm.. maybe to strikt?
set(GODOT_COMPILE_FLAGS "-fPIC -g -Wwrite-strings")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wchar-subscripts -Wcomment -Wdisabled-optimization")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wformat -Wformat=2 -Wformat-security -Wformat-y2k")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wimport -Winit-self -Winline -Winvalid-pch -Werror")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-braces -Wmissing-format-attribute")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wmissing-include-dirs -Wmissing-noreturn -Wpacked -Wpointer-arith")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wredundant-decls -Wreturn-type -Wsequence-point")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wswitch -Wswitch-enum -Wtrigraphs")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wuninitialized -Wunknown-pragmas -Wunreachable-code -Wunused-label")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wunused-value -Wvariadic-macros -Wvolatile-register-var -Wno-error=attributes")
# -Wshadow -Wextra -Wall -Weffc++ -Wfloat-equal -Wstack-protector -Wunused-parameter -Wsign-compare -Wunused-variable -Wcast-align
# -Wunused-function -Wstrict-aliasing -Wstrict-aliasing=2 -Wmissing-field-initializers
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -Wno-ignored-attributes")
endif()
if(CMAKE_BUILD_TYPE MATCHES Debug)
set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} -fno-omit-frame-pointer -O0")

View File

@ -78,10 +78,13 @@ func _ready():
# Array and Dictionary
assert_equal(example.test_array(), [1, 2])
assert_equal(example.test_tarray(), [ Vector2(1, 2), Vector2(2, 3) ])
assert_equal(example.test_dictionary(), {"hello": "world", "foo": "bar"})
assert_equal(example.test_tarray(), [Vector2(1, 2), Vector2(2, 3)])
var array: Array[int] = [1, 2, 3]
assert_equal(example.test_tarray_arg(array), 6)
assert_equal(example.test_dictionary(), { "hello": "world", "foo": "bar" })
assert_equal(example.test_tdictionary(), { Vector2(1, 2): Vector2i(2, 3) })
var dictionary: Dictionary[String, int] = { "1": 1, "2": 2, "3": 3 }
assert_equal(example.test_tdictionary_arg(dictionary), 6)
example.callable_bind()
assert_equal(custom_signal_emitted, ["bound", 11])
@ -236,6 +239,11 @@ func _ready():
get_viewport().push_input(event)
assert_equal(custom_signal_emitted, ["_input: H", 72])
# Check NOTIFICATION_POST_INITIALIZED, both when created from GDScript and godot-cpp.
var new_example_ref = ExampleRef.new()
assert_equal(new_example_ref.was_post_initialized(), true)
assert_equal(example.test_post_initialize(), true)
exit_with_status()
func _on_Example_custom_signal(signal_name, value):

View File

@ -63,10 +63,18 @@ int ExampleRef::get_id() const {
return id;
}
void ExampleRef::_notification(int p_what) {
if (p_what == NOTIFICATION_POSTINITIALIZE) {
post_initialized = true;
}
}
void ExampleRef::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_id", "id"), &ExampleRef::set_id);
ClassDB::bind_method(D_METHOD("get_id"), &ExampleRef::get_id);
ClassDB::bind_method(D_METHOD("was_post_initialized"), &ExampleRef::was_post_initialized);
ADD_PROPERTY(PropertyInfo(Variant::INT, "id"), "set_id", "get_id");
}
@ -183,6 +191,8 @@ void Example::_bind_methods() {
ClassDB::bind_method(D_METHOD("test_tarray_arg", "array"), &Example::test_tarray_arg);
ClassDB::bind_method(D_METHOD("test_tarray"), &Example::test_tarray);
ClassDB::bind_method(D_METHOD("test_dictionary"), &Example::test_dictionary);
ClassDB::bind_method(D_METHOD("test_tdictionary_arg", "dictionary"), &Example::test_tdictionary_arg);
ClassDB::bind_method(D_METHOD("test_tdictionary"), &Example::test_tdictionary);
ClassDB::bind_method(D_METHOD("test_node_argument"), &Example::test_node_argument);
ClassDB::bind_method(D_METHOD("test_string_ops"), &Example::test_string_ops);
ClassDB::bind_method(D_METHOD("test_str_utility"), &Example::test_str_utility);
@ -220,6 +230,7 @@ void Example::_bind_methods() {
ClassDB::bind_method(D_METHOD("def_args", "a", "b"), &Example::def_args, DEFVAL(100), DEFVAL(200));
ClassDB::bind_method(D_METHOD("callable_bind"), &Example::callable_bind);
ClassDB::bind_method(D_METHOD("test_post_initialize"), &Example::test_post_initialize);
ClassDB::bind_static_method("Example", D_METHOD("test_static", "a", "b"), &Example::test_static);
ClassDB::bind_static_method("Example", D_METHOD("test_static2"), &Example::test_static2);
@ -488,6 +499,23 @@ Dictionary Example::test_dictionary() const {
return dict;
}
int Example::test_tdictionary_arg(const TypedDictionary<String, int64_t> &p_dictionary) {
int sum = 0;
TypedArray<int64_t> values = p_dictionary.values();
for (int i = 0; i < p_dictionary.size(); i++) {
sum += (int)values[i];
}
return sum;
}
TypedDictionary<Vector2, Vector2i> Example::test_tdictionary() const {
TypedDictionary<Vector2, Vector2i> dict;
dict[Vector2(1, 2)] = Vector2i(2, 3);
return dict;
}
Example *Example::test_node_argument(Example *p_node) const {
return p_node;
}
@ -597,6 +625,12 @@ Vector4 Example::get_v4() const {
return Vector4(1.2, 3.4, 5.6, 7.8);
}
bool Example::test_post_initialize() const {
Ref<ExampleRef> new_example_ref;
new_example_ref.instantiate();
return new_example_ref->was_post_initialized();
}
// Virtual function override.
bool Example::_has_point(const Vector2 &point) const {
Label *label = get_node<Label>("Label");

View File

@ -35,16 +35,21 @@ private:
static int last_id;
int id;
bool post_initialized = false;
protected:
static void _bind_methods();
void _notification(int p_what);
public:
ExampleRef();
~ExampleRef();
void set_id(int p_id);
int get_id() const;
bool was_post_initialized() const { return post_initialized; }
};
class ExampleMin : public Control {
@ -118,6 +123,8 @@ public:
int test_tarray_arg(const TypedArray<int64_t> &p_array);
TypedArray<Vector2> test_tarray() const;
Dictionary test_dictionary() const;
int test_tdictionary_arg(const TypedDictionary<String, int64_t> &p_dictionary);
TypedDictionary<Vector2, Vector2i> test_tdictionary() const;
Example *test_node_argument(Example *p_node) const;
String test_string_ops() const;
String test_str_utility() const;
@ -167,6 +174,8 @@ public:
Vector2 get_custom_position() const;
Vector4 get_v4() const;
bool test_post_initialize() const;
// Static method.
static int test_static(int p_a, int p_b);
static void test_static2();