Various fixes to scripting

This commit is contained in:
Wojtek Figat
2023-03-06 16:17:52 +01:00
parent 31411e334b
commit aaaf7c5c37
8 changed files with 73 additions and 87 deletions

View File

@@ -16,6 +16,9 @@
#define FLAX_CORECLR_STRING StringAnsi
#endif
/// <summary>
/// .NET Runtime hosting library that uses Hostfxr (https://github.com/dotnet/runtime).
/// </summary>
class CoreCLR
{
public:

View File

@@ -852,18 +852,21 @@ MONO_API MONO_RT_EXTERNAL_ONLY MonoObject* mono_property_get_value(MonoProperty*
MONO_API void mono_gc_wbarrier_set_field(MonoObject* obj, void* field_ptr, MonoObject* value)
{
ASSERT(false);
CRASH; // Not supported on CoreCRL
}
MONO_API void mono_gc_wbarrier_set_arrayref(MonoArray* arr, void* slot_ptr, MonoObject* value)
{
static void* SetArrayValueReferencePtr = CoreCLR::GetStaticMethodPointer(TEXT("SetArrayValueReference"));
CoreCLR::CallStaticMethod<void, void*, void*, void*>(SetArrayValueReferencePtr, arr, slot_ptr, value);
}
MONO_API void mono_gc_wbarrier_generic_store(void* ptr, MonoObject* value)
{
// Ignored
*((void**)ptr) = value;
*(void**)ptr = value;
}
MONO_API void mono_gc_wbarrier_value_copy(void* dest, /*const*/ void* src, int count, MonoClass* klass)
{
// Ignored

View File

@@ -85,6 +85,7 @@ extern "C" FLAXENGINE_API void mono_add_internal_call(const char* name, const vo
#else
#define ADD_INTERNAL_CALL(fullName, method)
#define DEFINE_INTERNAL_CALL(returnType) static returnType
#define INTERNAL_CALL_CHECK(obj)
#define INTERNAL_CALL_CHECK_EXP(expression)
#define INTERNAL_CALL_CHECK_RETURN(obj, defaultValue)

View File

@@ -221,12 +221,12 @@ void ScriptingObject::ChangeID(const Guid& newId)
_type.GetType().Module->OnObjectIdChanged(this, prevId);
}
void ScriptingObject::SetManagedInstance(MonoObject* instance)
void ScriptingObject::SetManagedInstance(MObject* instance)
{
ASSERT(_gcHandle == 0);
#if USE_NETCORE
_gcHandle = (MGCHandle)instance;
#else
#elif !COMPILE_WITHOUT_CSHARP
_gcHandle = MUtils::NewGCHandle(instance, false);
#endif
}
@@ -454,12 +454,12 @@ ManagedScriptingObject::ManagedScriptingObject(const SpawnParams& params)
{
}
void ManagedScriptingObject::SetManagedInstance(MonoObject* instance)
void ManagedScriptingObject::SetManagedInstance(MObject* instance)
{
ASSERT(_gcHandle == 0);
#if USE_NETCORE
_gcHandle = (MGCHandle)instance;
#else
#elif !COMPILE_WITHOUT_CSHARP
_gcHandle = MUtils::NewGCHandleWeakref(instance, false);
#endif
}

View File

@@ -190,7 +190,7 @@ public:
virtual void ChangeID(const Guid& newId);
public:
virtual void SetManagedInstance(MonoObject* instance);
virtual void SetManagedInstance(MObject* instance);
virtual void OnManagedInstanceDeleted();
virtual void OnScriptingDispose();
@@ -246,7 +246,7 @@ public:
public:
// [ScriptingObject]
void SetManagedInstance(MonoObject* instance) override;
void SetManagedInstance(MObject* instance) override;
void OnManagedInstanceDeleted() override;
void OnScriptingDispose() override;
bool CreateManaged() override;