Speed up GDScriptLanguage::finish
This commit is contained in:
parent
6b5825a0cb
commit
6852f9497c
2 changed files with 17 additions and 4 deletions
|
@ -1537,10 +1537,14 @@ void GDScript::clear(ClearData *p_clear_data) {
|
|||
}
|
||||
}
|
||||
|
||||
RBSet<GDScript *> must_clear_dependencies = get_must_clear_dependencies();
|
||||
for (GDScript *E : must_clear_dependencies) {
|
||||
clear_data->scripts.insert(E);
|
||||
E->clear(clear_data);
|
||||
// If we're in the process of shutting things down then every single script will be cleared
|
||||
// anyway, so we can safely skip this very costly operation.
|
||||
if (!GDScriptLanguage::singleton->finishing) {
|
||||
RBSet<GDScript *> must_clear_dependencies = get_must_clear_dependencies();
|
||||
for (GDScript *E : must_clear_dependencies) {
|
||||
clear_data->scripts.insert(E);
|
||||
E->clear(clear_data);
|
||||
}
|
||||
}
|
||||
|
||||
for (const KeyValue<StringName, GDScriptFunction *> &E : member_functions) {
|
||||
|
@ -2246,6 +2250,11 @@ String GDScriptLanguage::get_extension() const {
|
|||
}
|
||||
|
||||
void GDScriptLanguage::finish() {
|
||||
if (finishing) {
|
||||
return;
|
||||
}
|
||||
finishing = true;
|
||||
|
||||
_call_stack.free();
|
||||
|
||||
// Clear the cache before parsing the script_list
|
||||
|
@ -2281,6 +2290,8 @@ void GDScriptLanguage::finish() {
|
|||
}
|
||||
script_list.clear();
|
||||
function_list.clear();
|
||||
|
||||
finishing = false;
|
||||
}
|
||||
|
||||
void GDScriptLanguage::profiling_start() {
|
||||
|
|
|
@ -411,6 +411,8 @@ class GDScriptLanguage : public ScriptLanguage {
|
|||
|
||||
static GDScriptLanguage *singleton;
|
||||
|
||||
bool finishing = false;
|
||||
|
||||
Variant *_global_array = nullptr;
|
||||
Vector<Variant> global_array;
|
||||
HashMap<StringName, int> globals;
|
||||
|
|
Loading…
Reference in a new issue