diff options
| author | Ignacio Etcheverry | 2017-10-23 00:35:04 +0200 |
|---|---|---|
| committer | Ignacio Etcheverry | 2017-10-23 00:35:14 +0200 |
| commit | 45e5e23ee83d202461f1753b1d94afc51d3a5aa1 (patch) | |
| tree | 513bd0522d4207236af464919c342fb3aa163c74 /modules/mono/mono_gd/gd_mono_method.cpp | |
| parent | acaaf2e440994bf99b9dcf1ba14ab4a7aa9be854 (diff) | |
| download | godot-45e5e23ee83d202461f1753b1d94afc51d3a5aa1.tar.gz godot-45e5e23ee83d202461f1753b1d94afc51d3a5aa1.tar.zst godot-45e5e23ee83d202461f1753b1d94afc51d3a5aa1.zip | |
Diffstat (limited to 'modules/mono/mono_gd/gd_mono_method.cpp')
| -rw-r--r-- | modules/mono/mono_gd/gd_mono_method.cpp | 41 |
1 files changed, 38 insertions, 3 deletions
diff --git a/modules/mono/mono_gd/gd_mono_method.cpp b/modules/mono/mono_gd/gd_mono_method.cpp index 6468e0d3d..eb97d6290 100644 --- a/modules/mono/mono_gd/gd_mono_method.cpp +++ b/modules/mono/mono_gd/gd_mono_method.cpp @@ -83,9 +83,32 @@ MonoObject *GDMonoMethod::invoke(MonoObject *p_object, const Variant **p_params, mono_array_set(params, MonoObject *, i, boxed_param); } - return mono_runtime_invoke_array(mono_method, p_object, params, r_exc); + MonoObject *exc = NULL; + MonoObject *ret = mono_runtime_invoke_array(mono_method, p_object, params, &exc); + + if (exc) { + if (r_exc) { + *r_exc = exc; + } else { + ERR_PRINT(GDMonoUtils::get_exception_name_and_message(exc).utf8()); + mono_print_unhandled_exception(exc); + } + } + + return ret; } else { - mono_runtime_invoke(mono_method, p_object, NULL, r_exc); + MonoObject *exc = NULL; + mono_runtime_invoke(mono_method, p_object, NULL, &exc); + + if (exc) { + if (r_exc) { + *r_exc = exc; + } else { + ERR_PRINT(GDMonoUtils::get_exception_name_and_message(exc).utf8()); + mono_print_unhandled_exception(exc); + } + } + return NULL; } } @@ -96,7 +119,19 @@ MonoObject *GDMonoMethod::invoke(MonoObject *p_object, MonoObject **r_exc) { } MonoObject *GDMonoMethod::invoke_raw(MonoObject *p_object, void **p_params, MonoObject **r_exc) { - return mono_runtime_invoke(mono_method, p_object, p_params, r_exc); + MonoObject *exc = NULL; + MonoObject *ret = mono_runtime_invoke(mono_method, p_object, p_params, &exc); + + if (exc) { + if (r_exc) { + *r_exc = exc; + } else { + ERR_PRINT(GDMonoUtils::get_exception_name_and_message(exc).utf8()); + mono_print_unhandled_exception(exc); + } + } + + return ret; } bool GDMonoMethod::has_attribute(GDMonoClass *p_attr_class) { |
