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

Method AssignDeferrredTupleAssignData

IDEHelper/Compiler/BfExprEvaluator.cpp:20872–20918  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20870}
20871
20872void BfExprEvaluator::AssignDeferrredTupleAssignData(BfAssignmentExpression* assignExpr, DeferredTupleAssignData& deferredTupleAssignData, BfTypedValue rightValue)
20873{
20874 BF_ASSERT(rightValue.mType->IsTuple());
20875 auto tupleType = (BfTypeInstance*)rightValue.mType;
20876 for (int valueIdx = 0; valueIdx < (int)deferredTupleAssignData.mChildren.size(); valueIdx++)
20877 {
20878 auto& child = deferredTupleAssignData.mChildren[valueIdx];
20879 BfFieldInstance* fieldInstance = &tupleType->mFieldInstances[valueIdx];
20880 BfTypedValue elementValue;
20881 if (fieldInstance->mDataIdx >= 0)
20882 {
20883 rightValue = mModule->LoadOrAggregateValue(rightValue);
20884 mModule->mBfIRBuilder->PopulateType(rightValue.mType);
20885 auto extractedValue = mModule->mBfIRBuilder->CreateExtractValue(rightValue.mValue, fieldInstance->mDataIdx);
20886 elementValue = BfTypedValue(extractedValue, fieldInstance->GetResolvedType());
20887 if (child.mInnerTuple != NULL)
20888 {
20889 AssignDeferrredTupleAssignData(assignExpr, *child.mInnerTuple, elementValue);
20890 delete child.mInnerTuple;
20891 child.mInnerTuple = NULL;
20892 }
20893 else
20894 {
20895 if (child.mExprEvaluator->HasResult())
20896 {
20897 child.mExprEvaluator->mBfEvalExprFlags = (BfEvalExprFlags)(child.mExprEvaluator->mBfEvalExprFlags | BfEvalExprFlags_NoAutoComplete);
20898 child.mExprEvaluator->PerformAssignment(assignExpr, true, elementValue);
20899 }
20900 }
20901 }
20902
20903 if (child.mVarType != NULL)
20904 {
20905 if (auto varDecl = BfNodeDynCast<BfVariableDeclaration>(child.mExpr))
20906 {
20907 if (!elementValue)
20908 elementValue = mModule->GetDefaultTypedValue(fieldInstance->GetResolvedType());
20909 mModule->HandleVariableDeclaration(varDecl, elementValue);
20910 }
20911 else
20912 {
20913 // This handles the 'a*b' disambiguated variable decl case
20914 mModule->HandleVariableDeclaration(child.mVarType, child.mVarNameNode, elementValue);
20915 }
20916 }
20917 }
20918}
20919
20920void BfExprEvaluator::DoTupleAssignment(BfAssignmentExpression* assignExpr)
20921{

Callers

nothing calls this directly

Calls 11

BfTypedValueClass · 0.85
LoadOrAggregateValueMethod · 0.80
CreateExtractValueMethod · 0.80
GetResolvedTypeMethod · 0.80
HasResultMethod · 0.80
PerformAssignmentMethod · 0.80
IsTupleMethod · 0.45
sizeMethod · 0.45
PopulateTypeMethod · 0.45
GetDefaultTypedValueMethod · 0.45

Tested by

no test coverage detected