diff --git a/IDEHelper/DbgExprEvaluator.cpp b/IDEHelper/DbgExprEvaluator.cpp index 786604fa..b018f47d 100644 --- a/IDEHelper/DbgExprEvaluator.cpp +++ b/IDEHelper/DbgExprEvaluator.cpp @@ -5934,8 +5934,13 @@ void DbgExprEvaluator::PerformBinaryOperation(ASTREF(BfExpression*)& leftExpress auto& displayStringList = debugVis->mStringViews; DwFormatInfo formatInfo; + formatInfo.mCallStackIdx = mCallStackIdx; formatInfo.mRawString = true; formatInfo.mLanguage = language; + formatInfo.mNamespaceSearch = mNamespaceSearchStr; + formatInfo.mExplicitThis = mExplicitThis; + if (mReferenceId != NULL) + formatInfo.mReferenceId = *mReferenceId; if (!displayEntry->mCondition.empty()) { if (!mDebugger->EvalCondition(debugVis, dbgCompileUnit, useTypedValue, formatInfo, displayEntry->mCondition, dbgVisWildcardCaptures, displayString)) @@ -5943,14 +5948,15 @@ void DbgExprEvaluator::PerformBinaryOperation(ASTREF(BfExpression*)& leftExpress } String displayStr = mDebugger->mDebugManager->mDebugVisualizers->DoStringReplace(displayEntry->mString, dbgVisWildcardCaptures); - mDebugger->ProcessEvalString(dbgCompileUnit, useTypedValue, displayStr, displayString, formatInfo, debugVis, false); + if (mDebugger->ProcessEvalString(dbgCompileUnit, useTypedValue, displayStr, displayString, formatInfo, debugVis, false)) + { + bool isEq = displayString == resultTypedValue->mCharPtr; - bool isEq = displayString == resultTypedValue->mCharPtr; - - auto boolType = mDbgModule->GetPrimitiveType(DbgType_Bool, GetLanguage()); - mResult.mType = boolType; - mResult.mBool = isEq == ((binaryOp == BfBinaryOp_Equality) || (binaryOp == BfBinaryOp_StrictEquality)); - return; + auto boolType = mDbgModule->GetPrimitiveType(DbgType_Bool, GetLanguage()); + mResult.mType = boolType; + mResult.mBool = isEq == ((binaryOp == BfBinaryOp_Equality) || (binaryOp == BfBinaryOp_StrictEquality)); + return; + } } } } diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index 7783c148..312d8530 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -6751,8 +6751,10 @@ String WinDebugger::ReadString(DbgTypeCode charType, intptr addr, bool isLocalAd return retVal; } -void WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength) +bool WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength) { + bool success = true; + for (int i = 0; i < (int)evalStr.length(); i++) { char c = evalStr[i]; @@ -6794,22 +6796,31 @@ void WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValu if ((formatInfo.mRawString) && (limitLength)) { displayString = result; - return; + return success; } - int crPos = result.IndexOf('\n'); - if (crPos != -1) - displayString += result.Substring(0, crPos); - else + if (displayStrFormatInfo.mRawString) + { displayString += result; + } + else + { + int crPos = result.IndexOf('\n'); + if (crPos != -1) + displayString += result.Substring(0, crPos); + else + displayString += result; + } } else if (debugVis != NULL) { + success = false; displayString += ""; DbgVisFailed(debugVis, evalString, errors); } else { + success = false; displayString += ""; } } @@ -6830,6 +6841,8 @@ void WinDebugger::ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValu displayString += c; } + + return success; } static bool IsNormalChar(uint32 c) diff --git a/IDEHelper/WinDebugger.h b/IDEHelper/WinDebugger.h index 5aab5afc..60882d75 100644 --- a/IDEHelper/WinDebugger.h +++ b/IDEHelper/WinDebugger.h @@ -516,7 +516,7 @@ public: DbgTypedValue EvaluateInContext(DbgCompileUnit* dbgCompileUnit, const DbgTypedValue& contextTypedValue, const StringImpl& subExpr, DwFormatInfo* formatInfo = NULL, String* outReferenceId = NULL, String* outErrors = NULL); bool EvalCondition(DebugVisualizerEntry* debugVis, DbgCompileUnit* dbgCompileUnit, DbgTypedValue typedVal, DwFormatInfo& formatInfo, const StringImpl& condition, const Array& dbgVisWildcardCaptures, String& errorStr); DwDisplayInfo* GetDisplayInfo(const StringImpl& referenceId); - void ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength); + bool ProcessEvalString(DbgCompileUnit* dbgCompileUnit, DbgTypedValue useTypedValue, String& evalStr, String& displayString, DwFormatInfo& formatInfo, DebugVisualizerEntry* debugVis, bool limitLength); String ReadString(DbgTypeCode charType, intptr addr, bool isLocalAddr, intptr maxLength, DwFormatInfo& formatInfo, bool wantStringView); String DbgTypedValueToString(const DbgTypedValue& typedValue, const StringImpl& expr, DwFormatInfo& formatFlags, DbgExprEvaluator* optEvaluator, bool fullPrecision = false); bool ShouldShowStaticMember(DbgType* dbgType, DbgVariable* member);