diff --git a/BeefySysLib/util/String.cpp b/BeefySysLib/util/String.cpp index 43c759fe..63e2e501 100644 --- a/BeefySysLib/util/String.cpp +++ b/BeefySysLib/util/String.cpp @@ -153,7 +153,7 @@ void StringView::ToString(StringImpl& str) const StringSplitEnumerator StringView::Split(char c) { - return StringSplitEnumerator(mPtr, mLength, c, 0x7FFFFFFF, false); + return StringSplitEnumerator(mPtr, (int)mLength, c, 0x7FFFFFFF, false); } ////////////////////////////////////////////////////////////////////////// @@ -314,11 +314,11 @@ bool StringImpl::EqualsHelper(const char * a, const char * b, intptr length) return strncmp(a, b, length) == 0; } -bool StringImpl::EqualsIgnoreCaseHelper(const char * a, const char * b, int length) +bool StringImpl::EqualsIgnoreCaseHelper(const char * a, const char * b, intptr length) { const char* curA = a; const char* curB = b; - int curLength = length; + intptr curLength = length; /*Contract.Requires(strA != null); Contract.Requires(strB != null); @@ -627,11 +627,11 @@ intptr StringImpl::Compare(const StringImpl & strA, intptr indexA, const StringI void StringImpl::ReplaceLargerHelper(const StringView& find, const StringView& replace) { - Array replaceEntries; + Array replaceEntries; - int_strsize moveOffset = replace.mLength - find.mLength; + intptr moveOffset = replace.mLength - find.mLength; - for (int startIdx = 0; startIdx < mLength - find.mLength; startIdx++) + for (intptr startIdx = 0; startIdx < mLength - find.mLength; startIdx++) { if (EqualsHelper(GetPtr() + startIdx, find.mPtr, find.mLength)) { @@ -684,8 +684,8 @@ void StringImpl::Replace(const StringView& find, const StringView & replace) auto findPtr = find.mPtr; auto replacePtr = replace.mPtr; - int_strsize inIdx = 0; - int_strsize outIdx = 0; + intptr inIdx = 0; + intptr outIdx = 0; while (inIdx < mLength - find.mLength) { @@ -721,7 +721,7 @@ void StringImpl::Replace(const StringView& find, const StringView & replace) } ptr[outIdx] = 0; - mLength = outIdx; + mLength = (int_strsize)outIdx; } void StringImpl::TrimEnd() diff --git a/BeefySysLib/util/String.h b/BeefySysLib/util/String.h index bf436461..e51d6fc8 100644 --- a/BeefySysLib/util/String.h +++ b/BeefySysLib/util/String.h @@ -18,7 +18,7 @@ class StringView { public: const char* mPtr; - int mLength; + intptr mLength; public: struct iterator @@ -270,12 +270,12 @@ public: mLength -= (int)length; } - void RemoveToEnd(int startIdx) + void RemoveToEnd(intptr startIdx) { RemoveFromEnd(mLength - startIdx); } - void RemoveFromEnd(int length) + void RemoveFromEnd(intptr length) { mLength -= length; } @@ -530,17 +530,17 @@ protected: void Realloc(intptr newSize, bool copyStr = true); void Realloc(char* newPtr, intptr newSize); static bool EqualsHelper(const char* a, const char* b, intptr length); - static bool EqualsIgnoreCaseHelper(const char* a, const char* b, int length); + static bool EqualsIgnoreCaseHelper(const char* a, const char* b, intptr length); static int CompareOrdinalIgnoreCaseHelper(const StringImpl& strA, const StringImpl& strB); static intptr CompareOrdinalIgnoreCaseHelper(const char* strA, intptr lengthA, const char* strB, intptr lengthB); static intptr CompareOrdinalIgnoreCaseHelper(const StringImpl& strA, intptr indexA, intptr lengthA, const StringImpl& strB, intptr indexB, intptr lengthB); static intptr CompareOrdinalHelper(const char* strA, intptr lengthA, const char* strB, intptr lengthB); static intptr CompareOrdinalHelper(const StringImpl& strA, intptr indexA, intptr lengthA, const StringImpl& strB, intptr indexB, intptr lengthB); - void Init(const char* charPtr, int_strsize count) + void Init(const char* charPtr, intptr count) { int_strsize internalSize = (int_strsize)(sizeof(StringImpl) - offsetof(StringImpl, mPtr)); - int_strsize allocSize = count + 1; + int_strsize allocSize = (int_strsize)count + 1; if (allocSize <= internalSize) { @@ -549,7 +549,7 @@ protected: memcpy(ptr, charPtr, count); ptr[count] = 0; mAllocSizeAndFlags = internalSize; - this->mLength = count; + this->mLength = (int_strsize)count; } else { @@ -559,7 +559,7 @@ protected: ptr[count] = 0; this->mPtr = ptr; mAllocSizeAndFlags = allocSize | DynAllocFlag | StrPtrFlag; - this->mLength = count; + this->mLength = (int_strsize)count; } } diff --git a/IDE/src/Debugger/DebugManager.bf b/IDE/src/Debugger/DebugManager.bf index be2738aa..89838d30 100644 --- a/IDE/src/Debugger/DebugManager.bf +++ b/IDE/src/Debugger/DebugManager.bf @@ -203,7 +203,7 @@ namespace IDE.Debugger static extern void Debugger_EvaluateContinueKeep(); [CallingConvention(.Stdcall),CLink] - static extern char8* Debugger_Evaluate(char8* expr, int32 callStackIdx, int32 cursorPos, int32 language, EvalExpressionFlags expressionFlags); + static extern StringView Debugger_Evaluate(char8* expr, int32 callStackIdx, int32 cursorPos, int32 language, EvalExpressionFlags expressionFlags); [CallingConvention(.Stdcall),CLink] static extern char8* Debugger_EvaluateToAddress(char8* expr, int32 callStackIdx, int32 cursorPos); @@ -760,9 +760,7 @@ namespace IDE.Debugger // AllowAssignment, allowCalls public void Evaluate(String expr, String outVal, int cursorPos = -1, int language = -1, EvalExpressionFlags expressionFlags = EvalExpressionFlags.None) { - char8* result = Debugger_Evaluate(expr, (expressionFlags.HasFlag(.DeselectCallStackIdx)) ? -1 : mActiveCallStackIdx, (int32)cursorPos, (int32)language, expressionFlags); - if (result == null) - return; + StringView result = Debugger_Evaluate(expr, (expressionFlags.HasFlag(.DeselectCallStackIdx)) ? -1 : mActiveCallStackIdx, (int32)cursorPos, (int32)language, expressionFlags); outVal.Append(result); } diff --git a/IDEHelper/DebugManager.cpp b/IDEHelper/DebugManager.cpp index 9e772e5a..386ed176 100644 --- a/IDEHelper/DebugManager.cpp +++ b/IDEHelper/DebugManager.cpp @@ -39,6 +39,8 @@ #include "BeefySysLib/util/AllocDebug.h" +#pragma warning(disable:4190) + #define ENABLE_DBG_32 //#define BF_DBG_32 @@ -1219,7 +1221,7 @@ BF_EXPORT void BF_CALLTYPE Debugger_EvaluateContinueKeep() debugger->EvaluateContinueKeep(); } -BF_EXPORT const char* BF_CALLTYPE Debugger_Evaluate(const char* expr, int callStackIdx, int cursorPos, int32 language, int8 expressionFlags) +BF_EXPORT StringView BF_CALLTYPE Debugger_Evaluate(const char* expr, int callStackIdx, int cursorPos, int32 language, int8 expressionFlags) { auto debugger = gDebugger; @@ -1238,7 +1240,7 @@ BF_EXPORT const char* BF_CALLTYPE Debugger_Evaluate(const char* expr, int callSt BfLogDbg("Debugger_Evaluate Result=%s\n", outString.c_str()); } #endif - return outString.c_str(); + return outString; } BF_EXPORT const char* BF_CALLTYPE Debugger_EvaluateToAddress(const char* expr, int callStackIdx, int cursorPos) diff --git a/IDEHelper/WinDebugger.cpp b/IDEHelper/WinDebugger.cpp index 30a531c4..a13990e3 100644 --- a/IDEHelper/WinDebugger.cpp +++ b/IDEHelper/WinDebugger.cpp @@ -5455,7 +5455,7 @@ bool WinDebugger::ParseFormatInfo(DbgModule* dbgModule, const StringImpl& format DbgEvaluationContext dbgEvaluationContext(this, dbgModule, countExpr, formatInfo); DbgTypedValue countValue = dbgEvaluationContext.EvaluateInContext(contextTypedValue); if ((countValue) && (countValue.mType->IsInteger())) - formatInfo->mOverrideCount = (intptr)countValue.GetInt64(); + formatInfo->mMaxCount = (intptr)countValue.GetInt64(); if (dbgEvaluationContext.HadError()) { if (errorString != NULL)