1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00

Autocomplete fixes, debugger fixes

Fixed autocomplete issue typing out base class name
Fixed autocomplete issue typing before a member access (ie: in 'val' for 'val.MethodA()')
Fixed invocation autocomplete with [Friend] access
This commit is contained in:
Brian Fiete 2019-09-04 04:44:00 -07:00
parent 2f01cc14dd
commit 1e04bb1b3e
8 changed files with 53 additions and 7 deletions

View file

@ -1,7 +1,15 @@
using System;
// Zapples
class Mintest2
static
{
}
/*class Mintest2
{
public static void Main()
@ -29,4 +37,4 @@ class Mintest2
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 +
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1;
}
}
}*/

View file

@ -92,11 +92,20 @@ class Bloozer
int mA;
}
class Blurg
{
delegate void() mFuncA;
delegate void() mFuncB;
void TestIt(int a, int b, int c)
{
}
public static void Hey()
{
int a = 123;
@ -113,6 +122,9 @@ class Blurg
PrintF("YoB!\n");
};
blurg.TestIt(1, 2, 3);
blurg.[Friend]TestIt(1, 2, 3);
while (true)
{
blurg.mFuncA();
@ -130,3 +142,4 @@ class CustomAlloc
return null;
}
}

View file

@ -1440,7 +1440,7 @@ bool BfAutoComplete::CheckMemberReference(BfAstNode* target, BfAstNode* dotToken
}
if (memberName != NULL)
isAutocompletingName = IsAutocompleteNode(dotToken, memberName);
isAutocompletingName = IsAutocompleteNode(dotToken, memberName, 0, 1);
if ((IsAutocompleteNode(dotToken, 0, 1)) || (isAutocompletingName))
{
@ -1773,6 +1773,9 @@ void BfAutoComplete::CheckInvocation(BfAstNode* invocationNode, BfTokenNode* ope
target = qualifiedTypeRef->mRight;
else if (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(target))
target = qualifiedNameNode->mRight;
if (auto attributedMember = BfNodeDynCast<BfAttributedIdentifierNode>(target))
target = attributedMember->mIdentifier;
}
bool doCapture = (bfParser->mCursorIdx >= openParen->GetSrcStart());

View file

@ -1106,7 +1106,7 @@ void BfDefBuilder::Visit(BfTypeDeclaration* typeDeclaration)
isAutoCompleteTempType = (mResolvePassData->mAutoComplete != NULL);
int cursorIdx = mResolvePassData->mParser->mCursorIdx;
if (typeDeclaration->Contains(cursorIdx))
if (typeDeclaration->Contains(cursorIdx, 1, 0))
{
// Within bounds
}

View file

@ -12607,7 +12607,9 @@ BfMethodInstance* BfModule::GetDelegateInvokeMethod(BfTypeInstance* typeInstance
void BfModule::CreateDelegateInvokeMethod()
{
// Clear out debug loc - otherwise we'll single step onto the delegate type declaration
mBfIRBuilder->ClearDebugLocation();
//mBfIRBuilder->ClearDebugLocation();
SetIllegalSrcPos();
auto typeInstance = mCurTypeInstance;
auto memberFuncType = mBfIRBuilder->MapMethod(mCurMethodInstance);

View file

@ -99,6 +99,18 @@ DbgSrcFile* DbgSubprogram::GetLineSrcFile(const DbgLineData& lineData)
return inlineRoot->mLineInfo->mContexts[lineData.mCtxIdx].mSrcFile;
}
bool DbgSubprogram::HasValidLines()
{
auto inlineRoot = GetRootInlineParent();
for (int lineIdx = 0; lineIdx < (int)inlineRoot->mLineInfo->mLines.size(); lineIdx++)
{
auto& lineInfo = inlineRoot->mLineInfo->mLines[lineIdx];
if (lineInfo.mColumn >= 0)
return true;
}
return false;
}
void DbgSubprogram::PopulateSubprogram()
{
if (mDeferredInternalsSize == 0)

View file

@ -459,6 +459,7 @@ public:
addr_target GetLineAddr(const DbgLineData& lineData);
DbgSubprogram* GetLineInlinee(const DbgLineData& lineData);
DbgSrcFile* GetLineSrcFile(const DbgLineData& lineData);
bool HasValidLines();
void PopulateSubprogram();
};

View file

@ -2033,6 +2033,13 @@ bool WinDebugger::DoUpdate()
break;
}
if ((dwLineData->mColumn == -1) && (!dwSubprogram->HasValidLines()))
{
// This is a method we don't actually want to be in, it has no valid lines!
SetupStep(StepType_StepOut);
break;
}
if ((dwSubprogram != NULL) && (dwSubprogram->mInlineeInfo != NULL) && (pcAddress == dwSubprogram->mBlock.mLowPC))
{
// We've stepped out, but right into the start of an inlined method, so step out of this inlined method now...