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

Method RemoveRef

IDEHelper/Compiler/BfModule.cpp:13429–13461  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13427}
13428
13429BfTypedValue BfModule::RemoveRef(BfTypedValue typedValue, bool makeInReadOnly)
13430{
13431 if ((typedValue.mType != NULL) && (typedValue.mType->IsRef()))
13432 {
13433 auto refType = (BfRefType*)typedValue.mType;
13434
13435 auto elementType = typedValue.mType->GetUnderlyingType();
13436 if (typedValue.IsAddr())
13437 {
13438 if (elementType->IsValuelessType())
13439 {
13440 BF_ASSERT(!typedValue.mValue);
13441 typedValue = BfTypedValue(typedValue.mValue, elementType, true);
13442 }
13443 else
13444 typedValue = BfTypedValue(mBfIRBuilder->CreateAlignedLoad(typedValue.mValue, elementType->mAlign), elementType, true);
13445 }
13446 else
13447 typedValue = BfTypedValue(typedValue.mValue, elementType, true);
13448
13449 if (typedValue.mType->IsValuelessType())
13450 {
13451 BF_ASSERT(typedValue.mValue.IsFake());
13452 }
13453
13454 if ((refType->mRefKind == BfRefType::RefKind_In) && (makeInReadOnly))
13455 {
13456 if (typedValue.mKind == BfTypedValueKind_Addr)
13457 typedValue.mKind = BfTypedValueKind_ReadOnlyAddr;
13458 }
13459 }
13460 return typedValue;
13461}
13462
13463BfTypedValue BfModule::SanitizeAddr(BfTypedValue typedValue)
13464{

Callers 7

CreateCallMethod · 0.45
MatchMethodMethod · 0.45
VisitMethod · 0.45
DoImplicitArgCaptureMethod · 0.45
InjectMixinMethod · 0.45
PerformAssignmentMethod · 0.45

Calls 7

BfTypedValueClass · 0.85
IsAddrMethod · 0.80
IsRefMethod · 0.45
GetUnderlyingTypeMethod · 0.45
IsValuelessTypeMethod · 0.45
CreateAlignedLoadMethod · 0.45
IsFakeMethod · 0.45

Tested by

no test coverage detected