aboutsummaryrefslogtreecommitdiffhomepage
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
parent5f88849f4e0784056efcea8aaea2138aebdf3dfe (diff)
downloadscintilla-mirror-3fb1bc5789348d9f9a8bc7868c20ab5ba6b41a41.tar.gz
Use set of coercion functions for transforming WndProc parameters into pointers.
-rw-r--r--cocoa/ScintillaCocoa.mm6
-rw-r--r--gtk/ScintillaGTK.cxx8
-rw-r--r--src/Editor.cxx44
-rw-r--r--src/Editor.h23
-rw-r--r--src/ScintillaBase.cxx40
-rw-r--r--win32/ScintillaWin.cxx14
6 files changed, 77 insertions, 58 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index 3be2c6b98..e21f147af 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -833,11 +833,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 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:
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index cdb6cc472..480c82e64 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;
@@ -1757,16 +1757,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);
@@ -2702,7 +2702,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.
@@ -3288,7 +3288,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 {