diff options
author | Neil <nyamatongwe@gmail.com> | 2018-04-25 17:12:55 +1000 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2018-04-25 17:12:55 +1000 |
commit | 3fb1bc5789348d9f9a8bc7868c20ab5ba6b41a41 (patch) | |
tree | b39c8ac8d329c882e6a6ce4c3e012987af78a517 /src | |
parent | 5f88849f4e0784056efcea8aaea2138aebdf3dfe (diff) | |
download | scintilla-mirror-3fb1bc5789348d9f9a8bc7868c20ab5ba6b41a41.tar.gz |
Use set of coercion functions for transforming WndProc parameters into pointers.
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 44 | ||||
-rw-r--r-- | src/Editor.h | 23 | ||||
-rw-r--r-- | src/ScintillaBase.cxx | 40 |
3 files changed, 63 insertions, 44 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 29dcc9dbd..e869886fe 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); @@ -6878,7 +6874,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(); @@ -7590,7 +7586,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: { @@ -7602,11 +7598,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: @@ -7752,12 +7748,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()); } @@ -7765,7 +7761,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: @@ -7889,7 +7885,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: { @@ -7920,7 +7916,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 353392b09..9c4e8cf78 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: |