Add support for static variables in GDScript

Which allows editable data associated with a particular class instead of
the instance. Scripts with static variables are kept in memory
indefinitely unless the `@static_unload` annotation is used or the
`static_unload()` method is called on the GDScript.

If the custom function `_static_init()` exists it will be called when
the class is loaded, after the static variables are set.
This commit is contained in:
George Marques 2023-04-19 11:10:35 -03:00
parent 352ebe9725
commit 0ba6048ad3
No known key found for this signature in database
GPG key ID: 046BD46A3201E43D
36 changed files with 689 additions and 86 deletions

View file

@ -185,6 +185,9 @@ String GDScriptWarning::get_message() const {
case ONREADY_WITH_EXPORT: {
return R"("@onready" will set the default value after "@export" takes effect and will override it.)";
}
case REDUNDANT_STATIC_UNLOAD: {
return R"(The "@static_unload" annotation is redundant because the file does not have a class with static variables.)";
}
case WARNING_MAX:
break; // Can't happen, but silences warning
}
@ -254,6 +257,7 @@ String GDScriptWarning::get_name_from_code(Code p_code) {
"NATIVE_METHOD_OVERRIDE",
"GET_NODE_DEFAULT_WITHOUT_ONREADY",
"ONREADY_WITH_EXPORT",
"REDUNDANT_STATIC_UNLOAD",
};
static_assert((sizeof(names) / sizeof(*names)) == WARNING_MAX, "Amount of warning types don't match the amount of warning names.");