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

Method GetFieldValue

Source/Engine/Scripting/BinaryModule.cpp:1447–1507  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1445}
1446
1447bool ManagedBinaryModule::GetFieldValue(void* field, const Variant& instance, Variant& result)
1448{
1449#if USE_CSHARP
1450 bool isStatic;
1451 MClass* parentClass;
1452 StringAnsiView name;
1453 if ((uintptr)field & ManagedBinaryModuleFieldIsPropertyBit)
1454 {
1455 const auto mProperty = (MProperty*)((uintptr)field & ~ManagedBinaryModuleFieldIsPropertyBit);
1456 isStatic = mProperty->IsStatic();
1457 parentClass = mProperty->GetParentClass();
1458 name = mProperty->GetName();
1459 }
1460 else
1461 {
1462 const auto mField = (MField*)field;
1463 isStatic = mField->IsStatic();
1464 parentClass = mField->GetParentClass();
1465 name = mField->GetName();
1466 }
1467
1468 // Get instance object
1469 MObject* instanceObject = nullptr;
1470 if (!isStatic)
1471 {
1472 // Box instance into C# object
1473 instanceObject = MUtils::BoxVariant(instance);
1474
1475 // Validate instance
1476 if (!instanceObject || !MCore::Object::GetClass(instanceObject)->IsSubClassOf(parentClass))
1477 {
1478 if (!instanceObject)
1479 {
1480 LOG(Error, "Failed to get '{0}.{1}' without object instance", String(parentClass->GetFullName()), String(name));
1481 }
1482 else
1483 {
1484 LOG(Error, "Failed to get '{0}.{1}' with invalid object instance of type '{2}'", String(parentClass->GetFullName()), String(name), String(MUtils::GetClassFullname(instanceObject)));
1485 }
1486 return true;
1487 }
1488 }
1489
1490 // Get the value
1491 MObject* resultObject;
1492 if ((uintptr)field & ManagedBinaryModuleFieldIsPropertyBit)
1493 {
1494 const auto mProperty = (MProperty*)((uintptr)field & ~ManagedBinaryModuleFieldIsPropertyBit);
1495 resultObject = mProperty->GetValue(instanceObject, nullptr);
1496 }
1497 else
1498 {
1499 const auto mField = (MField*)field;
1500 resultObject = mField->GetValueBoxed(instanceObject);
1501 }
1502 result = MUtils::UnboxVariant(resultObject);
1503 return false;
1504#else

Callers 3

AccessVariantFunction · 0.45
PrettyPrintMethod · 0.45
InvokeMethod · 0.45

Calls 8

GetClassFullnameFunction · 0.85
IsStaticMethod · 0.80
GetClassFunction · 0.50
StringFunction · 0.50
GetNameMethod · 0.45
IsSubClassOfMethod · 0.45
GetValueMethod · 0.45
GetValueBoxedMethod · 0.45

Tested by

no test coverage detected