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:
Jan Kotas 2015-10-16 08:03:08 -07:00
Родитель 123d08d066
Коммит ab892fca2d
4 изменённых файлов: 62 добавлений и 4 удалений

Просмотреть файл

@ -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)