Zero initialize all pointer class and struct members

This prevents the pitfall of UB when checking if they have been
assigned something valid by comparing to nullptr.
This commit is contained in:
Rémi Verschelde 2022-04-04 15:06:57 +02:00
parent 53317bbe14
commit f8ab79e68a
258 changed files with 2398 additions and 2421 deletions

View file

@ -94,16 +94,16 @@ private:
UnhandledExceptionPolicy unhandled_exception_policy;
MonoDomain *root_domain;
MonoDomain *scripts_domain;
MonoDomain *root_domain = nullptr;
MonoDomain *scripts_domain = nullptr;
HashMap<int32_t, HashMap<String, GDMonoAssembly *>> assemblies;
GDMonoAssembly *corlib_assembly;
GDMonoAssembly *project_assembly;
GDMonoAssembly *corlib_assembly = nullptr;
GDMonoAssembly *project_assembly = nullptr;
#ifdef TOOLS_ENABLED
GDMonoAssembly *tools_assembly;
GDMonoAssembly *tools_project_editor_assembly;
GDMonoAssembly *tools_assembly = nullptr;
GDMonoAssembly *tools_project_editor_assembly = nullptr;
#endif
LoadedApiAssembly core_api_assembly;
@ -150,7 +150,7 @@ private:
void _init_godot_api_hashes();
void _init_exception_policy();
GDMonoLog *gdmono_log;
GDMonoLog *gdmono_log = nullptr;
#if defined(WINDOWS_ENABLED) && defined(TOOLS_ENABLED)
MonoRegInfo mono_reg_info;
@ -250,7 +250,7 @@ public:
namespace gdmono {
class ScopeDomain {
MonoDomain *prev_domain;
MonoDomain *prev_domain = nullptr;
public:
ScopeDomain(MonoDomain *p_domain) {
@ -270,7 +270,7 @@ public:
};
class ScopeExitDomainUnload {
MonoDomain *domain;
MonoDomain *domain = nullptr;
public:
ScopeExitDomainUnload(MonoDomain *p_domain) :

View file

@ -68,8 +68,8 @@ class GDMonoAssembly {
};
String name;
MonoImage *image;
MonoAssembly *assembly;
MonoImage *image = nullptr;
MonoAssembly *assembly = nullptr;
bool attrs_fetched = false;
MonoCustomAttrInfo *attributes = nullptr;

View file

@ -41,91 +41,91 @@ struct CachedData {
// corlib classes
// Let's use the no-namespace format for these too
GDMonoClass *class_MonoObject; // object
GDMonoClass *class_bool; // bool
GDMonoClass *class_int8_t; // sbyte
GDMonoClass *class_int16_t; // short
GDMonoClass *class_int32_t; // int
GDMonoClass *class_int64_t; // long
GDMonoClass *class_uint8_t; // byte
GDMonoClass *class_uint16_t; // ushort
GDMonoClass *class_uint32_t; // uint
GDMonoClass *class_uint64_t; // ulong
GDMonoClass *class_float; // float
GDMonoClass *class_double; // double
GDMonoClass *class_String; // string
GDMonoClass *class_IntPtr; // System.IntPtr
GDMonoClass *class_MonoObject = nullptr; // object
GDMonoClass *class_bool = nullptr; // bool
GDMonoClass *class_int8_t = nullptr; // sbyte
GDMonoClass *class_int16_t = nullptr; // short
GDMonoClass *class_int32_t = nullptr; // int
GDMonoClass *class_int64_t = nullptr; // long
GDMonoClass *class_uint8_t = nullptr; // byte
GDMonoClass *class_uint16_t = nullptr; // ushort
GDMonoClass *class_uint32_t = nullptr; // uint
GDMonoClass *class_uint64_t = nullptr; // ulong
GDMonoClass *class_float = nullptr; // float
GDMonoClass *class_double = nullptr; // double
GDMonoClass *class_String = nullptr; // string
GDMonoClass *class_IntPtr = nullptr; // System.IntPtr
GDMonoClass *class_System_Collections_IEnumerable;
GDMonoClass *class_System_Collections_ICollection;
GDMonoClass *class_System_Collections_IDictionary;
GDMonoClass *class_System_Collections_IEnumerable = nullptr;
GDMonoClass *class_System_Collections_ICollection = nullptr;
GDMonoClass *class_System_Collections_IDictionary = nullptr;
#ifdef DEBUG_ENABLED
GDMonoClass *class_System_Diagnostics_StackTrace;
GDMonoClass *class_System_Diagnostics_StackTrace = nullptr;
GDMonoMethodThunkR<MonoArray *, MonoObject *> methodthunk_System_Diagnostics_StackTrace_GetFrames;
GDMonoMethod *method_System_Diagnostics_StackTrace_ctor_bool;
GDMonoMethod *method_System_Diagnostics_StackTrace_ctor_Exception_bool;
GDMonoMethod *method_System_Diagnostics_StackTrace_ctor_bool = nullptr;
GDMonoMethod *method_System_Diagnostics_StackTrace_ctor_Exception_bool = nullptr;
#endif
GDMonoClass *class_KeyNotFoundException;
GDMonoClass *class_KeyNotFoundException = nullptr;
MonoClass *rawclass_Dictionary;
MonoClass *rawclass_Dictionary = nullptr;
// -----------------------------------------------
GDMonoClass *class_Vector2;
GDMonoClass *class_Vector2i;
GDMonoClass *class_Rect2;
GDMonoClass *class_Rect2i;
GDMonoClass *class_Transform2D;
GDMonoClass *class_Vector3;
GDMonoClass *class_Vector3i;
GDMonoClass *class_Basis;
GDMonoClass *class_Quaternion;
GDMonoClass *class_Transform3D;
GDMonoClass *class_AABB;
GDMonoClass *class_Color;
GDMonoClass *class_Plane;
GDMonoClass *class_StringName;
GDMonoClass *class_NodePath;
GDMonoClass *class_RID;
GDMonoClass *class_GodotObject;
GDMonoClass *class_GodotResource;
GDMonoClass *class_Node;
GDMonoClass *class_Control;
GDMonoClass *class_Node3D;
GDMonoClass *class_WeakRef;
GDMonoClass *class_Callable;
GDMonoClass *class_SignalInfo;
GDMonoClass *class_Array;
GDMonoClass *class_Dictionary;
GDMonoClass *class_MarshalUtils;
GDMonoClass *class_ISerializationListener;
GDMonoClass *class_Vector2 = nullptr;
GDMonoClass *class_Vector2i = nullptr;
GDMonoClass *class_Rect2 = nullptr;
GDMonoClass *class_Rect2i = nullptr;
GDMonoClass *class_Transform2D = nullptr;
GDMonoClass *class_Vector3 = nullptr;
GDMonoClass *class_Vector3i = nullptr;
GDMonoClass *class_Basis = nullptr;
GDMonoClass *class_Quaternion = nullptr;
GDMonoClass *class_Transform3D = nullptr;
GDMonoClass *class_AABB = nullptr;
GDMonoClass *class_Color = nullptr;
GDMonoClass *class_Plane = nullptr;
GDMonoClass *class_StringName = nullptr;
GDMonoClass *class_NodePath = nullptr;
GDMonoClass *class_RID = nullptr;
GDMonoClass *class_GodotObject = nullptr;
GDMonoClass *class_GodotResource = nullptr;
GDMonoClass *class_Node = nullptr;
GDMonoClass *class_Control = nullptr;
GDMonoClass *class_Node3D = nullptr;
GDMonoClass *class_WeakRef = nullptr;
GDMonoClass *class_Callable = nullptr;
GDMonoClass *class_SignalInfo = nullptr;
GDMonoClass *class_Array = nullptr;
GDMonoClass *class_Dictionary = nullptr;
GDMonoClass *class_MarshalUtils = nullptr;
GDMonoClass *class_ISerializationListener = nullptr;
#ifdef DEBUG_ENABLED
GDMonoClass *class_DebuggingUtils;
GDMonoClass *class_DebuggingUtils = nullptr;
GDMonoMethodThunk<MonoObject *, MonoString **, int *, MonoString **> methodthunk_DebuggingUtils_GetStackFrameInfo;
#endif
GDMonoClass *class_ExportAttribute;
GDMonoField *field_ExportAttribute_hint;
GDMonoField *field_ExportAttribute_hintString;
GDMonoClass *class_SignalAttribute;
GDMonoClass *class_ToolAttribute;
GDMonoClass *class_AnyPeerAttribute;
GDMonoClass *class_AuthorityAttribute;
GDMonoClass *class_GodotMethodAttribute;
GDMonoField *field_GodotMethodAttribute_methodName;
GDMonoClass *class_ScriptPathAttribute;
GDMonoField *field_ScriptPathAttribute_path;
GDMonoClass *class_AssemblyHasScriptsAttribute;
GDMonoField *field_AssemblyHasScriptsAttribute_requiresLookup;
GDMonoField *field_AssemblyHasScriptsAttribute_scriptTypes;
GDMonoClass *class_ExportAttribute = nullptr;
GDMonoField *field_ExportAttribute_hint = nullptr;
GDMonoField *field_ExportAttribute_hintString = nullptr;
GDMonoClass *class_SignalAttribute = nullptr;
GDMonoClass *class_ToolAttribute = nullptr;
GDMonoClass *class_AnyPeerAttribute = nullptr;
GDMonoClass *class_AuthorityAttribute = nullptr;
GDMonoClass *class_GodotMethodAttribute = nullptr;
GDMonoField *field_GodotMethodAttribute_methodName = nullptr;
GDMonoClass *class_ScriptPathAttribute = nullptr;
GDMonoField *field_ScriptPathAttribute_path = nullptr;
GDMonoClass *class_AssemblyHasScriptsAttribute = nullptr;
GDMonoField *field_AssemblyHasScriptsAttribute_requiresLookup = nullptr;
GDMonoField *field_AssemblyHasScriptsAttribute_scriptTypes = nullptr;
GDMonoField *field_GodotObject_ptr;
GDMonoField *field_StringName_ptr;
GDMonoField *field_NodePath_ptr;
GDMonoField *field_Image_ptr;
GDMonoField *field_RID_ptr;
GDMonoField *field_GodotObject_ptr = nullptr;
GDMonoField *field_StringName_ptr = nullptr;
GDMonoField *field_NodePath_ptr = nullptr;
GDMonoField *field_Image_ptr = nullptr;
GDMonoField *field_RID_ptr = nullptr;
GDMonoMethodThunk<MonoObject *> methodthunk_GodotObject_Dispose;
GDMonoMethodThunkR<Array *, MonoObject *> methodthunk_Array_GetPtr;

View file

@ -70,11 +70,11 @@ class GDMonoClass {
StringName namespace_name;
StringName class_name;
MonoClass *mono_class;
GDMonoAssembly *assembly;
MonoClass *mono_class = nullptr;
GDMonoAssembly *assembly = nullptr;
bool attrs_fetched;
MonoCustomAttrInfo *attributes;
MonoCustomAttrInfo *attributes = nullptr;
// This contains both the original method names and remapped method names from the native Godot identifiers to the C# functions.
// Most method-related functions refer to this and it's possible this is unintuitive for outside users; this may be a prime location for refactoring or renaming.

View file

@ -36,14 +36,14 @@
#include "i_mono_class_member.h"
class GDMonoField : public IMonoClassMember {
GDMonoClass *owner;
MonoClassField *mono_field;
GDMonoClass *owner = nullptr;
MonoClassField *mono_field = nullptr;
StringName name;
ManagedType type;
bool attrs_fetched;
MonoCustomAttrInfo *attributes;
MonoCustomAttrInfo *attributes = nullptr;
public:
virtual GDMonoClass *get_enclosing_class() const final { return owner; }

View file

@ -196,14 +196,14 @@ PackedVector3Array mono_array_to_PackedVector3Array(MonoArray *p_array);
#pragma pack(push, 1)
struct M_Callable {
MonoObject *target;
MonoObject *method_string_name;
MonoDelegate *delegate;
MonoObject *target = nullptr;
MonoObject *method_string_name = nullptr;
MonoDelegate *delegate = nullptr;
};
struct M_SignalInfo {
MonoObject *owner;
MonoObject *name_string_name;
MonoObject *owner = nullptr;
MonoObject *name_string_name = nullptr;
};
#pragma pack(pop)

View file

@ -54,7 +54,7 @@ class GDMonoMethod : public IMonoClassMember {
friend class GDMonoClass;
MonoMethod *mono_method;
MonoMethod *mono_method = nullptr;
public:
virtual GDMonoClass *get_enclosing_class() const final;

View file

@ -36,14 +36,14 @@
#include "i_mono_class_member.h"
class GDMonoProperty : public IMonoClassMember {
GDMonoClass *owner;
MonoProperty *mono_property;
GDMonoClass *owner = nullptr;
MonoProperty *mono_property = nullptr;
StringName name;
ManagedType type;
bool attrs_fetched;
MonoCustomAttrInfo *attributes;
MonoCustomAttrInfo *attributes = nullptr;
unsigned int param_buffer_size;

View file

@ -47,11 +47,11 @@ struct Mono_InterpMethodArguments {
size_t ilen;
void **iargs;
size_t flen;
double *fargs;
double *fargs = nullptr;
void **retval;
size_t is_float_ret;
//#ifdef TARGET_WASM
void *sig;
void *sig = nullptr;
//#endif
};
} // extern "C"