Fix or workaround bugs for libuv demo
- Add missing forwarders for IsVirtual and IsNewSlot to generic method specializations - Extend workaround for infinite recursion in virtual method resolution - Fill implementation of several runtime helpers
This commit is contained in:
Родитель
123d08d066
Коммит
ab892fca2d
|
@ -72,6 +72,22 @@ namespace Internal.TypeSystem
|
|||
}
|
||||
}
|
||||
|
||||
public override bool IsVirtual
|
||||
{
|
||||
get
|
||||
{
|
||||
return _methodDef.IsVirtual;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsNewSlot
|
||||
{
|
||||
get
|
||||
{
|
||||
return _methodDef.IsNewSlot;
|
||||
}
|
||||
}
|
||||
|
||||
public override MethodDesc GetMethodDefinition()
|
||||
{
|
||||
return _methodDef;
|
||||
|
|
|
@ -67,6 +67,22 @@ namespace Internal.TypeSystem
|
|||
}
|
||||
}
|
||||
|
||||
public override bool IsVirtual
|
||||
{
|
||||
get
|
||||
{
|
||||
return _typicalMethodDef.IsVirtual;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsNewSlot
|
||||
{
|
||||
get
|
||||
{
|
||||
return _typicalMethodDef.IsNewSlot;
|
||||
}
|
||||
}
|
||||
|
||||
public override MethodDesc GetTypicalMethodDefinition()
|
||||
{
|
||||
return _typicalMethodDef;
|
||||
|
|
|
@ -77,13 +77,25 @@ namespace Internal.TypeSystem
|
|||
MethodSignature sig = targetMethod.Signature;
|
||||
|
||||
TypeDesc t = objectType;
|
||||
for (;;)
|
||||
while (t != null)
|
||||
{
|
||||
MethodDesc implMethod = t.GetMethod(name, sig);
|
||||
if (implMethod != null)
|
||||
return implMethod;
|
||||
t = t.BaseType;
|
||||
}
|
||||
|
||||
t = objectType;
|
||||
while (t != null)
|
||||
{
|
||||
MethodDesc implMethod = t.GetMethod(name, null);
|
||||
if (implMethod != null)
|
||||
return implMethod;
|
||||
t = t.BaseType;
|
||||
}
|
||||
|
||||
Debug.Assert(false);
|
||||
return null;
|
||||
#else
|
||||
// Step 1, convert objectType to uninstantiated form
|
||||
TypeDesc uninstantiatedType = objectType;
|
||||
|
|
|
@ -532,7 +532,6 @@ extern "C" int32_t RhGetModuleFileName(intptr_t, uint16_t**)
|
|||
|
||||
extern "C" void RhSuppressFinalize(System::Object*)
|
||||
{
|
||||
throw 42;
|
||||
}
|
||||
|
||||
extern "C" uint8_t RhGetCorElementType(System::EETypePtr)
|
||||
|
@ -560,6 +559,21 @@ extern "C" uint8_t RhIsValueType(System::EETypePtr)
|
|||
throw 42;
|
||||
}
|
||||
|
||||
extern "C" uint8_t RhIsArray(System::EETypePtr)
|
||||
{
|
||||
throw 42;
|
||||
}
|
||||
|
||||
extern "C" intptr_t RhHandleAlloc(System::Object *pObject, int type)
|
||||
{
|
||||
return (intptr_t)HndCreateHandle(g_HandleTableMap.pBuckets[0]->pTable[GetCurrentThreadHomeHeapNumber()], type, (OBJECTREF)pObject);
|
||||
}
|
||||
|
||||
extern "C" void RhHandleFree(OBJECTHANDLE handle)
|
||||
{
|
||||
DestroyTypedHandle(handle);
|
||||
}
|
||||
|
||||
extern "C" intptr_t RhHandleAllocDependent(System::Object*, System::Object*)
|
||||
{
|
||||
throw 42;
|
||||
|
@ -570,9 +584,9 @@ extern "C" System::Object* RhHandleGetDependent(intptr_t)
|
|||
throw 42;
|
||||
}
|
||||
|
||||
extern "C" System::Object* RhHandleGet(intptr_t)
|
||||
extern "C" System::Object* RhHandleGet(OBJECTHANDLE handle)
|
||||
{
|
||||
throw 42;
|
||||
return (System::Object*)ObjectFromHandle(handle);
|
||||
}
|
||||
|
||||
extern "C" intptr_t RhSetErrorInfoBuffer(intptr_t)
|
||||
|
|
Загрузка…
Ссылка в новой задаче