Detail

Code for multi-character tokens can start right after maximum char.
diff --git a/llex.c b/llex.c
index 90a7951..3d6b2b9 100644
--- a/llex.c
+++ b/llex.c
@@ -81,7 +81,6 @@
 
 const char *luaX_token2str (LexState *ls, int token) {
   if (token < FIRST_RESERVED) {  /* single-byte symbols? */
-    lua_assert(token == cast_uchar(token));
     if (lisprint(token))
       return luaO_pushfstring(ls->L, "'%c'", token);
     else  /* control character */
diff --git a/llex.h b/llex.h
index d1a4cba..389d2f8 100644
--- a/llex.h
+++ b/llex.h
@@ -7,11 +7,17 @@
 #ifndef llex_h
 #define llex_h
 
+#include <limits.h>
+
 #include "lobject.h"
 #include "lzio.h"
 
 
-#define FIRST_RESERVED	257
+/*
+** Single-char tokens (terminal symbols) are represented by their own
+** numeric code. Other tokens start at the following value.
+*/
+#define FIRST_RESERVED	(UCHAR_MAX + 1)
 
 
 #if !defined(LUA_ENV)