|
@@ -87,6 +87,19 @@ Object *GDScriptNativeClass::instantiate() {
|
|
return ClassDB::instantiate(name);
|
|
return ClassDB::instantiate(name);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+GDScriptFunction *GDScript::_super_constructor(GDScript *p_script) {
|
|
|
|
+ if (p_script->initializer) {
|
|
|
|
+ return p_script->initializer;
|
|
|
|
+ } else {
|
|
|
|
+ GDScript *base = p_script->_base;
|
|
|
|
+ if (base != nullptr) {
|
|
|
|
+ return _super_constructor(base);
|
|
|
|
+ } else {
|
|
|
|
+ return nullptr;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
void GDScript::_super_implicit_constructor(GDScript *p_script, GDScriptInstance *p_instance, Callable::CallError &r_error) {
|
|
void GDScript::_super_implicit_constructor(GDScript *p_script, GDScriptInstance *p_instance, Callable::CallError &r_error) {
|
|
GDScript *base = p_script->_base;
|
|
GDScript *base = p_script->_base;
|
|
if (base != nullptr) {
|
|
if (base != nullptr) {
|
|
@@ -135,6 +148,8 @@ GDScriptInstance *GDScript::_create_instance(const Variant **p_args, int p_argco
|
|
if (p_argcount < 0) {
|
|
if (p_argcount < 0) {
|
|
return instance;
|
|
return instance;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ initializer = _super_constructor(this);
|
|
if (initializer != nullptr) {
|
|
if (initializer != nullptr) {
|
|
initializer->call(instance, p_args, p_argcount, r_error);
|
|
initializer->call(instance, p_args, p_argcount, r_error);
|
|
if (r_error.error != Callable::CallError::CALL_OK) {
|
|
if (r_error.error != Callable::CallError::CALL_OK) {
|