diff --git a/Include/Python.h b/Include/Python.h
index a5e2853..4cffda3 100644
--- a/Include/Python.h
+++ b/Include/Python.h
@@ -148,7 +148,7 @@
 #ifdef __CHAR_UNSIGNED__
 #define Py_CHARMASK(c)		(c)
 #else
-#define Py_CHARMASK(c)		((c) & 0xff)
+#define Py_CHARMASK(c)		((unsigned char)((c) & 0xff))
 #endif
 
 #include "pyfpe.h"
diff --git a/Include/bytes_methods.h b/Include/bytes_methods.h
index a05e11f..59873f2 100644
--- a/Include/bytes_methods.h
+++ b/Include/bytes_methods.h
@@ -44,13 +44,13 @@
 
 extern const unsigned int _Py_ctype_table[256];
 
-#define ISLOWER(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_LOWER)
-#define ISUPPER(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_UPPER)
-#define ISALPHA(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_ALPHA)
-#define ISDIGIT(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_DIGIT)
-#define ISXDIGIT(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_XDIGIT)
-#define ISALNUM(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_ALNUM)
-#define ISSPACE(c) (_Py_ctype_table[(unsigned)Py_CHARMASK(c)] & FLAG_SPACE)
+#define ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_LOWER)
+#define ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_UPPER)
+#define ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_ALPHA)
+#define ISDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_DIGIT)
+#define ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_XDIGIT)
+#define ISALNUM(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_ALNUM)
+#define ISSPACE(c) (_Py_ctype_table[Py_CHARMASK(c)] & FLAG_SPACE)
 
 #undef islower
 #define islower(c) undefined_islower(c)
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 0fd699c..2e13d61 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1397,7 +1397,7 @@
 		n >>= 1;
 	/* n <- total # of bits needed, while setting p to end-of-string */
 	n = 0;
-	while (_PyLong_DigitValue[(unsigned)Py_CHARMASK(*p)] < base)
+	while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
 		++p;
 	*str = p;
 	/* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
@@ -1418,7 +1418,7 @@
 	bits_in_accum = 0;
 	pdigit = z->ob_digit;
 	while (--p >= start) {
-		int k = _PyLong_DigitValue[(unsigned)Py_CHARMASK(*p)];
+		int k = _PyLong_DigitValue[Py_CHARMASK(*p)];
 		assert(k >= 0 && k < base);
 		accum |= (twodigits)(k << bits_in_accum);
 		bits_in_accum += bits_per_char;
@@ -1609,7 +1609,7 @@
 
 		/* Find length of the string of numeric characters. */
 		scan = str;
-		while (_PyLong_DigitValue[(unsigned)Py_CHARMASK(*scan)] < base)
+		while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
 			++scan;
 
 		/* Create a long object that can contain the largest possible
@@ -1635,10 +1635,10 @@
 		/* Work ;-) */
 		while (str < scan) {
 			/* grab up to convwidth digits from the input string */
-			c = (digit)_PyLong_DigitValue[(unsigned)Py_CHARMASK(*str++)];
+			c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
 			for (i = 1; i < convwidth && str != scan; ++i, ++str) {
 				c = (twodigits)(c *  base +
-					_PyLong_DigitValue[(unsigned)Py_CHARMASK(*str)]);
+					_PyLong_DigitValue[Py_CHARMASK(*str)]);
 				assert(c < PyLong_BASE);
 			}
 
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 317d03b..c5acd1b 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -480,13 +480,13 @@
 	/* Single characters are shared when using this constructor.
            Restrict to ASCII, since the input must be UTF-8. */
 	if (size == 1 && Py_CHARMASK(*u) < 128) {
-	    unicode = unicode_latin1[(unsigned)Py_CHARMASK(*u)];
+	    unicode = unicode_latin1[Py_CHARMASK(*u)];
 	    if (!unicode) {
 		unicode = _PyUnicode_New(1);
 		if (!unicode)
 		    return NULL;
 		unicode->str[0] = Py_CHARMASK(*u);
-		unicode_latin1[(unsigned)Py_CHARMASK(*u)] = unicode;
+		unicode_latin1[Py_CHARMASK(*u)] = unicode;
 	    }
 	    Py_INCREF(unicode);
 	    return (PyObject *)unicode;
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index 799db20..29fb114 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -27,14 +27,6 @@
 /* Don't ever change this -- it would break the portability of Python code */
 #define TABSIZE 8
 
-/* Convert a possibly signed character to a nonnegative int */
-/* XXX This assumes characters are 8 bits wide */
-#ifdef __CHAR_UNSIGNED__
-#define Py_CHARMASK(c)		(c)
-#else
-#define Py_CHARMASK(c)		((c) & 0xff)
-#endif
-
 /* Forward */
 static struct tok_state *tok_new(void);
 static int tok_nextc(struct tok_state *tok);
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index 3d9a28db..ebd468c 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -109,7 +109,7 @@
 			++str;
 			if (*str == 'x' || *str == 'X') {
 				/* there must be at least one digit after 0x */
-				if (_PyLong_DigitValue[(unsigned)Py_CHARMASK(str[1])] >= 16) {
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
 					if (ptr)
 						*ptr = str;
 					return 0;
@@ -118,7 +118,7 @@
 				base = 16;
 			} else if (*str == 'o' || *str == 'O') {
 				/* there must be at least one digit after 0o */
-				if (_PyLong_DigitValue[(unsigned)Py_CHARMASK(str[1])] >= 8) {
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
 					if (ptr)
 						*ptr = str;
 					return 0;
@@ -127,7 +127,7 @@
 				base = 8;
 			} else if (*str == 'b' || *str == 'B') {
 				/* there must be at least one digit after 0b */
-				if (_PyLong_DigitValue[(unsigned)Py_CHARMASK(str[1])] >= 2) {
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
 					if (ptr)
 						*ptr = str;
 					return 0;
@@ -147,7 +147,7 @@
 			++str;
 			if (*str == 'b' || *str == 'B') {
 				/* there must be at least one digit after 0b */
-				if (_PyLong_DigitValue[(unsigned)Py_CHARMASK(str[1])] >= 2) {
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
 					if (ptr)
 						*ptr = str;
 					return 0;
@@ -162,7 +162,7 @@
 			++str;
 			if (*str == 'o' || *str == 'O') {
 				/* there must be at least one digit after 0o */
-				if (_PyLong_DigitValue[(unsigned)Py_CHARMASK(str[1])] >= 8) {
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
 					if (ptr)
 						*ptr = str;
 					return 0;
@@ -177,7 +177,7 @@
 			++str;
 			if (*str == 'x' || *str == 'X') {
 				/* there must be at least one digit after 0x */
-				if (_PyLong_DigitValue[(unsigned)Py_CHARMASK(str[1])] >= 16) {
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
 					if (ptr)
 						*ptr = str;
 					return 0;
@@ -203,7 +203,7 @@
 	ovlimit = digitlimit[base];
 
 	/* do the conversion until non-digit character encountered */
-	while ((c = _PyLong_DigitValue[(unsigned)Py_CHARMASK(*str)]) < base) {
+	while ((c = _PyLong_DigitValue[Py_CHARMASK(*str)]) < base) {
 		if (ovlimit > 0) /* no overflow check required */
 			result = result * base + c;
 		else { /* requires overflow check */
@@ -240,7 +240,7 @@
 overflowed:
 	if (ptr) {
 		/* spool through remaining digit characters */
-		while (_PyLong_DigitValue[(unsigned)Py_CHARMASK(*str)] < base)
+		while (_PyLong_DigitValue[Py_CHARMASK(*str)] < base)
 			++str;
 		*ptr = str;
 	}
