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 | |
| parent | 5f88849f4e0784056efcea8aaea2138aebdf3dfe (diff) | |
| download | scintilla-mirror-3fb1bc5789348d9f9a8bc7868c20ab5ba6b41a41.tar.gz | |
Use set of coercion functions for transforming WndProc parameters into pointers.
| -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 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 { | 
