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

Method PopulateDeferrredTupleAssignData

IDEHelper/Compiler/BfExprEvaluator.cpp:20751–20870  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

20749}
20750
20751void BfExprEvaluator::PopulateDeferrredTupleAssignData(BfTupleExpression* tupleExpr, DeferredTupleAssignData& deferredTupleAssignData)
20752{
20753 BfTypeVector fieldTypes;
20754 Array<String> fieldNames;
20755
20756 // We need to evaluate each LHS tuple component in a separate BfExprEvaluator because each one
20757 // could be a property and the 'mPropDef' target info is tied to a single evaluator
20758 for (int valueIdx = 0; valueIdx < (int)tupleExpr->mValues.size(); valueIdx++)
20759 {
20760 DeferredTupleAssignData::Entry entry;
20761 entry.mExprEvaluator = NULL;
20762 entry.mInnerTuple = NULL;
20763 entry.mVarType = NULL;
20764 entry.mVarNameNode = NULL;
20765
20766 BfExpression* valueExpr = tupleExpr->mValues[valueIdx];
20767 entry.mExpr = valueExpr;
20768 BfType* fieldType = NULL;
20769 BfType* resultType = NULL;
20770 if (auto innerTupleExpr = BfNodeDynCast<BfTupleExpression>(valueExpr))
20771 {
20772 entry.mInnerTuple = new DeferredTupleAssignData();
20773 PopulateDeferrredTupleAssignData(innerTupleExpr, *entry.mInnerTuple);
20774 resultType = entry.mInnerTuple->mTupleType;
20775 }
20776 else
20777 {
20778 BfExprEvaluator* exprEvaluator = new BfExprEvaluator(mModule);
20779 entry.mExprEvaluator = exprEvaluator;
20780
20781 if (valueExpr->IsA<BfUninitializedExpression>())
20782 {
20783 resultType = mModule->GetPrimitiveType(BfTypeCode_None);
20784 }
20785
20786 if (auto varDecl = BfNodeDynCast<BfVariableDeclaration>(valueExpr))
20787 {
20788 if ((varDecl->mTypeRef->IsA<BfLetTypeReference>()) || (varDecl->mTypeRef->IsA<BfVarTypeReference>()))
20789 {
20790 resultType = mModule->GetPrimitiveType(BfTypeCode_Var);
20791 }
20792 else
20793 {
20794 resultType = ResolveTypeRef(varDecl->mTypeRef);
20795 if (resultType == NULL)
20796 resultType = mModule->GetPrimitiveType(BfTypeCode_Var);
20797 }
20798 entry.mVarType = resultType;
20799 }
20800
20801 if (auto binOpExpr = BfNodeDynCast<BfBinaryOperatorExpression>(valueExpr))
20802 {
20803 if (binOpExpr->mOp == BfBinaryOp_Multiply)
20804 {
20805 SetAndRestoreValue<bool> prevIgnoreError(mModule->mIgnoreErrors, true);
20806 auto resolvedType = mModule->ResolveTypeRef(binOpExpr->mLeft, NULL);
20807 prevIgnoreError.Restore();
20808 if (resolvedType != NULL)

Callers

nothing calls this directly

Calls 15

CreatePointerTypeMethod · 0.80
CreateTupleTypeMethod · 0.80
sizeMethod · 0.45
GetPrimitiveTypeMethod · 0.45
ResolveTypeRefMethod · 0.45
VisitChildMethod · 0.45
GetDefaultTypedValueMethod · 0.45
ToTypeInstanceMethod · 0.45
IsPointerMethod · 0.45
GetMethodInstanceMethod · 0.45
GetParamTypeMethod · 0.45
IsRefMethod · 0.45

Tested by

no test coverage detected