MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / _create_instance

Method _create_instance

modules/gdscript/gdscript.cpp:159–214  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

157}
158
159GDScriptInstance *GDScript::_create_instance(const Variant **p_args, int p_argcount, Object *p_owner, bool p_is_ref_counted, Callable::CallError &r_error) {
160 /* STEP 1, CREATE */
161
162 GDScriptInstance *instance = memnew(GDScriptInstance);
163 instance->base_ref_counted = p_is_ref_counted;
164 instance->members.resize(member_indices.size());
165 instance->script = Ref<GDScript>(this);
166 instance->owner = p_owner;
167 instance->owner_id = p_owner->get_instance_id();
168#ifdef DEBUG_ENABLED
169 //needed for hot reloading
170 for (const KeyValue<StringName, MemberInfo> &E : member_indices) {
171 instance->member_indices_cache[E.key] = E.value.index;
172 }
173#endif
174 instance->owner->set_script_instance(instance);
175
176 /* STEP 2, INITIALIZE AND CONSTRUCT */
177 {
178 MutexLock lock(GDScriptLanguage::singleton->mutex);
179 instances.insert(instance->owner);
180 }
181
182 _super_implicit_constructor(this, instance, r_error);
183 if (r_error.error != Callable::CallError::CALL_OK) {
184 String error_text = Variant::get_call_error_text(instance->owner, "@implicit_new", nullptr, 0, r_error);
185 instance->script = Ref<GDScript>();
186 instance->owner->set_script_instance(nullptr);
187 {
188 MutexLock lock(GDScriptLanguage::singleton->mutex);
189 instances.erase(p_owner);
190 }
191 ERR_FAIL_V_MSG(nullptr, "Error constructing a GDScriptInstance: " + error_text);
192 }
193
194 if (p_argcount < 0) {
195 return instance;
196 }
197
198 GDScriptFunction *applicable_initializer = _super_constructor(this);
199 if (applicable_initializer != nullptr) {
200 applicable_initializer->call(instance, p_args, p_argcount, r_error);
201 if (r_error.error != Callable::CallError::CALL_OK) {
202 String error_text = Variant::get_call_error_text(instance->owner, "_init", p_args, p_argcount, r_error);
203 instance->script = Ref<GDScript>();
204 instance->owner->set_script_instance(nullptr);
205 {
206 MutexLock lock(GDScriptLanguage::singleton->mutex);
207 instances.erase(p_owner);
208 }
209 ERR_FAIL_V_MSG(nullptr, "Error constructing a GDScriptInstance: " + error_text);
210 }
211 }
212 /// @todo Make thread safe
213 return instance;
214}
215
216Variant GDScript::_new(const Variant **p_args, int p_argcount, Callable::CallError &r_error) {

Callers

nothing calls this directly

Calls 7

set_script_instanceMethod · 0.80
sizeMethod · 0.65
resizeMethod · 0.45
get_instance_idMethod · 0.45
insertMethod · 0.45
eraseMethod · 0.45
callMethod · 0.45

Tested by

no test coverage detected