mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Also expose type-specific AllocStackCount
This commit is contained in:
parent
111b785081
commit
8b96697fdf
4 changed files with 39 additions and 19 deletions
|
@ -143,7 +143,10 @@ namespace System.Reflection
|
||||||
let objType = typeof(Object) as TypeInstance;
|
let objType = typeof(Object) as TypeInstance;
|
||||||
|
|
||||||
#if BF_ENABLE_OBJECT_DEBUG_FLAGS
|
#if BF_ENABLE_OBJECT_DEBUG_FLAGS
|
||||||
obj = Internal.Dbg_ObjectAlloc(mTypeClassVData, mInstSize, mInstAlign, Compiler.Options.AllocStackCount);
|
int32 stackCount = Compiler.Options.AllocStackCount;
|
||||||
|
if (mAllocStackCountOverride != 0)
|
||||||
|
stackCount = mAllocStackCountOverride;
|
||||||
|
obj = Internal.Dbg_ObjectAlloc(mTypeClassVData, mInstSize, mInstAlign, stackCount);
|
||||||
#else
|
#else
|
||||||
void* mem = new [Align(16)] uint8[mInstSize]* (?);
|
void* mem = new [Align(16)] uint8[mInstSize]* (?);
|
||||||
obj = Internal.UnsafeCastToObject(mem);
|
obj = Internal.UnsafeCastToObject(mem);
|
||||||
|
|
|
@ -20,13 +20,14 @@ namespace System
|
||||||
|
|
||||||
protected const BindingFlags cDefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
|
protected const BindingFlags cDefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
|
||||||
|
|
||||||
protected int32 mSize;
|
protected int32 mSize;
|
||||||
protected TypeId mTypeId;
|
protected TypeId mTypeId;
|
||||||
protected TypeId mBoxedType;
|
protected TypeId mBoxedType;
|
||||||
protected TypeFlags mTypeFlags;
|
protected TypeFlags mTypeFlags;
|
||||||
protected int32 mMemberDataOffset;
|
protected int32 mMemberDataOffset;
|
||||||
protected TypeCode mTypeCode;
|
protected TypeCode mTypeCode;
|
||||||
protected uint8 mAlign;
|
protected uint8 mAlign;
|
||||||
|
protected uint8 mAllocStackCountOverride;
|
||||||
|
|
||||||
public static TypeId TypeIdEnd
|
public static TypeId TypeIdEnd
|
||||||
{
|
{
|
||||||
|
@ -1187,7 +1188,10 @@ namespace System.Reflection
|
||||||
let genericType = GetGenericArg(0);
|
let genericType = GetGenericArg(0);
|
||||||
let arraySize = [Friend]mInstSize - genericType.Size + genericType.Stride * count;
|
let arraySize = [Friend]mInstSize - genericType.Size + genericType.Stride * count;
|
||||||
#if BF_ENABLE_OBJECT_DEBUG_FLAGS
|
#if BF_ENABLE_OBJECT_DEBUG_FLAGS
|
||||||
obj = Internal.Dbg_ObjectAlloc([Friend]mTypeClassVData, arraySize, [Friend]mInstAlign, Compiler.Options.AllocStackCount);
|
int32 stackCount = Compiler.Options.AllocStackCount;
|
||||||
|
if (mAllocStackCountOverride != 0)
|
||||||
|
stackCount = mAllocStackCountOverride;
|
||||||
|
obj = Internal.Dbg_ObjectAlloc([Friend]mTypeClassVData, arraySize, [Friend]mInstAlign, stackCount);
|
||||||
#else
|
#else
|
||||||
void* mem = new [Align(16)] uint8[arraySize]* (?);
|
void* mem = new [Align(16)] uint8[arraySize]* (?);
|
||||||
obj = Internal.UnsafeCastToObject(mem);
|
obj = Internal.UnsafeCastToObject(mem);
|
||||||
|
|
|
@ -20,13 +20,14 @@ namespace System
|
||||||
|
|
||||||
protected const BindingFlags cDefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
|
protected const BindingFlags cDefaultLookup = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public;
|
||||||
|
|
||||||
protected int32 mSize;
|
protected int32 mSize;
|
||||||
protected TypeId mTypeId;
|
protected TypeId mTypeId;
|
||||||
protected TypeId mBoxedType;
|
protected TypeId mBoxedType;
|
||||||
protected TypeFlags mTypeFlags;
|
protected TypeFlags mTypeFlags;
|
||||||
protected int32 mMemberDataOffset;
|
protected int32 mMemberDataOffset;
|
||||||
protected TypeCode mTypeCode;
|
protected TypeCode mTypeCode;
|
||||||
protected uint8 mAlign;
|
protected uint8 mAlign;
|
||||||
|
protected uint8 mAllocStackCountOverride;
|
||||||
|
|
||||||
public static TypeId TypeIdEnd
|
public static TypeId TypeIdEnd
|
||||||
{
|
{
|
||||||
|
@ -1117,7 +1118,10 @@ namespace System.Reflection
|
||||||
let genericType = GetGenericArg(0);
|
let genericType = GetGenericArg(0);
|
||||||
let arraySize = [Friend]mInstSize - genericType.Size + genericType.Stride * count;
|
let arraySize = [Friend]mInstSize - genericType.Size + genericType.Stride * count;
|
||||||
#if BF_ENABLE_OBJECT_DEBUG_FLAGS
|
#if BF_ENABLE_OBJECT_DEBUG_FLAGS
|
||||||
obj = Internal.Dbg_ObjectAlloc([Friend]mTypeClassVData, arraySize, [Friend]mInstAlign, Compiler.Options.AllocStackCount);
|
int32 stackCount = Compiler.Options.AllocStackCount;
|
||||||
|
if (mAllocStackCountOverride != 0)
|
||||||
|
stackCount = mAllocStackCountOverride;
|
||||||
|
obj = Internal.Dbg_ObjectAlloc([Friend]mTypeClassVData, arraySize, [Friend]mInstAlign, stackCount);
|
||||||
#else
|
#else
|
||||||
void* mem = new [Align(16)] uint8[arraySize]* (?);
|
void* mem = new [Align(16)] uint8[arraySize]* (?);
|
||||||
obj = Internal.UnsafeCastToObject(mem);
|
obj = Internal.UnsafeCastToObject(mem);
|
||||||
|
|
|
@ -5467,7 +5467,15 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
|
||||||
boxedTypeId = boxedType->mTypeId;
|
boxedTypeId = boxedType->mTypeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
SizedArray<BfIRValue, 8> typeDataParams =
|
int stackCount = 0;
|
||||||
|
if ((typeInstance != NULL) && (typeInstance->mTypeOptionsIdx != -1))
|
||||||
|
{
|
||||||
|
auto typeOptions = mSystem->GetTypeOptions(typeInstance->mTypeOptionsIdx);
|
||||||
|
if (typeOptions->mAllocStackTraceDepth != -1)
|
||||||
|
stackCount = BF_MIN(0xFF, BF_MAX(0x01, typeOptions->mAllocStackTraceDepth));
|
||||||
|
}
|
||||||
|
|
||||||
|
SizedArray<BfIRValue, 9> typeDataParams =
|
||||||
{
|
{
|
||||||
objectData,
|
objectData,
|
||||||
GetConstValue(type->mSize, intType), // mSize
|
GetConstValue(type->mSize, intType), // mSize
|
||||||
|
@ -5476,7 +5484,8 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
|
||||||
GetConstValue(typeFlags, intType), // mTypeFlags
|
GetConstValue(typeFlags, intType), // mTypeFlags
|
||||||
GetConstValue(memberDataOffset, intType), // mMemberDataOffset
|
GetConstValue(memberDataOffset, intType), // mMemberDataOffset
|
||||||
GetConstValue(typeCode, byteType), // mTypeCode
|
GetConstValue(typeCode, byteType), // mTypeCode
|
||||||
GetConstValue(type->mAlign, byteType),
|
GetConstValue(type->mAlign, byteType), // mAlign
|
||||||
|
GetConstValue(stackCount, byteType), // mAllocStackCountOverride
|
||||||
};
|
};
|
||||||
auto typeData = mBfIRBuilder->CreateConstAgg_Value(mBfIRBuilder->MapTypeInst(mContext->mBfTypeType, BfIRPopulateType_Full), typeDataParams);
|
auto typeData = mBfIRBuilder->CreateConstAgg_Value(mBfIRBuilder->MapTypeInst(mContext->mBfTypeType, BfIRPopulateType_Full), typeDataParams);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue