MCPcopy Create free account
hub / github.com/FlaxEngine/FlaxEngine / SetupScriptVTable

Method SetupScriptVTable

Source/Engine/Scripting/BinaryModule.cpp:416–450  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

414}
415
416void ScriptingType::SetupScriptVTable(ScriptingTypeHandle baseTypeHandle)
417{
418 // Call setup for all class starting from the first native type (first that uses virtual calls will allocate table of a proper size, further base types will just add own methods)
419 for (ScriptingTypeHandle e = baseTypeHandle; e;)
420 {
421 const ScriptingType& eType = e.GetType();
422
423 if (eType.Script.SetupScriptVTable)
424 {
425 ASSERT(eType.ManagedClass);
426 eType.Script.SetupScriptVTable(eType.ManagedClass, Script.ScriptVTable, Script.ScriptVTableBase);
427 }
428
429 auto interfaces = eType.Interfaces;
430 if (interfaces && Script.ScriptVTable)
431 {
432 while (interfaces->InterfaceType)
433 {
434 auto& interfaceType = interfaces->InterfaceType->GetType();
435 if (interfaceType.Interface.SetupScriptVTable)
436 {
437 ASSERT(eType.ManagedClass);
438 const auto scriptOffset = interfaces->ScriptVTableOffset; // Shift the script vtable for the interface implementation start
439 Script.ScriptVTable += scriptOffset;
440 Script.ScriptVTableBase += scriptOffset;
441 interfaceType.Interface.SetupScriptVTable(eType.ManagedClass, Script.ScriptVTable, Script.ScriptVTableBase);
442 Script.ScriptVTable -= scriptOffset;
443 Script.ScriptVTableBase -= scriptOffset;
444 }
445 interfaces++;
446 }
447 }
448 e = eType.GetBaseType();
449 }
450}
451
452NO_SANITIZE_ADDRESS
453void ScriptingType::SetupScriptObjectVTable(void* object, ScriptingTypeHandle baseTypeHandle, int32 wrapperIndex)

Callers 2

CacheScriptingTypeMethod · 0.80
InitTypeMethod · 0.80

Calls 1

GetTypeMethod · 0.45

Tested by

no test coverage detected