mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 12:02:21 +02:00
Fixed recursive debug value alias issue
This commit is contained in:
parent
cb037979e9
commit
28a03fcc4b
1 changed files with 36 additions and 0 deletions
|
@ -16604,10 +16604,13 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
||||||
|
|
||||||
if ((wantsDIData) && (!mModule->mBfIRBuilder->mIgnoreWrites))
|
if ((wantsDIData) && (!mModule->mBfIRBuilder->mIgnoreWrites))
|
||||||
{
|
{
|
||||||
|
bool handled = false;
|
||||||
|
|
||||||
mModule->UpdateSrcPos(methodDeclaration->mNameNode);
|
mModule->UpdateSrcPos(methodDeclaration->mNameNode);
|
||||||
if (hasConstValue)
|
if (hasConstValue)
|
||||||
{
|
{
|
||||||
// Already handled
|
// Already handled
|
||||||
|
handled = true;
|
||||||
}
|
}
|
||||||
else if (newLocalVar->mIsSplat)
|
else if (newLocalVar->mIsSplat)
|
||||||
{
|
{
|
||||||
|
@ -16625,6 +16628,33 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
||||||
if (newLocalVar->mValue != localVar->mAddr)
|
if (newLocalVar->mValue != localVar->mAddr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
bool isDupName = false;
|
||||||
|
for (auto param : methodDef->mParams)
|
||||||
|
{
|
||||||
|
if (param->mName == localVar->mName)
|
||||||
|
{
|
||||||
|
isDupName = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDupName)
|
||||||
|
{
|
||||||
|
auto splatAgg = mModule->AggregateSplat(BfTypedValue(newLocalVar->mValue, newLocalVar->mResolvedType, BfTypedValueKind_SplatHead));
|
||||||
|
|
||||||
|
// Don't allow alias if one of our args has the same name
|
||||||
|
newLocalVar->mIsSplat = false;
|
||||||
|
newLocalVar->mValue = BfIRValue();
|
||||||
|
|
||||||
|
if (splatAgg.IsAddr())
|
||||||
|
newLocalVar->mAddr = splatAgg.mValue;
|
||||||
|
else
|
||||||
|
newLocalVar->mValue = splatAgg.mValue;
|
||||||
|
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
String name = "$";
|
String name = "$";
|
||||||
name += newLocalVar->mName;
|
name += newLocalVar->mName;
|
||||||
name += "$alias$";
|
name += "$alias$";
|
||||||
|
@ -16641,6 +16671,7 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
||||||
name, mModule->mCurFilePosition.mFileInstance->mDIFile, mModule->mCurFilePosition.mCurLine, diType);
|
name, mModule->mCurFilePosition.mFileInstance->mDIFile, mModule->mCurFilePosition.mCurLine, diType);
|
||||||
mModule->mBfIRBuilder->DbgInsertValueIntrinsic(mModule->mBfIRBuilder->CreateConstNull(), diVariable);
|
mModule->mBfIRBuilder->DbgInsertValueIntrinsic(mModule->mBfIRBuilder->CreateConstNull(), diVariable);
|
||||||
|
|
||||||
|
handled = true;
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -16648,6 +16679,11 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo
|
||||||
checkMethodState = checkMethodState->mPrevMethodState;
|
checkMethodState = checkMethodState->mPrevMethodState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (handled)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
else if (mModule->IsTargetingBeefBackend())
|
else if (mModule->IsTargetingBeefBackend())
|
||||||
{
|
{
|
||||||
mModule->UpdateSrcPos(methodDeclaration->mNameNode);
|
mModule->UpdateSrcPos(methodDeclaration->mNameNode);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue