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

Method UpdateSrcPos

IDEHelper/Compiler/BfModule.cpp:2739–2850  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2737}
2738
2739void BfModule::UpdateSrcPos(BfAstNode* astNode, BfSrcPosFlags flags, int debugLocOffset)
2740{
2741 // We set force to true when we MUST get the line position set (for navigation purposes, for example)
2742 if (((mBfIRBuilder->mIgnoreWrites)) && ((flags & BfSrcPosFlag_Force) == 0))
2743 return;
2744
2745 BF_ASSERT((!mAwaitingInitFinish) || (mBfIRBuilder->mIgnoreWrites));
2746
2747 if (astNode == NULL)
2748 return;
2749
2750 auto bfParser = astNode->GetSourceData()->ToParserData();
2751 if (bfParser == NULL)
2752 return;
2753 if ((mCurFilePosition.mFileInstance == NULL) || (mCurFilePosition.mFileInstance->mParser != bfParser))
2754 {
2755 if (mCurFilePosition.mFileInstance != NULL)
2756 {
2757 BF_ASSERT(mFileInstanceMap.GetCount() != 0);
2758 mCurFilePosition.mFileInstance->mPrevPosition = mCurFilePosition;
2759 }
2760
2761 auto bfFileInstance = GetFileFromNode(astNode);
2762 if (bfFileInstance->mPrevPosition.mFileInstance != NULL)
2763 {
2764 mCurFilePosition = bfFileInstance->mPrevPosition;
2765 }
2766 else
2767 {
2768 mCurFilePosition.mFileInstance = bfFileInstance;
2769 mCurFilePosition.mCurLine = 0;
2770 mCurFilePosition.mCurColumn = 0;
2771 mCurFilePosition.mCurSrcPos = 0;
2772 }
2773 }
2774
2775 int srcPos = astNode->GetSrcStart() + debugLocOffset;
2776
2777 BF_ASSERT(srcPos < bfParser->mSrcLength);
2778
2779 auto* jumpEntry = bfParser->mJumpTable + (srcPos / PARSER_JUMPTABLE_DIVIDE);
2780 if (jumpEntry->mCharIdx > srcPos)
2781 jumpEntry--;
2782 mCurFilePosition.mCurLine = jumpEntry->mLineNum;
2783 mCurFilePosition.mCurSrcPos = jumpEntry->mCharIdx;
2784 mCurFilePosition.mCurColumn = 0;
2785
2786 while (mCurFilePosition.mCurSrcPos < srcPos)
2787 {
2788 if (bfParser->mSrc[mCurFilePosition.mCurSrcPos] == '\n')
2789 {
2790 mCurFilePosition.mCurLine++;
2791 mCurFilePosition.mCurColumn = 0;
2792 }
2793 else
2794 {
2795 mCurFilePosition.mCurColumn++;
2796 }

Callers 4

VisitMethod · 0.80
EmitTestMethodMethod · 0.80
InjectMixinMethod · 0.80

Calls 10

BfIRMDNodeClass · 0.85
GetSourceDataMethod · 0.80
DbgHasLineInfoMethod · 0.80
DbgCreateLexicalBlockMethod · 0.80
ClearDebugLocationMethod · 0.80
CreateStatementStartMethod · 0.80
ToParserDataMethod · 0.45
GetCountMethod · 0.45
GetSrcStartMethod · 0.45

Tested by

no test coverage detected