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
36 changed files with 689 additions and 86 deletions

View File

@@ -0,0 +1,5 @@
static func _static_init() -> int:
print("static init")
func test():
print("done")

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Static constructor cannot have an explicit return type.

View File

@@ -0,0 +1,9 @@
@static_unload
func non_static():
return "non static"
static var static_var = non_static()
func test():
print("does not run")

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Cannot call non-static function "non_static()" for static variable initializer.