1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-28 20:46:00 +02:00

Added reflection category to distinct build options (wip)

This commit is contained in:
Brian Fiete 2020-07-11 16:24:07 -07:00
parent 5cb6570e14
commit 037b2ac1e4
15 changed files with 538 additions and 94 deletions

View file

@ -64,6 +64,15 @@ namespace IDE
Small,
Big
}
public enum AlwaysIncludeKind
{
NotSet,
No,
IncludeType,
AssumeInstantiated,
IncludeAll
}
}
public class DistinctBuildOptions
@ -94,6 +103,20 @@ namespace IDE
public bool? mEmitObjectAccessCheck; // Only valid with mObjectHasDebugFlags
[Reflect]
public int32? mAllocStackTraceDepth;
[Reflect]
public BuildOptions.AlwaysIncludeKind mReflectAlwaysInclude;
[Reflect]
public bool? mReflectStaticFields;
[Reflect]
public bool? mReflectNonStaticFields;
[Reflect]
public bool? mReflectStaticMethods;
[Reflect]
public bool? mReflectNonStaticMethods;
[Reflect]
public bool? mReflectConstructors;
[Reflect]
public String mReflectMethodFilter = new String() ~ delete _;
public ~this()
{
@ -111,6 +134,13 @@ namespace IDE
newVal.mEmitDynamicCastCheck = mEmitDynamicCastCheck;
newVal.mEmitObjectAccessCheck = mEmitObjectAccessCheck;
newVal.mAllocStackTraceDepth = mAllocStackTraceDepth;
newVal.mReflectAlwaysInclude = mReflectAlwaysInclude;
newVal.mReflectStaticFields = mReflectStaticFields;
newVal.mReflectNonStaticFields = mReflectNonStaticFields;
newVal.mReflectStaticMethods = mReflectStaticMethods;
newVal.mReflectNonStaticMethods = mReflectNonStaticMethods;
newVal.mReflectConstructors = mReflectConstructors;
newVal.mReflectMethodFilter.Set(mReflectMethodFilter);
return newVal;
}
@ -133,6 +163,20 @@ namespace IDE
mEmitObjectAccessCheck = data.GetBool("EmitObjectAccessCheck");
if (data.Contains("AllocStackTraceDepth"))
mAllocStackTraceDepth = data.GetInt("AllocStackTraceDepth");
if (data.Contains("ReflectAlwaysInclude"))
mReflectAlwaysInclude = data.GetEnum<BuildOptions.AlwaysIncludeKind>("ReflectAlwaysInclude");
if (data.Contains("ReflectStaticFields"))
mReflectStaticFields = data.GetBool("ReflectStaticFields");
if (data.Contains("ReflectNonStaticFields"))
mReflectNonStaticFields = data.GetBool("ReflectNonStaticFields");
if (data.Contains("ReflectStaticMethods"))
mReflectStaticMethods = data.GetBool("ReflectStaticMethods");
if (data.Contains("ReflectNonStaticMethods"))
mReflectNonStaticMethods = data.GetBool("ReflectNonStaticMethods");
if (data.Contains("ReflectConstructors"))
mReflectConstructors = data.GetBool("ReflectConstructors");
data.GetString("ReflectMethodFilter", mReflectMethodFilter);
}
public void Serialize(StructuredData data)
@ -146,6 +190,13 @@ namespace IDE
data.ConditionalAdd("EmitDynamicCastCheck", mEmitDynamicCastCheck);
data.ConditionalAdd("EmitObjectAccessCheck", mEmitObjectAccessCheck);
data.ConditionalAdd("AllocStackTraceDepth", mAllocStackTraceDepth);
data.ConditionalAdd("ReflectAlwaysInclude", mReflectAlwaysInclude);
data.ConditionalAdd("ReflectStaticFields", mReflectStaticFields);
data.ConditionalAdd("ReflectNonStaticFields", mReflectNonStaticFields);
data.ConditionalAdd("ReflectStaticMethods", mReflectStaticMethods);
data.ConditionalAdd("ReflectNonStaticMethods", mReflectNonStaticMethods);
data.ConditionalAdd("ReflectConstructors", mReflectConstructors);
data.ConditionalAdd("ReflectMethodFilter", mReflectMethodFilter);
}
}
}

View file

@ -9,6 +9,25 @@ namespace IDE.Compiler
{
public class BfSystem
{
enum BfOptionFlags
{
RuntimeChecks = 1,
InitLocalVariables = 2,
EmitDynamicCastCheck = 4,
EmitObjectAccessCheck = 8,
ReflectAlwaysIncludeType = 0x10,
ReflectAlwaysIncludeAll = 0x20,
ReflectAssumeInstantiated = 0x40,
ReflectStaticFields = 0x80,
ReflectNonStaticFields = 0x100,
ReflectStaticMethods = 0x200,
ReflectNonStaticMethods = 0x400,
ReflectConstructors = 0x800,
All = 0xFFF
};
[CallingConvention(.Stdcall), CLink]
static extern void BfSystem_CheckLock(void* bfSystem);
@ -37,8 +56,8 @@ namespace IDE.Compiler
static extern void BfSystem_ClearTypeOptions(void* bfSystem);
[CallingConvention(.Stdcall), CLink]
static extern void BfSystem_AddTypeOptions(void* bfSystem, char8* filter, int32 simdSetting, int32 optimizationLevel, int32 emitDebugInfo, int32 runtimeChecks,
int32 initLocalVariables, int32 emitDynamicCastCheck, int32 emitObjectAccessCheck, int32 allocStackTraceDepth);
static extern void BfSystem_AddTypeOptions(void* bfSystem, char8* filter, int32 simdSetting, int32 optimizationLevel, int32 emitDebugInfo, int32 andFlags, int32 orFlags,
int32 allocStackTraceDepth, char8* reflectMethodFilter);
[CallingConvention(.Stdcall), CLink]
static extern void* BfSystem_CreateParser(void* bfSystem, void* bfProject);
@ -343,25 +362,52 @@ namespace IDE.Compiler
BfSystem_ClearTypeOptions(mNativeBfSystem);
}
public void AddTypeOptions(String filter, BuildOptions.SIMDSetting? simdSetting, BuildOptions.BfOptimizationLevel? optimizationLevel, BuildOptions.EmitDebugInfo? emitDebugInfo, bool? runtimeChecks,
bool? initLocalVariables, bool? emitDynamicCastCheck, bool? emitObjectAccessCheck, int32? allocStackTraceDepth)
public void AddTypeOptions(String filter, BuildOptions.SIMDSetting? simdSetting, BuildOptions.BfOptimizationLevel? optimizationLevel, BuildOptions.EmitDebugInfo? emitDebugInfo, BfOptionFlags andFlags, BfOptionFlags orFlags, int32? allocStackTraceDepth, String reflectMethodFilter)
{
int32 simdSettingInt = (simdSetting == null) ? -1 : (int32)simdSetting.Value;
int32 optimizationLevelInt = (optimizationLevel == null) ? -1 : (int32)optimizationLevel.Value;
int32 emitDebugInfoInt = (emitDebugInfo == null) ? -1 : (int32)emitDebugInfo.Value;
int32 runtimeChecksInt = (runtimeChecks == null) ? -1 : runtimeChecks.Value ? 1 : 0;
/*int32 runtimeChecksInt = (runtimeChecks == null) ? -1 : runtimeChecks.Value ? 1 : 0;
int32 initLocalVariablesInt = (initLocalVariables == null) ? -1 : initLocalVariables.Value ? 1 : 0;
int32 emitDynamicCastCheckInt = (emitDynamicCastCheck == null) ? -1 : emitDynamicCastCheck.Value ? 1 : 0;
int32 emitObjectAccessCheckInt = (emitObjectAccessCheck == null) ? -1 : emitObjectAccessCheck.Value ? 1 : 0;
int32 emitObjectAccessCheckInt = (emitObjectAccessCheck == null) ? -1 : emitObjectAccessCheck.Value ? 1 : 0;*/
int32 allocStackTraceDepthInt = (allocStackTraceDepth == null) ? -1 : allocStackTraceDepth.Value;
BfSystem_AddTypeOptions(mNativeBfSystem, filter, simdSettingInt, optimizationLevelInt, emitDebugInfoInt, runtimeChecksInt,
initLocalVariablesInt, emitDynamicCastCheckInt, emitObjectAccessCheckInt, allocStackTraceDepthInt);
BfSystem_AddTypeOptions(mNativeBfSystem, filter, simdSettingInt, optimizationLevelInt, emitDebugInfoInt, (.)andFlags, (.)orFlags, allocStackTraceDepthInt, reflectMethodFilter);
}
public void AddTypeOptions(DistinctBuildOptions typeOption)
{
AddTypeOptions(typeOption.mFilter, typeOption.mBfSIMDSetting, typeOption.mBfOptimizationLevel, typeOption.mEmitDebugInfo, typeOption.mRuntimeChecks,
typeOption.mInitLocalVariables, typeOption.mEmitDynamicCastCheck, typeOption.mEmitObjectAccessCheck, typeOption.mAllocStackTraceDepth);
BfOptionFlags andFlags = .All;
BfOptionFlags orFlags = 0;
void SetFlag(bool? val, BfOptionFlags flag)
{
if (val == false)
andFlags &= ~flag;
if (val == true)
orFlags |= flag;
}
switch (typeOption.mReflectAlwaysInclude)
{
case .NotSet:
case .No:
andFlags &= ~(.ReflectAlwaysIncludeType | .ReflectAlwaysIncludeAll | .ReflectAssumeInstantiated);
case .IncludeType:
orFlags |= .ReflectAssumeInstantiated;
case .AssumeInstantiated:
orFlags |= .ReflectAssumeInstantiated;
case .IncludeAll:
orFlags |= .ReflectAlwaysIncludeType | .ReflectAlwaysIncludeAll | .ReflectAssumeInstantiated;
}
SetFlag(typeOption.mReflectStaticFields, .ReflectStaticFields);
SetFlag(typeOption.mReflectNonStaticFields, .ReflectNonStaticFields);
SetFlag(typeOption.mReflectStaticMethods, .ReflectStaticMethods);
SetFlag(typeOption.mReflectNonStaticMethods, .ReflectNonStaticMethods);
SetFlag(typeOption.mReflectConstructors, .ReflectConstructors);
AddTypeOptions(typeOption.mFilter, typeOption.mBfSIMDSetting, typeOption.mBfOptimizationLevel, typeOption.mEmitDebugInfo, andFlags, orFlags, typeOption.mAllocStackTraceDepth, typeOption.mReflectMethodFilter);
}
public void Log(String str)

View file

@ -145,6 +145,34 @@ namespace IDE.ui
typeName.Clear(); typeName.Append(optionsName, "mAllocStackTraceDepth");
AddPropertiesItem(category, "Alloc Stack Trace Depth", typeName);
let (reflectItem, ?) = AddPropertiesItem(category, "Reflect");
typeName.Clear(); typeName.Append(optionsName, "mReflectAlwaysInclude");
AddPropertiesItem(reflectItem, "Always Include", typeName);
typeName.Clear(); typeName.Append(optionsName, "mReflectStaticFields");
AddPropertiesItem(reflectItem, "Static Fields", typeName,
scope String[] { "No", "Yes" });
typeName.Clear(); typeName.Append(optionsName, "mReflectNonStaticFields");
AddPropertiesItem(reflectItem, "Non-Static Fields", typeName,
scope String[] { "No", "Yes" });
typeName.Clear(); typeName.Append(optionsName, "mReflectStaticMethods");
AddPropertiesItem(reflectItem, "Static Methods", typeName,
scope String[] { "No", "Yes" });
typeName.Clear(); typeName.Append(optionsName, "mReflectNonStaticMethods");
AddPropertiesItem(reflectItem, "Non-Static Methods", typeName,
scope String[] { "No", "Yes" });
typeName.Clear(); typeName.Append(optionsName, "mReflectConstructors");
AddPropertiesItem(reflectItem, "Constructors", typeName,
scope String[] { "No", "Yes" });
typeName.Clear(); typeName.Append(optionsName, "mReflectMethodFilter");
AddPropertiesItem(reflectItem, "Method Filter", typeName);
category.Open(true, true);
}