Merge pull request #34464 from neikeq/null-is-null-not-Null-👍

Mono/C#: Fix Variant -> MonoString* when type is Variant:NIL
This commit is contained in:
Rémi Verschelde 2019-12-19 19:52:10 +01:00 committed by GitHub
commit 30ffd273a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 5 deletions

View file

@ -78,7 +78,13 @@ namespace GodotTools.Export
catch (Exception e)
{
maybeLastExportError = e.Message;
GD.PushError($"Failed to export project: {e.Message}");
// 'maybeLastExportError' cannot be null or empty if there was an error, so we
// must consider the possibility of exceptions being thrown without a message.
if (string.IsNullOrEmpty(maybeLastExportError))
maybeLastExportError = $"Exception thrown: {e.GetType().Name}";
GD.PushError($"Failed to export project: {maybeLastExportError}");
Console.Error.WriteLine(e);
// TODO: Do something on error once _ExportBegin supports failing.
}
@ -513,7 +519,7 @@ namespace GodotTools.Export
case OS.Platforms.HTML5:
return "wasm-wasm32";
default:
throw new NotSupportedException();
throw new NotSupportedException($"Platform not supported: {platform}");
}
}
@ -655,7 +661,7 @@ namespace GodotTools.Export
case OS.Platforms.HTML5:
return "wasm";
default:
throw new NotSupportedException();
throw new NotSupportedException($"Platform not supported: {platform}");
}
}

View file

@ -110,8 +110,14 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_
} break;
case MONO_TYPE_STRING: {
MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value);
mono_field_set_value(p_object, mono_field, mono_string);
if (p_value.get_type() == Variant::NIL) {
// Otherwise, Variant -> String would return the string "Null"
MonoString *mono_string = NULL;
mono_field_set_value(p_object, mono_field, mono_string);
} else {
MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value);
mono_field_set_value(p_object, mono_field, mono_string);
}
} break;
case MONO_TYPE_VALUETYPE: {

View file

@ -374,6 +374,8 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty
}
case MONO_TYPE_STRING: {
if (p_var->get_type() == Variant::NIL)
return NULL; // Otherwise, Variant -> String would return the string "Null"
return (MonoObject *)mono_string_from_godot(p_var->operator String());
} break;