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

Method SetupIRMethod

IDEHelper/Compiler/BfModule.cpp:18507–18737  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

18505}
18506
18507void BfModule::SetupIRMethod(BfMethodInstance* methodInstance, BfIRFunction func, bool isInlined)
18508{
18509 BfMethodDef* methodDef = NULL;
18510 if (methodInstance != NULL)
18511 methodDef = methodInstance->mMethodDef;
18512
18513 if (!func)
18514 return;
18515
18516 if (mCompiler->mOptions.mNoFramePointerElim)
18517 mBfIRBuilder->Func_AddAttribute(func, -1, BFIRAttribute_NoFramePointerElim);
18518 mBfIRBuilder->Func_AddAttribute(func, -1, BFIRAttribute_NoUnwind);
18519 if (mSystem->mPtrSize == 8) // We need unwind info for debugging
18520 mBfIRBuilder->Func_AddAttribute(func, -1, BFIRAttribute_UWTable);
18521
18522 if (methodInstance == NULL)
18523 return;
18524
18525 if (methodInstance->mReturnType->IsVar())
18526 mBfIRBuilder->Func_AddAttribute(func, -1, BfIRAttribute_VarRet);
18527 if (methodDef->mImportKind == BfImportKind_Export)
18528 {
18529 if (methodDef->mDeclaringType->mProject->mTargetType != BfTargetType_BeefLib_StaticLib)
18530 mBfIRBuilder->Func_AddAttribute(func, -1, BFIRAttribute_DllExport);
18531 }
18532 if (methodDef->mIsNoReturn)
18533 mBfIRBuilder->Func_AddAttribute(func, -1, BfIRAttribute_NoReturn);
18534 auto callingConv = GetIRCallingConvention(methodInstance);
18535 if (callingConv != BfIRCallingConv_CDecl)
18536 mBfIRBuilder->SetFuncCallingConv(func, callingConv);
18537
18538 if (isInlined)
18539 {
18540 mBfIRBuilder->Func_AddAttribute(func, -1, BFIRAttribute_AlwaysInline);
18541 }
18542
18543 int argIdx = 0;
18544 int paramIdx = 0;
18545
18546 if ((methodInstance->HasThis()) && (!methodDef->mHasExplicitThis))
18547 paramIdx = -1;
18548
18549 int argCount = methodInstance->GetIRFunctionParamCount(this);
18550
18551 while (argIdx < argCount)
18552 {
18553 if ((!mIsComptimeModule) && (argIdx == methodInstance->GetStructRetIdx()))
18554 {
18555 mBfIRBuilder->Func_AddAttribute(func, argIdx + 1, BfIRAttribute_NoAlias);
18556 mBfIRBuilder->Func_AddAttribute(func, argIdx + 1, BfIRAttribute_StructRet);
18557 argIdx++;
18558 continue;
18559 }
18560
18561 bool isThis = (paramIdx == -1) || ((methodDef->mHasExplicitThis) && (paramIdx == 0));
18562 while ((!isThis) && (methodInstance->IsParamSkipped(paramIdx)))
18563 paramIdx++;
18564

Callers 3

CreateVDataMethod · 0.80
GetLambdaInstanceMethod · 0.80

Calls 15

Func_AddAttributeMethod · 0.80
SetFuncCallingConvMethod · 0.80
IsParamSkippedMethod · 0.80
AllowsSplattingMethod · 0.80
Func_SetParamNameMethod · 0.80
GetUnionInnerTypeMethod · 0.80
GetFieldDefMethod · 0.80
GetResolvedTypeMethod · 0.80
GetCaptureDataCountMethod · 0.80

Tested by

no test coverage detected