summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/gdscript.h
diff options
context:
space:
mode:
Diffstat (limited to 'modules/gdscript/gdscript.h')
-rw-r--r--modules/gdscript/gdscript.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h
index d335ec85ee..04b0a1d786 100644
--- a/modules/gdscript/gdscript.h
+++ b/modules/gdscript/gdscript.h
@@ -86,6 +86,8 @@ class GDScript : public Script {
friend class GDScriptAnalyzer;
friend class GDScriptCompiler;
friend class GDScriptDocGen;
+ friend class GDScriptLambdaCallable;
+ friend class GDScriptLambdaSelfCallable;
friend class GDScriptLanguage;
friend struct GDScriptUtilityFunctionsDefinitions;
@@ -108,6 +110,30 @@ class GDScript : public Script {
HashMap<StringName, MethodInfo> _signals;
Dictionary rpc_config;
+ struct LambdaInfo {
+ int capture_count;
+ bool use_self;
+ };
+
+ HashMap<GDScriptFunction *, LambdaInfo> lambda_info;
+
+ // List is used here because a ptr to elements are stored, so the memory locations need to be stable
+ struct UpdatableFuncPtr {
+ List<GDScriptFunction **> ptrs;
+ Mutex mutex;
+ bool initialized = false;
+ };
+ struct UpdatableFuncPtrElement {
+ List<GDScriptFunction **>::Element *element = nullptr;
+ Mutex *mutex = nullptr;
+ };
+ static thread_local UpdatableFuncPtr func_ptrs_to_update_thread_local;
+ List<UpdatableFuncPtr *> func_ptrs_to_update;
+ Mutex func_ptrs_to_update_mutex;
+
+ UpdatableFuncPtrElement _add_func_ptr_to_update(GDScriptFunction **p_func_ptr_ptr);
+ static void _remove_func_ptr_to_update(const UpdatableFuncPtrElement p_func_ptr_element);
+
#ifdef TOOLS_ENABLED
// For static data storage during hot-reloading.
HashMap<StringName, MemberInfo> old_static_variables_indices;