mirror of
https://github.com/godotengine/godot.git
synced 2026-01-06 10:11:57 +03:00
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/
This commit is contained in:
@@ -148,7 +148,7 @@ void MeshInstance::_resolve_skeleton_path() {
|
||||
if (skeleton_path.is_empty())
|
||||
return;
|
||||
|
||||
Skeleton *skeleton = get_node(skeleton_path) ? get_node(skeleton_path)->cast_to<Skeleton>() : NULL;
|
||||
Skeleton *skeleton = Object::cast_to<Skeleton>(get_node(skeleton_path));
|
||||
if (skeleton)
|
||||
VisualServer::get_singleton()->instance_attach_skeleton(get_instance(), skeleton->get_skeleton());
|
||||
}
|
||||
@@ -202,13 +202,13 @@ Node *MeshInstance::create_trimesh_collision_node() {
|
||||
|
||||
void MeshInstance::create_trimesh_collision() {
|
||||
|
||||
StaticBody *static_body = create_trimesh_collision_node()->cast_to<StaticBody>();
|
||||
StaticBody *static_body = Object::cast_to<StaticBody>(create_trimesh_collision_node());
|
||||
ERR_FAIL_COND(!static_body);
|
||||
static_body->set_name(String(get_name()) + "_col");
|
||||
|
||||
add_child(static_body);
|
||||
if (get_owner()) {
|
||||
CollisionShape *cshape = static_body->get_child(0)->cast_to<CollisionShape>();
|
||||
CollisionShape *cshape = Object::cast_to<CollisionShape>(static_body->get_child(0));
|
||||
static_body->set_owner(get_owner());
|
||||
cshape->set_owner(get_owner());
|
||||
}
|
||||
@@ -232,13 +232,13 @@ Node *MeshInstance::create_convex_collision_node() {
|
||||
|
||||
void MeshInstance::create_convex_collision() {
|
||||
|
||||
StaticBody *static_body = create_convex_collision_node()->cast_to<StaticBody>();
|
||||
StaticBody *static_body = Object::cast_to<StaticBody>(create_convex_collision_node());
|
||||
ERR_FAIL_COND(!static_body);
|
||||
static_body->set_name(String(get_name()) + "_col");
|
||||
|
||||
add_child(static_body);
|
||||
if (get_owner()) {
|
||||
CollisionShape *cshape = static_body->get_child(0)->cast_to<CollisionShape>();
|
||||
CollisionShape *cshape = Object::cast_to<CollisionShape>(static_body->get_child(0));
|
||||
static_body->set_owner(get_owner());
|
||||
cshape->set_owner(get_owner());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user