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

Method GetAutoLocalsInBlock

IDEHelper/DebugTarget.cpp:727–790  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

725}
726
727bool DebugTarget::GetAutoLocalsInBlock(Array<String>& outLocals, DbgSubprogram* dwSubprogram, DbgBlock* dwBlock, WdStackFrame* stackFrame, DbgLineData* dwLineData)
728{
729 std::function<void(const StringImpl& localName)> _AddLocal = [&](const StringImpl& localName)
730 {
731 if (!outLocals.Contains(localName))
732 outLocals.Add(localName);
733 else
734 _AddLocal(String("@") + localName);
735 };
736
737 addr_target pc = stackFrame->GetSourcePC();
738 if (dwSubprogram != NULL)
739 {
740 auto dwarf = dwSubprogram->mCompileUnit->mDbgModule;
741 if (dwBlock->mLowPC == -1)
742 {
743 //Debug ranges
744 addr_target* rangeData = (addr_target*)(dwarf->mDebugRangesData + dwBlock->mHighPC);
745 while (true)
746 {
747 addr_target lowPC = *(rangeData++);
748 if (lowPC == 0)
749 return false;
750 addr_target highPC = *(rangeData++);
751 // Matches?
752 if ((pc >= lowPC) && (pc < highPC))
753 break;
754 }
755 }
756 else if ((pc < dwBlock->mLowPC) || (pc >= dwBlock->mHighPC))
757 return false;
758 }
759
760 for (auto subBlock : dwBlock->mSubBlocks)
761 {
762 GetAutoLocalsInBlock(outLocals, dwSubprogram, subBlock, stackFrame, dwLineData);
763 }
764
765 if (dwBlock == &dwSubprogram->mBlock)
766 {
767 for (auto variable : dwSubprogram->mParams)
768 {
769 if ((variable->mName != NULL) &&
770 (variable->mName[0] != '$') &&
771 ((variable->mLocationData != NULL) || (variable->mIsConst)))
772 _AddLocal(variable->mName);
773 }
774 }
775
776 for (auto variable : dwBlock->mVariables)
777 {
778 if (variable->mRangeStart != 0)
779 {
780 auto curPC = stackFrame->GetSourcePC();
781 if ((curPC < variable->mRangeStart) || (curPC >= variable->mRangeStart + variable->mRangeLen))
782 continue;
783 }
784

Callers 1

GetAutoLocalsMethod · 0.80

Calls 4

StringClass · 0.85
GetSourcePCMethod · 0.80
ContainsMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected