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: | 
