| 6102 | } |
| 6103 | |
| 6104 | String WinDebugger::GetLinkedListItems(DbgCompileUnit* dbgCompileUnit, DebugVisualizerEntry* debugVis, addr_target endNodePtr, DbgType* valueType, DbgTypedValue& curNode, int& count, String* outContinuationData) |
| 6105 | { |
| 6106 | DbgEvaluationContext nextEvaluationContext(this, dbgCompileUnit, debugVis->mNextPointer); |
| 6107 | DbgEvaluationContext valueEvaluationContext(this, dbgCompileUnit, debugVis->mValuePointer); |
| 6108 | |
| 6109 | String addrs; |
| 6110 | |
| 6111 | bool checkLeft = true; |
| 6112 | |
| 6113 | int mapIdx; |
| 6114 | for (mapIdx = 0; mapIdx < count; mapIdx++) |
| 6115 | { |
| 6116 | if (curNode.mPtr == endNodePtr) |
| 6117 | break; |
| 6118 | DbgTypedValue val = valueEvaluationContext.EvaluateInContext(curNode); |
| 6119 | if (!val) |
| 6120 | break; |
| 6121 | if (val.mPtr == 0) |
| 6122 | break; |
| 6123 | |
| 6124 | if (valueType == NULL) |
| 6125 | { |
| 6126 | String typeAddr = val.mType->ToStringRaw(); |
| 6127 | // RPad |
| 6128 | typeAddr.Append(' ', sizeof(addr_target)*2 - typeAddr.length()); |
| 6129 | addrs += typeAddr; |
| 6130 | } |
| 6131 | |
| 6132 | String addr = EncodeDataPtr(val.mPtr, false); |
| 6133 | addrs += addr; |
| 6134 | |
| 6135 | curNode = nextEvaluationContext.EvaluateInContext(curNode); |
| 6136 | } |
| 6137 | count = mapIdx; |
| 6138 | |
| 6139 | if (outContinuationData != NULL) |
| 6140 | { |
| 6141 | *outContinuationData += EncodeDataPtr(debugVis, false) + EncodeDataPtr(endNodePtr, false) + EncodeDataPtr(valueType, false) + |
| 6142 | EncodeDataPtr(curNode.mType, false) + EncodeDataPtr(curNode.mPtr, false); |
| 6143 | } |
| 6144 | |
| 6145 | return addrs; |
| 6146 | } |
| 6147 | |
| 6148 | String WinDebugger::GetDictionaryItems(DbgCompileUnit* dbgCompileUnit, DebugVisualizerEntry* debugVis, DbgTypedValue dictValue, int bucketIdx, int nodeIdx, int& count, String* outContinuationData) |
| 6149 | { |
nothing calls this directly
no test coverage detected