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/ --- scene/main/scene_tree.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'scene/main/scene_tree.cpp') diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index 10ab28150..03a604734 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -383,7 +383,7 @@ bool SceneTree::is_input_handled() { void SceneTree::input_event(const Ref &p_event) { - if (Engine::get_singleton()->is_editor_hint() && (p_event->cast_to() || p_event->cast_to())) + if (Engine::get_singleton()->is_editor_hint() && (Object::cast_to(p_event.ptr()) || Object::cast_to(*p_event))) return; //avoid joy input on editor root_lock++; @@ -1400,10 +1400,7 @@ void SceneTree::_live_edit_create_node_func(const NodePath &p_parent, const Stri continue; Node *n2 = n->get_node(p_parent); - Object *o = ClassDB::instance(p_type); - if (!o) - continue; - Node *no = o->cast_to(); + Node *no = Object::cast_to(ClassDB::instance(p_type)); no->set_name(p_name); n2->add_child(no); -- cgit v1.2.3-70-g09d2