MCPcopy Create free account
hub / github.com/beefytech/Beef / InitializedSizedArray

Method InitializedSizedArray

IDEHelper/Compiler/BfExprEvaluator.cpp:21519–21886  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21517}
21518
21519void BfExprEvaluator::InitializedSizedArray(BfSizedArrayType* arrayType, BfTokenNode* openToken, const BfSizedArray<BfExpression*>& valueExprs, const BfSizedArray<BfTokenNode*>& commas, BfTokenNode* closeToken, BfTypedValue* receivingValue)
21520{
21521 struct InitValue
21522 {
21523 BfTypedValue mValue;
21524 bool mIsUninitialized;
21525 bool mIsDefaultInitializer;
21526 bool mIsDeferred;
21527
21528 InitValue()
21529 {
21530 mIsUninitialized = false;
21531 mIsDefaultInitializer = false;
21532 mIsDeferred = false;
21533 }
21534 };
21535
21536 SizedArray<InitValue, 8> values;
21537
21538 {
21539 //bool hasFailed = false;
21540 HashSet<int> failedAt;
21541 bool isAllConst = true;
21542
21543 //bool endUninitialzied = false;
21544
21545 int depth = 0;
21546
21547 std::function<void(BfSizedArrayType*, BfTokenNode* openToken, const BfSizedArray<BfExpression*>&, const BfSizedArray<BfTokenNode*>&, BfTokenNode*, bool)>
21548 _GetValues = [&](BfSizedArrayType* checkArrayType, BfTokenNode* openToken, const BfSizedArray<BfExpression*>& valueExprs, const BfSizedArray<BfTokenNode*>& commas, BfTokenNode* closeToken, bool ignore)
21549 {
21550 int64 initCountDiff = (int)valueExprs.size() - checkArrayType->mElementCount;
21551 if ((initCountDiff != 0) && (!valueExprs.IsEmpty()) && (!failedAt.Contains(depth)))
21552 {
21553 if (checkArrayType->mElementCount == -1)
21554 {
21555// mModule->Fail("Initializers not supported for unknown-sized arrays", valueExprs[0]);
21556// failedAt.Add(depth);
21557 }
21558 else if (initCountDiff > 0)
21559 {
21560 mModule->Fail(StrFormat("Too many initializers, expected %d fewer", initCountDiff), valueExprs[BF_MAX((int)checkArrayType->mElementCount, 0)]);
21561 failedAt.Add(depth);
21562 }
21563 else
21564 {
21565 // If it ends with ", ?) or ",)" then allow unsized
21566 if (((valueExprs.size() == 0) || (BfNodeDynCast<BfUninitializedExpression>(valueExprs.back()) == NULL)) &&
21567 ((commas.size() < valueExprs.size()) || (valueExprs.size() == 0)))
21568 {
21569 BfAstNode* refNode = closeToken;
21570 if ((refNode == NULL) && (mModule->mParentNodeEntry != NULL))
21571 refNode = mModule->mParentNodeEntry->mNode;
21572 BF_ASSERT(refNode != NULL);
21573 mModule->Fail(StrFormat("Too few initializer, expected %d more", -initCountDiff), refNode);
21574 failedAt.Add(depth);
21575 }
21576 }

Callers

nothing calls this directly

Calls 15

BfTypedValueClass · 0.85
IsAddrMethod · 0.80
CreateIndexedValueMethod · 0.80
AssertErrorStateMethod · 0.80
LoadOrAggregateValueMethod · 0.80
IsOptimizedMethod · 0.80
GetConstValueMethod · 0.80
CreateConstAggMethod · 0.80
MapTypeMethod · 0.80
sizeMethod · 0.45
IsEmptyMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected