| 
									
										
										
										
											2019-11-22 08:37:09 +01:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*  gd_mono_cache.h                                                      */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							|  |  |  | /*                      https://godotengine.org                          */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2021-01-01 20:13:46 +01:00
										 |  |  | /* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2019-11-22 08:37:09 +01:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | #ifndef GD_MONO_CACHE_H
 | 
					
						
							|  |  |  | #define GD_MONO_CACHE_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "gd_mono_header.h"
 | 
					
						
							|  |  |  | #include "gd_mono_method_thunk.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace GDMonoCache { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct CachedData { | 
					
						
							|  |  |  | 	// -----------------------------------------------
 | 
					
						
							|  |  |  | 	// corlib classes
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Let's use the no-namespace format for these too
 | 
					
						
							| 
									
										
										
										
											2019-12-04 15:07:00 +01:00
										 |  |  | 	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
 | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoClass *class_System_Collections_IEnumerable; | 
					
						
							| 
									
										
										
										
											2020-04-23 02:19:32 +02:00
										 |  |  | 	GDMonoClass *class_System_Collections_ICollection; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_System_Collections_IDictionary; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef DEBUG_ENABLED
 | 
					
						
							|  |  |  | 	GDMonoClass *class_System_Diagnostics_StackTrace; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoArray *, MonoObject *> methodthunk_System_Diagnostics_StackTrace_GetFrames; | 
					
						
							|  |  |  | 	GDMonoMethod *method_System_Diagnostics_StackTrace_ctor_bool; | 
					
						
							|  |  |  | 	GDMonoMethod *method_System_Diagnostics_StackTrace_ctor_Exception_bool; | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoClass *class_KeyNotFoundException; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	MonoClass *rawclass_Dictionary; | 
					
						
							|  |  |  | 	// -----------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoClass *class_Vector2; | 
					
						
							| 
									
										
										
										
											2020-03-03 04:42:20 -05:00
										 |  |  | 	GDMonoClass *class_Vector2i; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_Rect2; | 
					
						
							| 
									
										
										
										
											2020-03-03 04:42:20 -05:00
										 |  |  | 	GDMonoClass *class_Rect2i; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_Transform2D; | 
					
						
							|  |  |  | 	GDMonoClass *class_Vector3; | 
					
						
							| 
									
										
										
										
											2020-03-03 04:42:20 -05:00
										 |  |  | 	GDMonoClass *class_Vector3i; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_Basis; | 
					
						
							| 
									
										
										
										
											2021-01-20 07:02:02 +00:00
										 |  |  | 	GDMonoClass *class_Quaternion; | 
					
						
							| 
									
										
										
										
											2021-04-28 03:36:08 -04:00
										 |  |  | 	GDMonoClass *class_Transform3D; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_AABB; | 
					
						
							|  |  |  | 	GDMonoClass *class_Color; | 
					
						
							|  |  |  | 	GDMonoClass *class_Plane; | 
					
						
							| 
									
										
										
										
											2020-03-14 19:20:17 +01:00
										 |  |  | 	GDMonoClass *class_StringName; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_NodePath; | 
					
						
							|  |  |  | 	GDMonoClass *class_RID; | 
					
						
							|  |  |  | 	GDMonoClass *class_GodotObject; | 
					
						
							|  |  |  | 	GDMonoClass *class_GodotResource; | 
					
						
							|  |  |  | 	GDMonoClass *class_Node; | 
					
						
							|  |  |  | 	GDMonoClass *class_Control; | 
					
						
							| 
									
										
										
										
											2020-03-26 18:49:16 -03:00
										 |  |  | 	GDMonoClass *class_Node3D; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_WeakRef; | 
					
						
							| 
									
										
										
										
											2020-03-14 19:20:17 +01:00
										 |  |  | 	GDMonoClass *class_Callable; | 
					
						
							|  |  |  | 	GDMonoClass *class_SignalInfo; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_Array; | 
					
						
							|  |  |  | 	GDMonoClass *class_Dictionary; | 
					
						
							|  |  |  | 	GDMonoClass *class_MarshalUtils; | 
					
						
							|  |  |  | 	GDMonoClass *class_ISerializationListener; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef DEBUG_ENABLED
 | 
					
						
							|  |  |  | 	GDMonoClass *class_DebuggingUtils; | 
					
						
							|  |  |  | 	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; | 
					
						
							| 
									
										
										
										
											2021-09-26 18:49:00 -04:00
										 |  |  | 	GDMonoClass *class_AnyAttribute; | 
					
						
							|  |  |  | 	GDMonoClass *class_AuthorityAttribute; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoClass *class_GodotMethodAttribute; | 
					
						
							|  |  |  | 	GDMonoField *field_GodotMethodAttribute_methodName; | 
					
						
							| 
									
										
										
										
											2021-03-06 00:12:42 +01:00
										 |  |  | 	GDMonoClass *class_ScriptPathAttribute; | 
					
						
							|  |  |  | 	GDMonoField *field_ScriptPathAttribute_path; | 
					
						
							|  |  |  | 	GDMonoClass *class_AssemblyHasScriptsAttribute; | 
					
						
							|  |  |  | 	GDMonoField *field_AssemblyHasScriptsAttribute_requiresLookup; | 
					
						
							|  |  |  | 	GDMonoField *field_AssemblyHasScriptsAttribute_scriptTypes; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoField *field_GodotObject_ptr; | 
					
						
							| 
									
										
										
										
											2020-03-14 19:20:17 +01:00
										 |  |  | 	GDMonoField *field_StringName_ptr; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	GDMonoField *field_NodePath_ptr; | 
					
						
							|  |  |  | 	GDMonoField *field_Image_ptr; | 
					
						
							|  |  |  | 	GDMonoField *field_RID_ptr; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoMethodThunk<MonoObject *> methodthunk_GodotObject_Dispose; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<Array *, MonoObject *> methodthunk_Array_GetPtr; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<Dictionary *, MonoObject *> methodthunk_Dictionary_GetPtr; | 
					
						
							|  |  |  | 	GDMonoMethodThunk<MonoObject *, MonoArray *> methodthunk_SignalAwaiter_SignalCallback; | 
					
						
							|  |  |  | 	GDMonoMethodThunk<MonoObject *> methodthunk_GodotTaskScheduler_Activate; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-14 19:20:17 +01:00
										 |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoObject *, MonoObject *> methodthunk_Delegate_Equals; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoDelegate *, MonoObject *> methodthunk_DelegateUtils_TrySerializeDelegate; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoObject *, MonoDelegate **> methodthunk_DelegateUtils_TryDeserializeDelegate; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 	// Start of MarshalUtils methods
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsGenericArray; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsGenericDictionary; | 
					
						
							| 
									
										
										
										
											2020-04-23 02:19:32 +02:00
										 |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsSystemGenericList; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsSystemGenericDictionary; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsGenericIEnumerable; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsGenericICollection; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoBoolean, MonoReflectionType *> methodthunk_MarshalUtils_TypeIsGenericIDictionary; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoMethodThunk<MonoReflectionType *, MonoReflectionType **> methodthunk_MarshalUtils_ArrayGetElementType; | 
					
						
							|  |  |  | 	GDMonoMethodThunk<MonoReflectionType *, MonoReflectionType **, MonoReflectionType **> methodthunk_MarshalUtils_DictionaryGetKeyValueTypes; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoReflectionType *, MonoReflectionType *> methodthunk_MarshalUtils_MakeGenericArrayType; | 
					
						
							|  |  |  | 	GDMonoMethodThunkR<MonoReflectionType *, MonoReflectionType *, MonoReflectionType *> methodthunk_MarshalUtils_MakeGenericDictionaryType; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// End of MarshalUtils methods
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-11 17:08:40 +01:00
										 |  |  | 	Ref<MonoGCHandleRef> task_scheduler_handle; | 
					
						
							| 
									
										
										
										
											2019-11-10 17:10:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	bool corlib_cache_updated; | 
					
						
							|  |  |  | 	bool godot_api_cache_updated; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void clear_corlib_cache(); | 
					
						
							|  |  |  | 	void clear_godot_api_cache(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	CachedData() { | 
					
						
							|  |  |  | 		clear_corlib_cache(); | 
					
						
							|  |  |  | 		clear_godot_api_cache(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern CachedData cached_data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void update_corlib_cache(); | 
					
						
							|  |  |  | void update_godot_api_cache(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | inline void clear_corlib_cache() { | 
					
						
							|  |  |  | 	cached_data.clear_corlib_cache(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | inline void clear_godot_api_cache() { | 
					
						
							|  |  |  | 	cached_data.clear_godot_api_cache(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | } // namespace GDMonoCache
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define CACHED_CLASS(m_class) (GDMonoCache::cached_data.class_##m_class)
 | 
					
						
							|  |  |  | #define CACHED_CLASS_RAW(m_class) (GDMonoCache::cached_data.class_##m_class->get_mono_ptr())
 | 
					
						
							|  |  |  | #define CACHED_RAW_MONO_CLASS(m_class) (GDMonoCache::cached_data.rawclass_##m_class)
 | 
					
						
							|  |  |  | #define CACHED_FIELD(m_class, m_field) (GDMonoCache::cached_data.field_##m_class##_##m_field)
 | 
					
						
							|  |  |  | #define CACHED_METHOD(m_class, m_method) (GDMonoCache::cached_data.method_##m_class##_##m_method)
 | 
					
						
							|  |  |  | #define CACHED_METHOD_THUNK(m_class, m_method) (GDMonoCache::cached_data.methodthunk_##m_class##_##m_method)
 | 
					
						
							|  |  |  | #define CACHED_PROPERTY(m_class, m_property) (GDMonoCache::cached_data.property_##m_class##_##m_property)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // GD_MONO_CACHE_H
 |