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

Sized array .InitAll elemented initializer

This commit is contained in:
Brian Fiete 2022-08-23 12:07:02 -07:00
parent 05e002d8f5
commit 77a99bdacc
3 changed files with 45 additions and 7 deletions

View file

@ -15,6 +15,8 @@ namespace System
} }
} }
public explicit static operator T[CSize] (Self val) public explicit static operator T[CSize] (Self val)
{ {
return val.mVal; return val.mVal;
@ -109,6 +111,28 @@ namespace System
return Current; return Current;
} }
} }
public static T[CSize] InitAll
{
[Error("Element type has no default constructor")]
get
{
return default;
}
}
} }
extension SizedArray<T, CSize> where T : struct, new
{
public static T[CSize] InitAll
{
get
{
T[CSize] val;
for (int i < CSize)
val[i] = T();
return val;
}
}
}
} }

View file

@ -5708,6 +5708,13 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
} }
if (matchedProp != NULL) if (matchedProp != NULL)
{
if ((matchedProp->mDeclaringType->IsExtension()) && (!prop->mDeclaringType->IsExtension()))
{
// Prefer non-extension
continue;
}
else
{ {
if (mModule->PreFail()) if (mModule->PreFail())
{ {
@ -5720,6 +5727,7 @@ BfTypedValue BfExprEvaluator::LookupField(BfAstNode* targetSrc, BfTypedValue tar
} }
} }
} }
}
matchedProp = prop; matchedProp = prop;
} }
@ -21406,6 +21414,11 @@ void BfExprEvaluator::DoMemberReference(BfMemberReferenceExpression* memberRefEx
return; return;
} }
if (mExpectingType->IsSizedArray())
{
expectingTypeInst = mModule->GetWrappedStructType(mExpectingType);
}
if (expectingTypeInst == NULL) if (expectingTypeInst == NULL)
{ {
if (mModule->PreFail()) if (mModule->PreFail())

View file

@ -941,7 +941,8 @@ void BfModule::CheckMemberNames(BfTypeInstance* typeInst)
MemberRef* prevMemberRef = NULL; MemberRef* prevMemberRef = NULL;
if (memberMap.TryGetValue(memberRef.mName, &prevMemberRef)) if (memberMap.TryGetValue(memberRef.mName, &prevMemberRef))
{ {
//auto& prevMemberRef = itr->second; if ((prevMemberRef->mDeclaringType->IsExtension()) && (!memberRef.mDeclaringType->IsExtension()))
continue;
MemberRef* firstMemberRef = &memberRef; MemberRef* firstMemberRef = &memberRef;
MemberRef* secondMemberRef = prevMemberRef; MemberRef* secondMemberRef = prevMemberRef;