summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--modules/gdscript/gdscript.cpp19
-rw-r--r--modules/gdscript/gdscript.h3
2 files changed, 15 insertions, 7 deletions
diff --git a/modules/gdscript/gdscript.cpp b/modules/gdscript/gdscript.cpp
index a0213f05dd..58aa7a08d4 100644
--- a/modules/gdscript/gdscript.cpp
+++ b/modules/gdscript/gdscript.cpp
@@ -278,6 +278,7 @@ struct _GDScriptMemberSort {
void GDScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) {
placeholders.erase(p_placeholder);
}
+
#endif
void GDScript::_get_script_method_list(List<MethodInfo> *r_list, bool p_include_base) const {
@@ -468,7 +469,7 @@ String GDScript::get_class_icon_path() const {
}
#endif
-bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderScriptInstance *p_instance_to_update) {
+bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderScriptInstance *p_instance_to_update, bool p_base_exports_changed) {
#ifdef TOOLS_ENABLED
static Vector<GDScript *> base_caches;
@@ -477,7 +478,7 @@ bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderSc
}
base_caches.append(this);
- bool changed = false;
+ bool changed = p_base_exports_changed;
if (source_changed_cache) {
source_changed_cache = false;
@@ -604,9 +605,15 @@ bool GDScript::_update_exports(bool *r_err, bool p_recursive_call, PlaceHolderSc
void GDScript::update_exports() {
#ifdef TOOLS_ENABLED
+ _update_exports_down(false);
+#endif
+}
+#ifdef TOOLS_ENABLED
+void GDScript::_update_exports_down(bool p_base_exports_changed) {
bool cyclic_error = false;
- _update_exports(&cyclic_error);
+ bool changed = _update_exports(&cyclic_error, false, nullptr, p_base_exports_changed);
+
if (cyclic_error) {
return;
}
@@ -616,14 +623,14 @@ void GDScript::update_exports() {
for (const ObjectID &E : copy) {
Object *id = ObjectDB::get_instance(E);
GDScript *s = Object::cast_to<GDScript>(id);
+
if (!s) {
continue;
}
- s->update_exports();
+ s->_update_exports_down(p_base_exports_changed || changed);
}
-
-#endif
}
+#endif
String GDScript::_get_debug_path() const {
if (is_built_in() && !get_name().is_empty()) {
diff --git a/modules/gdscript/gdscript.h b/modules/gdscript/gdscript.h
index 7cde0fb978..d335ec85ee 100644
--- a/modules/gdscript/gdscript.h
+++ b/modules/gdscript/gdscript.h
@@ -163,13 +163,14 @@ class GDScript : public Script {
HashSet<PlaceHolderScriptInstance *> placeholders;
//void _update_placeholder(PlaceHolderScriptInstance *p_placeholder);
virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder) override;
+ void _update_exports_down(bool p_base_exports_changed);
#endif
#ifdef DEBUG_ENABLED
HashMap<ObjectID, List<Pair<StringName, Variant>>> pending_reload_state;
#endif
- bool _update_exports(bool *r_err = nullptr, bool p_recursive_call = false, PlaceHolderScriptInstance *p_instance_to_update = nullptr);
+ bool _update_exports(bool *r_err = nullptr, bool p_recursive_call = false, PlaceHolderScriptInstance *p_instance_to_update = nullptr, bool p_base_exports_changed = false);
void _save_orphaned_subclasses(GDScript::ClearData *p_clear_data);