aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2018-04-25 17:12:55 +1000
committerNeil <nyamatongwe@gmail.com>2018-04-25 17:12:55 +1000
commit3fb1bc5789348d9f9a8bc7868c20ab5ba6b41a41 (patch)
treeb39c8ac8d329c882e6a6ce4c3e012987af78a517 /src
parent5f88849f4e0784056efcea8aaea2138aebdf3dfe (diff)
downloadscintilla-mirror-3fb1bc5789348d9f9a8bc7868c20ab5ba6b41a41.tar.gz
Use set of coercion functions for transforming WndProc parameters into pointers.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx44
-rw-r--r--src/Editor.h23
-rw-r--r--src/ScintillaBase.cxx40
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: