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:
parent
2f01cc14dd
commit
1e04bb1b3e
8 changed files with 53 additions and 7 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}*/
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
||||
|
|
|
@ -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...
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue