From cacced7e507f7603bacc03ae2616e58f0ede122a Mon Sep 17 00:00:00 2001 From: Hein-Pieter van Braam Date: Thu, 24 Aug 2017 22:58:51 +0200 Subject: Convert Object::cast_to() to the static version Currently we rely on some undefined behavior when Object->cast_to() gets called with a Null pointer. This used to work fine with GCC < 6 but newer versions of GCC remove all codepaths in which the this pointer is Null. However, the non-static cast_to() was supposed to be null safe. This patch makes cast_to() Null safe and removes the now redundant Null checks where they existed. It is explained in this article: https://www.viva64.com/en/b/0226/ --- modules/gridmap/grid_map.cpp | 4 ++-- modules/gridmap/grid_map_editor_plugin.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'modules/gridmap') diff --git a/modules/gridmap/grid_map.cpp b/modules/gridmap/grid_map.cpp index 120577688..fe5936b71 100644 --- a/modules/gridmap/grid_map.cpp +++ b/modules/gridmap/grid_map.cpp @@ -715,12 +715,12 @@ void GridMap::_notification(int p_what) { Spatial *c = this; while (c) { - navigation = c->cast_to(); + navigation = Object::cast_to(c); if (navigation) { break; } - c = c->get_parent()->cast_to(); + c = Object::cast_to(c->get_parent()); } if (navigation) { diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp index 7bb80c251..8c56da449 100644 --- a/modules/gridmap/grid_map_editor_plugin.cpp +++ b/modules/gridmap/grid_map_editor_plugin.cpp @@ -806,7 +806,7 @@ void GridMapEditor::edit(GridMap *p_gridmap) { _update_selection_transform(); _update_duplicate_indicator(); - spatial_editor = editor->get_editor_plugin_screen()->cast_to(); + spatial_editor = Object::cast_to(editor->get_editor_plugin_screen()); if (!node) { set_process(false); @@ -978,14 +978,14 @@ void GridMapEditor::_notification(int p_what) { if (lock_view) { - EditorNode *editor = get_tree()->get_root()->get_child(0)->cast_to(); + EditorNode *editor = Object::cast_to(get_tree()->get_root()->get_child(0)); Plane p; p.normal[edit_axis] = 1.0; p.d = edit_floor[edit_axis] * node->get_cell_size(); p = node->get_transform().xform(p); // plane to snap - SpatialEditorPlugin *sep = editor->get_editor_plugin_screen()->cast_to(); + SpatialEditorPlugin *sep = Object::cast_to(editor->get_editor_plugin_screen()); if (sep) sep->snap_cursor_to_plane(p); //editor->get_editor_plugin_screen()->call("snap_cursor_to_plane",p); @@ -1371,7 +1371,7 @@ GridMapEditor::~GridMapEditor() { void GridMapEditorPlugin::edit(Object *p_object) { - gridmap_editor->edit(p_object ? p_object->cast_to() : NULL); + gridmap_editor->edit(Object::cast_to(p_object)); } bool GridMapEditorPlugin::handles(Object *p_object) const { -- cgit v1.2.3-70-g09d2