You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Improve GDScript error for method call on null/previously freed instance
Fixes #53878.
This commit is contained in:
@@ -447,6 +447,9 @@ void (*type_init_function_table[])(Variant *) = {
|
||||
#define OP_GET_BASIS get_basis
|
||||
#define OP_GET_RID get_rid
|
||||
|
||||
#define METHOD_CALL_ON_NULL_VALUE_ERROR(method_pointer) "Cannot call method '" + (method_pointer)->get_name() + "' on a null value."
|
||||
#define METHOD_CALL_ON_FREED_INSTANCE_ERROR(method_pointer) "Cannot call method '" + (method_pointer)->get_name() + "' on a previously freed instance."
|
||||
|
||||
Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_args, int p_argcount, Callable::CallError &r_err, CallState *p_state) {
|
||||
OPCODES_TABLE;
|
||||
|
||||
@@ -1675,10 +1678,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
||||
bool freed = false;
|
||||
Object *base_obj = base->get_validated_object_with_check(freed);
|
||||
if (freed) {
|
||||
err_text = "Trying to call a function on a previously freed instance.";
|
||||
err_text = METHOD_CALL_ON_FREED_INSTANCE_ERROR(method);
|
||||
OPCODE_BREAK;
|
||||
} else if (!base_obj) {
|
||||
err_text = "Trying to call a function on a null value.";
|
||||
err_text = METHOD_CALL_ON_NULL_VALUE_ERROR(method);
|
||||
OPCODE_BREAK;
|
||||
}
|
||||
#else
|
||||
@@ -1839,10 +1842,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
||||
bool freed = false; \
|
||||
Object *base_obj = base->get_validated_object_with_check(freed); \
|
||||
if (freed) { \
|
||||
err_text = "Trying to call a function on a previously freed instance."; \
|
||||
err_text = METHOD_CALL_ON_FREED_INSTANCE_ERROR(method); \
|
||||
OPCODE_BREAK; \
|
||||
} else if (!base_obj) { \
|
||||
err_text = "Trying to call a function on a null value."; \
|
||||
err_text = METHOD_CALL_ON_NULL_VALUE_ERROR(method); \
|
||||
OPCODE_BREAK; \
|
||||
} \
|
||||
const void **argptrs = call_args_ptr; \
|
||||
@@ -1941,10 +1944,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
||||
bool freed = false;
|
||||
Object *base_obj = base->get_validated_object_with_check(freed);
|
||||
if (freed) {
|
||||
err_text = "Trying to call a function on a previously freed instance.";
|
||||
err_text = METHOD_CALL_ON_FREED_INSTANCE_ERROR(method);
|
||||
OPCODE_BREAK;
|
||||
} else if (!base_obj) {
|
||||
err_text = "Trying to call a function on a null value.";
|
||||
err_text = METHOD_CALL_ON_NULL_VALUE_ERROR(method);
|
||||
OPCODE_BREAK;
|
||||
}
|
||||
#else
|
||||
@@ -2002,10 +2005,10 @@ Variant GDScriptFunction::call(GDScriptInstance *p_instance, const Variant **p_a
|
||||
bool freed = false;
|
||||
Object *base_obj = base->get_validated_object_with_check(freed);
|
||||
if (freed) {
|
||||
err_text = "Trying to call a function on a previously freed instance.";
|
||||
err_text = METHOD_CALL_ON_FREED_INSTANCE_ERROR(method);
|
||||
OPCODE_BREAK;
|
||||
} else if (!base_obj) {
|
||||
err_text = "Trying to call a function on a null value.";
|
||||
err_text = METHOD_CALL_ON_NULL_VALUE_ERROR(method);
|
||||
OPCODE_BREAK;
|
||||
}
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user