Merge pull request #8516 from karroffel/gdscript-save-fix

fixed a bug where saving a GDScript file crashed the editor
This commit is contained in:
Rémi Verschelde 2017-04-24 22:36:51 +02:00 committed by GitHub
commit 214222d37d
1 changed files with 5 additions and 2 deletions

View File

@ -1696,9 +1696,9 @@ void GDScriptLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_so
//same thing for placeholders //same thing for placeholders
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
for (Set<PlaceHolderScriptInstance *>::Element *P = E->get()->placeholders.front(); P; P = P->next()) { while (E->get()->placeholders.size()) {
Object *obj = E->get()->placeholders.front()->get()->get_owner();
Object *obj = P->get()->get_owner();
//save instance info //save instance info
List<Pair<StringName, Variant> > state; List<Pair<StringName, Variant> > state;
if (obj->get_script_instance()) { if (obj->get_script_instance()) {
@ -1706,6 +1706,9 @@ void GDScriptLanguage::reload_tool_script(const Ref<Script> &p_script, bool p_so
obj->get_script_instance()->get_property_state(state); obj->get_script_instance()->get_property_state(state);
map[obj->get_instance_ID()] = state; map[obj->get_instance_ID()] = state;
obj->set_script(RefPtr()); obj->set_script(RefPtr());
} else {
// no instance found. Let's remove it so we don't loop forever
E->get()->placeholders.erase(E->get()->placeholders.front()->get());
} }
} }
#endif #endif