diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/core_bind.cpp | 11 | ||||
-rw-r--r-- | core/core_bind.h | 3 | ||||
-rw-r--r-- | core/object/message_queue.cpp | 13 | ||||
-rw-r--r-- | core/os/os.h | 3 |
4 files changed, 23 insertions, 7 deletions
diff --git a/core/core_bind.cpp b/core/core_bind.cpp index ab433bd8f1..96e1da9dde 100644 --- a/core/core_bind.cpp +++ b/core/core_bind.cpp @@ -322,8 +322,12 @@ String OS::get_environment(const String &p_var) const { return ::OS::get_singleton()->get_environment(p_var); } -bool OS::set_environment(const String &p_var, const String &p_value) const { - return ::OS::get_singleton()->set_environment(p_var, p_value); +void OS::set_environment(const String &p_var, const String &p_value) const { + ::OS::get_singleton()->set_environment(p_var, p_value); +} + +void OS::unset_environment(const String &p_var) const { + ::OS::get_singleton()->unset_environment(p_var); } String OS::get_name() const { @@ -548,9 +552,10 @@ void OS::_bind_methods() { ClassDB::bind_method(D_METHOD("is_process_running", "pid"), &OS::is_process_running); ClassDB::bind_method(D_METHOD("get_process_id"), &OS::get_process_id); + ClassDB::bind_method(D_METHOD("has_environment", "variable"), &OS::has_environment); ClassDB::bind_method(D_METHOD("get_environment", "variable"), &OS::get_environment); ClassDB::bind_method(D_METHOD("set_environment", "variable", "value"), &OS::set_environment); - ClassDB::bind_method(D_METHOD("has_environment", "variable"), &OS::has_environment); + ClassDB::bind_method(D_METHOD("unset_environment", "variable"), &OS::unset_environment); ClassDB::bind_method(D_METHOD("get_name"), &OS::get_name); ClassDB::bind_method(D_METHOD("get_distribution_name"), &OS::get_distribution_name); diff --git a/core/core_bind.h b/core/core_bind.h index 7ef346d1c4..c0c87fd009 100644 --- a/core/core_bind.h +++ b/core/core_bind.h @@ -162,7 +162,8 @@ public: bool has_environment(const String &p_var) const; String get_environment(const String &p_var) const; - bool set_environment(const String &p_var, const String &p_value) const; + void set_environment(const String &p_var, const String &p_value) const; + void unset_environment(const String &p_var) const; String get_name() const; String get_distribution_name() const; diff --git a/core/object/message_queue.cpp b/core/object/message_queue.cpp index ebed6c21e9..22ed8b4378 100644 --- a/core/object/message_queue.cpp +++ b/core/object/message_queue.cpp @@ -114,7 +114,11 @@ Error MessageQueue::push_set(Object *p_object, const StringName &p_prop, const V Error MessageQueue::push_callablep(const Callable &p_callable, const Variant **p_args, int p_argcount, bool p_show_error) { _THREAD_SAFE_METHOD_ - int room_needed = sizeof(Message) + sizeof(Variant) * p_argcount; + Vector<Variant> bound_arguments; + int bound_argcount = 0; + p_callable.get_bound_arguments_ref(bound_arguments, bound_argcount); + + int room_needed = sizeof(Message) + sizeof(Variant) * (bound_argcount + p_argcount); if ((buffer_end + room_needed) >= buffer_size) { print_line("Failed method: " + p_callable); @@ -123,7 +127,7 @@ Error MessageQueue::push_callablep(const Callable &p_callable, const Variant **p } Message *msg = memnew_placement(&buffer[buffer_end], Message); - msg->args = p_argcount; + msg->args = bound_argcount + p_argcount; msg->callable = p_callable; msg->type = TYPE_CALL; if (p_show_error) { @@ -132,6 +136,11 @@ Error MessageQueue::push_callablep(const Callable &p_callable, const Variant **p buffer_end += sizeof(Message); + for (int i = 0; i < bound_argcount; i++) { + Variant *v = memnew_placement(&buffer[buffer_end], Variant); + buffer_end += sizeof(Variant); + *v = bound_arguments[i]; + } for (int i = 0; i < p_argcount; i++) { Variant *v = memnew_placement(&buffer[buffer_end], Variant); buffer_end += sizeof(Variant); diff --git a/core/os/os.h b/core/os/os.h index b80efa47b7..4818e9281a 100644 --- a/core/os/os.h +++ b/core/os/os.h @@ -167,7 +167,8 @@ public: virtual bool has_environment(const String &p_var) const = 0; virtual String get_environment(const String &p_var) const = 0; - virtual bool set_environment(const String &p_var, const String &p_value) const = 0; + virtual void set_environment(const String &p_var, const String &p_value) const = 0; + virtual void unset_environment(const String &p_var) const = 0; virtual String get_name() const = 0; virtual String get_distribution_name() const = 0; |