diff options
-rw-r--r-- | cocoa/ScintillaCocoa.mm | 6 | ||||
-rw-r--r-- | gtk/ScintillaGTK.cxx | 8 | ||||
-rw-r--r-- | src/Editor.cxx | 44 | ||||
-rw-r--r-- | src/Editor.h | 23 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 40 | ||||
-rw-r--r-- | win32/ScintillaWin.cxx | 14 |
6 files changed, 77 insertions, 58 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm index b24e29a49..a26cf074a 100644 --- a/cocoa/ScintillaCocoa.mm +++ b/cocoa/ScintillaCocoa.mm @@ -855,11 +855,11 @@ sptr_t ScintillaCocoa::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPar return reinterpret_cast<sptr_t>(this); case SCI_TARGETASUTF8: - return TargetAsUTF8(reinterpret_cast<char*>(lParam)); + return TargetAsUTF8(CharPtrFromSPtr(lParam)); case SCI_ENCODEDFROMUTF8: - return EncodedFromUTF8(reinterpret_cast<char*>(wParam), - reinterpret_cast<char*>(lParam)); + return EncodedFromUTF8(ConstCharPtrFromUPtr(wParam), + CharPtrFromSPtr(lParam)); case SCI_SETIMEINTERACTION: // Only inline IME supported on Cocoa diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 47975d2ed..2326a54cc 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -821,15 +821,15 @@ sptr_t ScintillaGTK::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam #ifdef SCI_LEXER case SCI_LOADLEXERLIBRARY: - LexerManager::GetInstance()->Load(reinterpret_cast<const char*>(lParam)); + LexerManager::GetInstance()->Load(ConstCharPtrFromSPtr(lParam)); break; #endif case SCI_TARGETASUTF8: - return TargetAsUTF8(reinterpret_cast<char*>(lParam)); + return TargetAsUTF8(CharPtrFromSPtr(lParam)); case SCI_ENCODEDFROMUTF8: - return EncodedFromUTF8(reinterpret_cast<char*>(wParam), - reinterpret_cast<char*>(lParam)); + return EncodedFromUTF8(ConstCharPtrFromUPtr(wParam), + CharPtrFromSPtr(lParam)); case SCI_SETRECTANGULARSELECTIONMODIFIER: rectangularSelectionModifier = wParam; diff --git a/src/Editor.cxx b/src/Editor.cxx index 3c57507f8..9bf949a37 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -4015,7 +4015,7 @@ Sci::Position Editor::FindText( ///< @c SCFIND_WORDSTART, @c SCFIND_REGEXP or @c SCFIND_POSIX. sptr_t lParam) { ///< @c Sci_TextToFind structure: The text to search for in the given range. - Sci_TextToFind *ft = reinterpret_cast<Sci_TextToFind *>(lParam); + Sci_TextToFind *ft = static_cast<Sci_TextToFind *>(PtrFromSPtr(lParam)); Sci::Position lengthFound = strlen(ft->lpstrText); if (!pdoc->HasCaseFolder()) pdoc->SetCaseFolder(CaseFolderForEncoding()); @@ -4063,7 +4063,7 @@ Sci::Position Editor::SearchText( ///< @c SCFIND_WORDSTART, @c SCFIND_REGEXP or @c SCFIND_POSIX. sptr_t lParam) { ///< The text to search for. - const char *txt = reinterpret_cast<char *>(lParam); + const char *txt = CharPtrFromSPtr(lParam); Sci::Position pos; Sci::Position lengthFound = strlen(txt); if (!pdoc->HasCaseFolder()) @@ -5594,10 +5594,6 @@ bool Editor::ValidMargin(uptr_t wParam) const { return wParam < vs.ms.size(); } -static char *CharPtrFromSPtr(sptr_t lParam) { - return reinterpret_cast<char *>(lParam); -} - void Editor::StyleSetMessage(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { vs.EnsureStyle(wParam); switch (iMessage) { @@ -6072,7 +6068,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETTEXTRANGE: { if (lParam == 0) return 0; - Sci_TextRange *tr = reinterpret_cast<Sci_TextRange *>(lParam); + Sci_TextRange *tr = static_cast<Sci_TextRange *>(PtrFromSPtr(lParam)); Sci::Position cpMax = static_cast<Sci::Position>(tr->chrg.cpMax); if (cpMax == -1) cpMax = pdoc->Length(); @@ -6090,7 +6086,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { break; case SCI_FORMATRANGE: - return FormatRange(wParam != 0, reinterpret_cast<Sci_RangeToFormat *>(lParam)); + return FormatRange(wParam != 0, static_cast<Sci_RangeToFormat *>(PtrFromSPtr(lParam))); case SCI_GETMARGINLEFT: return vs.leftMarginWidth; @@ -6185,33 +6181,33 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { break; case SCI_GETWORDCHARS: - return pdoc->GetCharsOfClass(CharClassify::ccWord, reinterpret_cast<unsigned char *>(lParam)); + return pdoc->GetCharsOfClass(CharClassify::ccWord, UCharPtrFromSPtr(lParam)); case SCI_SETWORDCHARS: { pdoc->SetDefaultCharClasses(false); if (lParam == 0) return 0; - pdoc->SetCharClasses(reinterpret_cast<unsigned char *>(lParam), CharClassify::ccWord); + pdoc->SetCharClasses(ConstUCharPtrFromSPtr(lParam), CharClassify::ccWord); } break; case SCI_GETWHITESPACECHARS: - return pdoc->GetCharsOfClass(CharClassify::ccSpace, reinterpret_cast<unsigned char *>(lParam)); + return pdoc->GetCharsOfClass(CharClassify::ccSpace, UCharPtrFromSPtr(lParam)); case SCI_SETWHITESPACECHARS: { if (lParam == 0) return 0; - pdoc->SetCharClasses(reinterpret_cast<unsigned char *>(lParam), CharClassify::ccSpace); + pdoc->SetCharClasses(ConstUCharPtrFromSPtr(lParam), CharClassify::ccSpace); } break; case SCI_GETPUNCTUATIONCHARS: - return pdoc->GetCharsOfClass(CharClassify::ccPunctuation, reinterpret_cast<unsigned char *>(lParam)); + return pdoc->GetCharsOfClass(CharClassify::ccPunctuation, UCharPtrFromSPtr(lParam)); case SCI_SETPUNCTUATIONCHARS: { if (lParam == 0) return 0; - pdoc->SetCharClasses(reinterpret_cast<unsigned char *>(lParam), CharClassify::ccPunctuation); + pdoc->SetCharClasses(ConstUCharPtrFromSPtr(lParam), CharClassify::ccPunctuation); } break; @@ -6315,7 +6311,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETSTYLEDTEXT: { if (lParam == 0) return 0; - Sci_TextRange *tr = reinterpret_cast<Sci_TextRange *>(lParam); + Sci_TextRange *tr = static_cast<Sci_TextRange *>(PtrFromSPtr(lParam)); int iPlace = 0; for (long iChar = tr->chrg.cpMin; iChar < tr->chrg.cpMax; iChar++) { tr->lpstrText[iPlace++] = pdoc->CharAt(iChar); @@ -6869,7 +6865,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_MARKERDEFINERGBAIMAGE: if (wParam <= MARKER_MAX) { - vs.markers[wParam].SetRGBAImage(sizeRGBAImage, scaleRGBAImage / 100.0f, reinterpret_cast<unsigned char *>(lParam)); + vs.markers[wParam].SetRGBAImage(sizeRGBAImage, scaleRGBAImage / 100.0f, ConstUCharPtrFromSPtr(lParam)); vs.CalcLargestMarkerHeight(); } InvalidateStyleData(); @@ -7581,7 +7577,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_SETDOCPOINTER: CancelModes(); - SetDocPointer(reinterpret_cast<Document *>(lParam)); + SetDocPointer(static_cast<Document *>(PtrFromSPtr(lParam))); return 0; case SCI_CREATEDOCUMENT: { @@ -7593,11 +7589,11 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { } case SCI_ADDREFDOCUMENT: - (reinterpret_cast<Document *>(lParam))->AddRef(); + (static_cast<Document *>(PtrFromSPtr(lParam)))->AddRef(); break; case SCI_RELEASEDOCUMENT: - (reinterpret_cast<Document *>(lParam))->Release(); + (static_cast<Document *>(PtrFromSPtr(lParam)))->Release(); break; case SCI_GETDOCUMENTOPTIONS: @@ -7743,12 +7739,12 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { return vs.controlCharSymbol; case SCI_SETREPRESENTATION: - reprs.SetRepresentation(reinterpret_cast<const char *>(wParam), CharPtrFromSPtr(lParam)); + reprs.SetRepresentation(ConstCharPtrFromUPtr(wParam), ConstCharPtrFromSPtr(lParam)); break; case SCI_GETREPRESENTATION: { const Representation *repr = reprs.RepresentationFromCharacter( - reinterpret_cast<const char *>(wParam), UTF8MaxBytes); + ConstCharPtrFromUPtr(wParam), UTF8MaxBytes); if (repr) { return StringResult(lParam, repr->stringRep.c_str()); } @@ -7756,7 +7752,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { } case SCI_CLEARREPRESENTATION: - reprs.ClearRepresentation(reinterpret_cast<const char *>(wParam)); + reprs.ClearRepresentation(ConstCharPtrFromUPtr(wParam)); break; case SCI_STARTRECORD: @@ -7880,7 +7876,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { } case SCI_MARGINSETSTYLES: - pdoc->MarginSetStyles(static_cast<Sci::Line>(wParam), reinterpret_cast<const unsigned char *>(lParam)); + pdoc->MarginSetStyles(static_cast<Sci::Line>(wParam), ConstUCharPtrFromSPtr(lParam)); break; case SCI_MARGINGETSTYLES: { @@ -7911,7 +7907,7 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { break; case SCI_ANNOTATIONSETSTYLES: - pdoc->AnnotationSetStyles(static_cast<Sci::Line>(wParam), reinterpret_cast<const unsigned char *>(lParam)); + pdoc->AnnotationSetStyles(static_cast<Sci::Line>(wParam), ConstUCharPtrFromSPtr(lParam)); break; case SCI_ANNOTATIONGETSTYLES: { diff --git a/src/Editor.h b/src/Editor.h index f45d18661..9fda8ddea 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -568,6 +568,29 @@ protected: // ScintillaBase subclass needs access to much of Editor static const char *StringFromEOLMode(int eolMode); + // Coercion functions for transforming WndProc parameters into pointers + static void *PtrFromSPtr(sptr_t lParam) { + return reinterpret_cast<void *>(lParam); + } + static const char *ConstCharPtrFromSPtr(sptr_t lParam) { + return static_cast<const char *>(PtrFromSPtr(lParam)); + } + static const unsigned char *ConstUCharPtrFromSPtr(sptr_t lParam) { + return static_cast<const unsigned char *>(PtrFromSPtr(lParam)); + } + static char *CharPtrFromSPtr(sptr_t lParam) { + return static_cast<char *>(PtrFromSPtr(lParam)); + } + static unsigned char *UCharPtrFromSPtr(sptr_t lParam) { + return static_cast<unsigned char *>(PtrFromSPtr(lParam)); + } + static void *PtrFromUPtr(uptr_t wParam) { + return reinterpret_cast<void *>(wParam); + } + static const char *ConstCharPtrFromUPtr(uptr_t wParam) { + return static_cast<const char *>(PtrFromUPtr(wParam)); + } + static sptr_t StringResult(sptr_t lParam, const char *val); static sptr_t BytesResult(sptr_t lParam, const unsigned char *val, size_t len); diff --git a/src/ScintillaBase.cxx b/src/ScintillaBase.cxx index 722e366c6..f0fde7c9f 100644 --- a/src/ScintillaBase.cxx +++ b/src/ScintillaBase.cxx @@ -846,7 +846,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara switch (iMessage) { case SCI_AUTOCSHOW: listType = 0; - AutoCompleteStart(static_cast<Sci::Position>(wParam), reinterpret_cast<const char *>(lParam)); + AutoCompleteStart(static_cast<Sci::Position>(wParam), ConstCharPtrFromSPtr(lParam)); break; case SCI_AUTOCCANCEL: @@ -871,18 +871,18 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara return ac.GetSeparator(); case SCI_AUTOCSTOPS: - ac.SetStopChars(reinterpret_cast<char *>(lParam)); + ac.SetStopChars(ConstCharPtrFromSPtr(lParam)); break; case SCI_AUTOCSELECT: - ac.Select(reinterpret_cast<char *>(lParam)); + ac.Select(ConstCharPtrFromSPtr(lParam)); break; case SCI_AUTOCGETCURRENT: return AutoCompleteGetCurrent(); case SCI_AUTOCGETCURRENTTEXT: - return AutoCompleteGetCurrentText(reinterpret_cast<char *>(lParam)); + return AutoCompleteGetCurrentText(CharPtrFromSPtr(lParam)); case SCI_AUTOCSETCANCELATSTART: ac.cancelAtStartPos = wParam != 0; @@ -892,7 +892,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara return ac.cancelAtStartPos; case SCI_AUTOCSETFILLUPS: - ac.SetFillUpChars(reinterpret_cast<char *>(lParam)); + ac.SetFillUpChars(ConstCharPtrFromSPtr(lParam)); break; case SCI_AUTOCSETCHOOSESINGLE: @@ -932,7 +932,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara case SCI_USERLISTSHOW: listType = static_cast<int>(wParam); - AutoCompleteStart(0, reinterpret_cast<const char *>(lParam)); + AutoCompleteStart(0, ConstCharPtrFromSPtr(lParam)); break; case SCI_AUTOCSETAUTOHIDE: @@ -964,12 +964,12 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara return maxListWidth; case SCI_REGISTERIMAGE: - ac.lb->RegisterImage(static_cast<int>(wParam), reinterpret_cast<const char *>(lParam)); + ac.lb->RegisterImage(static_cast<int>(wParam), ConstCharPtrFromSPtr(lParam)); break; case SCI_REGISTERRGBAIMAGE: ac.lb->RegisterRGBAImage(static_cast<int>(wParam), static_cast<int>(sizeRGBAImage.x), static_cast<int>(sizeRGBAImage.y), - reinterpret_cast<unsigned char *>(lParam)); + ConstUCharPtrFromSPtr(lParam)); break; case SCI_CLEARREGISTEREDIMAGES: @@ -985,7 +985,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara case SCI_CALLTIPSHOW: CallTipShow(LocationFromPosition(static_cast<Sci::Position>(wParam)), - reinterpret_cast<const char *>(lParam)); + ConstCharPtrFromSPtr(lParam)); break; case SCI_CALLTIPCANCEL: @@ -1056,26 +1056,26 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara break; case SCI_SETPROPERTY: - DocumentLexState()->PropSet(reinterpret_cast<const char *>(wParam), - reinterpret_cast<const char *>(lParam)); + DocumentLexState()->PropSet(ConstCharPtrFromUPtr(wParam), + ConstCharPtrFromSPtr(lParam)); break; case SCI_GETPROPERTY: - return StringResult(lParam, DocumentLexState()->PropGet(reinterpret_cast<const char *>(wParam))); + return StringResult(lParam, DocumentLexState()->PropGet(ConstCharPtrFromUPtr(wParam))); case SCI_GETPROPERTYEXPANDED: - return DocumentLexState()->PropGetExpanded(reinterpret_cast<const char *>(wParam), - reinterpret_cast<char *>(lParam)); + return DocumentLexState()->PropGetExpanded(ConstCharPtrFromUPtr(wParam), + CharPtrFromSPtr(lParam)); case SCI_GETPROPERTYINT: - return DocumentLexState()->PropGetInt(reinterpret_cast<const char *>(wParam), static_cast<int>(lParam)); + return DocumentLexState()->PropGetInt(ConstCharPtrFromUPtr(wParam), static_cast<int>(lParam)); case SCI_SETKEYWORDS: - DocumentLexState()->SetWordList(static_cast<int>(wParam), reinterpret_cast<const char *>(lParam)); + DocumentLexState()->SetWordList(static_cast<int>(wParam), ConstCharPtrFromSPtr(lParam)); break; case SCI_SETLEXERLANGUAGE: - DocumentLexState()->SetLexerLanguage(reinterpret_cast<const char *>(lParam)); + DocumentLexState()->SetLexerLanguage(ConstCharPtrFromSPtr(lParam)); break; case SCI_GETLEXERLANGUAGE: @@ -1094,11 +1094,11 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara return StringResult(lParam, DocumentLexState()->PropertyNames()); case SCI_PROPERTYTYPE: - return DocumentLexState()->PropertyType(reinterpret_cast<const char *>(wParam)); + return DocumentLexState()->PropertyType(ConstCharPtrFromUPtr(wParam)); case SCI_DESCRIBEPROPERTY: return StringResult(lParam, - DocumentLexState()->DescribeProperty(reinterpret_cast<const char *>(wParam))); + DocumentLexState()->DescribeProperty(ConstCharPtrFromUPtr(wParam))); case SCI_DESCRIBEKEYWORDSETS: return StringResult(lParam, DocumentLexState()->DescribeWordListSets()); @@ -1127,7 +1127,7 @@ sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lPara case SCI_SETIDENTIFIERS: DocumentLexState()->SetIdentifiers(static_cast<int>(wParam), - reinterpret_cast<const char *>(lParam)); + ConstCharPtrFromSPtr(lParam)); break; case SCI_DISTANCETOSECONDARYSTYLES: diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx index 45b1f0d4a..21a9cced4 100644 --- a/win32/ScintillaWin.cxx +++ b/win32/ScintillaWin.cxx @@ -1201,7 +1201,7 @@ sptr_t ScintillaWin::GetTextLength() { } sptr_t ScintillaWin::GetText(uptr_t wParam, sptr_t lParam) { - wchar_t *ptr = reinterpret_cast<wchar_t *>(lParam); + wchar_t *ptr = static_cast<wchar_t *>(PtrFromSPtr(lParam)); if (pdoc->Length() == 0) { *ptr = L'\0'; return 0; @@ -1746,16 +1746,16 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam #ifdef SCI_LEXER case SCI_LOADLEXERLIBRARY: - LexerManager::GetInstance()->Load(reinterpret_cast<const char *>(lParam)); + LexerManager::GetInstance()->Load(ConstCharPtrFromSPtr(lParam)); break; #endif case SCI_TARGETASUTF8: - return TargetAsUTF8(reinterpret_cast<char*>(lParam)); + return TargetAsUTF8(CharPtrFromSPtr(lParam)); case SCI_ENCODEDFROMUTF8: - return EncodedFromUTF8(reinterpret_cast<const char*>(wParam), - reinterpret_cast<char*>(lParam)); + return EncodedFromUTF8(ConstCharPtrFromUPtr(wParam), + CharPtrFromSPtr(lParam)); default: return ScintillaBase::WndProc(iMessage, wParam, lParam); @@ -2691,7 +2691,7 @@ LRESULT ScintillaWin::ImeOnReconvert(LPARAM lParam) { const int rcFeedLen = static_cast<int>(rcFeed.length()) * sizeof(wchar_t); const int rcSize = sizeof(RECONVERTSTRING) + rcFeedLen + sizeof(wchar_t); - RECONVERTSTRING *rc = reinterpret_cast<RECONVERTSTRING *>(lParam); + RECONVERTSTRING *rc = static_cast<RECONVERTSTRING *>(PtrFromSPtr(lParam)); if (!rc) return rcSize; // Immediately be back with rcSize of memory block. @@ -3277,7 +3277,7 @@ LRESULT PASCAL ScintillaWin::CTWndProc( if (sciThis == 0) { if (iMessage == WM_CREATE) { // Associate CallTip object with window - CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT *>(lParam); + CREATESTRUCT *pCreate = static_cast<CREATESTRUCT *>(PtrFromSPtr(lParam)); SetWindowPointer(hWnd, pCreate->lpCreateParams); return 0; } else { |