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

Method CreateOutVariable

IDEHelper/Compiler/BfModule.cpp:16117–16192  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

16115}
16116
16117BfTypedValue BfModule::CreateOutVariable(BfAstNode* refNode, BfVariableDeclaration* variableDeclaration, BfAstNode* paramNameNode, BfType* variableType, BfTypedValue initValue)
16118{
16119 bool isRef = false;
16120 bool isLet = (variableDeclaration != NULL) && (variableDeclaration->mTypeRef->IsExact<BfLetTypeReference>());
16121 bool isVar = (variableDeclaration == NULL) || (variableDeclaration->mTypeRef->IsExact<BfVarTypeReference>());
16122
16123 if (variableDeclaration != NULL)
16124 {
16125 if (auto varRefTypeReference = BfNodeDynCast<BfVarRefTypeReference>(variableDeclaration->mTypeRef))
16126 {
16127 isRef = true;
16128 isLet = varRefTypeReference->mVarToken->GetToken() == BfToken_Let;
16129 isVar = varRefTypeReference->mVarToken->GetToken() == BfToken_Var;
16130 }
16131 }
16132
16133 BfLocalVariable* localVar = new BfLocalVariable();
16134 if ((variableDeclaration != NULL) && (variableDeclaration->mNameNode != NULL))
16135 {
16136 localVar->mName = variableDeclaration->mNameNode->ToString();
16137 localVar->mNameNode = BfNodeDynCast<BfIdentifierNode>(variableDeclaration->mNameNode);
16138 }
16139 else
16140 {
16141 if (paramNameNode != NULL)
16142 {
16143 localVar->mName = "__";
16144 paramNameNode->ToString(localVar->mName);
16145 localVar->mName += "_";
16146 localVar->mName += StrFormat("%d", mCurMethodState->GetRootMethodState()->mCurLocalVarId);
16147 }
16148 else
16149 localVar->mName = "__" + StrFormat("%d", mCurMethodState->GetRootMethodState()->mCurLocalVarId);
16150 }
16151
16152 localVar->mResolvedType = variableType;
16153 if (isRef)
16154 {
16155 localVar->mResolvedType = CreateRefType(localVar->mResolvedType);
16156 }
16157
16158 PopulateType(variableType);
16159 if (!variableType->IsValuelessType())
16160 localVar->mAddr = CreateAlloca(localVar->mResolvedType);
16161 localVar->mIsReadOnly = isLet;
16162 localVar->mReadFromId = 0;
16163 localVar->mWrittenToId = 0;
16164 localVar->mAssignedKind = BfLocalVarAssignKind_Unconditional;
16165 CheckVariableDef(localVar);
16166 localVar->Init();
16167 AddLocalVariableDef(localVar, true);
16168
16169 BfExprEvaluator exprEvaluator(this);
16170 exprEvaluator.CheckVariableDeclaration(refNode, false, false, false);
16171
16172 auto argValue = BfTypedValue(localVar->mAddr, CreateRefType(variableType, BfRefType::RefKind_Out));
16173
16174 if (isRef)

Callers 1

ResolveArgValueMethod · 0.80

Calls 8

BfTypedValueClass · 0.85
GetTokenMethod · 0.80
GetRootMethodStateMethod · 0.80
ToStringMethod · 0.45
IsValuelessTypeMethod · 0.45
InitMethod · 0.45
CreateStoreMethod · 0.45

Tested by

no test coverage detected