You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-15 13:51:40 +00:00
Script API methods must return Ref<T> instead of Reference*
ptrcall assumes methods that return a Reference type do so with Ref<T>. Returning Reference* from a method exposed to the scripting API completely breaks ptrcalls to this method (it can be quite hard to debug!).
This commit is contained in:
@@ -220,7 +220,7 @@ EditorSelection *EditorInterface::get_selection() {
|
|||||||
return EditorNode::get_singleton()->get_editor_selection();
|
return EditorNode::get_singleton()->get_editor_selection();
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorSettings *EditorInterface::get_editor_settings() {
|
Ref<EditorSettings> EditorInterface::get_editor_settings() {
|
||||||
return EditorSettings::get_singleton();
|
return EditorSettings::get_singleton();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public:
|
|||||||
|
|
||||||
EditorSelection *get_selection();
|
EditorSelection *get_selection();
|
||||||
//EditorImportExport *get_import_export();
|
//EditorImportExport *get_import_export();
|
||||||
EditorSettings *get_editor_settings();
|
Ref<EditorSettings> get_editor_settings();
|
||||||
EditorResourcePreview *get_resource_previewer();
|
EditorResourcePreview *get_resource_previewer();
|
||||||
EditorFileSystem *get_resource_file_system();
|
EditorFileSystem *get_resource_file_system();
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public:
|
|||||||
|
|
||||||
void set_spatial_node(Spatial *p_node);
|
void set_spatial_node(Spatial *p_node);
|
||||||
Spatial *get_spatial_node() const { return spatial_node; }
|
Spatial *get_spatial_node() const { return spatial_node; }
|
||||||
EditorSpatialGizmoPlugin *get_plugin() const { return gizmo_plugin; }
|
Ref<EditorSpatialGizmoPlugin> get_plugin() const { return gizmo_plugin; }
|
||||||
Vector3 get_handle_pos(int p_idx) const;
|
Vector3 get_handle_pos(int p_idx) const;
|
||||||
bool intersect_frustum(const Camera *p_camera, const Vector<Plane> &p_frustum);
|
bool intersect_frustum(const Camera *p_camera, const Vector<Plane> &p_frustum);
|
||||||
bool intersect_ray(Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = NULL, bool p_sec_first = false);
|
bool intersect_ray(Camera *p_camera, const Point2 &p_point, Vector3 &r_pos, Vector3 &r_normal, int *r_gizmo_handle = NULL, bool p_sec_first = false);
|
||||||
|
|||||||
@@ -2326,6 +2326,13 @@ void BindingsGenerator::_populate_object_type_interfaces() {
|
|||||||
imethod.return_type.is_enum = true;
|
imethod.return_type.is_enum = true;
|
||||||
} else if (return_info.class_name != StringName()) {
|
} else if (return_info.class_name != StringName()) {
|
||||||
imethod.return_type.cname = return_info.class_name;
|
imethod.return_type.cname = return_info.class_name;
|
||||||
|
if (!imethod.is_virtual && ClassDB::is_parent_class(return_info.class_name, name_cache.type_Reference) && return_info.hint != PROPERTY_HINT_RESOURCE_TYPE) {
|
||||||
|
/* clang-format off */
|
||||||
|
ERR_PRINTS("Return type is reference but hint is not " _STR(PROPERTY_HINT_RESOURCE_TYPE) "."
|
||||||
|
" Are you returning a reference type by pointer? Method: " + itype.name + "." + imethod.name);
|
||||||
|
/* clang-format on */
|
||||||
|
ERR_FAIL();
|
||||||
|
}
|
||||||
} else if (return_info.hint == PROPERTY_HINT_RESOURCE_TYPE) {
|
} else if (return_info.hint == PROPERTY_HINT_RESOURCE_TYPE) {
|
||||||
imethod.return_type.cname = return_info.hint_string;
|
imethod.return_type.cname = return_info.hint_string;
|
||||||
} else if (return_info.type == Variant::NIL && return_info.usage & PROPERTY_USAGE_NIL_IS_VARIANT) {
|
} else if (return_info.type == Variant::NIL && return_info.usage & PROPERTY_USAGE_NIL_IS_VARIANT) {
|
||||||
|
|||||||
Reference in New Issue
Block a user