Rebuilt the lexer with a much newer re2c.
authorRyan C. Gordon <icculus@icculus.org>
Mon, 20 Jul 2020 19:24:46 -0400
changeset 1294 d4084c8412d0
parent 1293 ee08d870641b
child 1295 f592791e062e
Rebuilt the lexer with a much newer re2c.
mojoshader_lexer.c
--- a/mojoshader_lexer.c	Mon Jul 20 19:22:41 2020 -0400
+++ b/mojoshader_lexer.c	Mon Jul 20 19:24:46 2020 -0400
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.5 */
+/* Generated by re2c 1.2.1 */
 /**
  * MojoShader; generate shader programs from bytecode of compiled
  *  Direct3D shaders.
@@ -26,6 +26,7 @@
 typedef unsigned char uchar;
 
 #define YYMAXFILL 8
+
 #define RET(t) return update_state(s, eoi, cursor, token, (Token) t)
 #define YYCTYPE uchar
 #define YYCURSOR cursor
@@ -80,32 +81,31 @@
 {
 	YYCTYPE yych;
 	unsigned int yyaccept = 0;
-
-	if ((YYLIMIT - YYCURSOR) < 5) YYFILL(5);
+	if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
 	yych = *YYCURSOR;
 	switch (yych) {
-	case 0x00:	goto yy61;
+	case 0x00:	goto yy2;
 	case '\t':
 	case '\v':
 	case '\f':
-	case ' ':	goto yy63;
-	case '\n':	goto yy65;
-	case '\r':	goto yy67;
-	case '!':	goto yy35;
+	case ' ':	goto yy6;
+	case '\n':	goto yy9;
+	case '\r':	goto yy11;
+	case '!':	goto yy12;
 	case '"':	goto yy14;
-	case '#':	goto yy37;
-	case '%':	goto yy25;
-	case '&':	goto yy29;
-	case '\'':	goto yy11;
-	case '(':	goto yy39;
-	case ')':	goto yy41;
-	case '*':	goto yy23;
-	case '+':	goto yy19;
-	case ',':	goto yy47;
-	case '-':	goto yy21;
-	case '.':	goto yy12;
-	case '/':	goto yy4;
-	case '0':	goto yy8;
+	case '#':	goto yy15;
+	case '%':	goto yy17;
+	case '&':	goto yy19;
+	case '\'':	goto yy21;
+	case '(':	goto yy22;
+	case ')':	goto yy24;
+	case '*':	goto yy26;
+	case '+':	goto yy28;
+	case ',':	goto yy30;
+	case '-':	goto yy32;
+	case '.':	goto yy34;
+	case '/':	goto yy36;
+	case '0':	goto yy38;
 	case '1':
 	case '2':
 	case '3':
@@ -114,13 +114,13 @@
 	case '6':
 	case '7':
 	case '8':
-	case '9':	goto yy10;
-	case ':':	goto yy51;
-	case ';':	goto yy59;
-	case '<':	goto yy17;
-	case '=':	goto yy33;
-	case '>':	goto yy15;
-	case '?':	goto yy57;
+	case '9':	goto yy40;
+	case ':':	goto yy42;
+	case ';':	goto yy44;
+	case '<':	goto yy46;
+	case '=':	goto yy48;
+	case '>':	goto yy50;
+	case '?':	goto yy52;
 	case 'A':
 	case 'B':
 	case 'C':
@@ -173,942 +173,604 @@
 	case 'w':
 	case 'x':
 	case 'y':
-	case 'z':	goto yy6;
-	case '[':	goto yy43;
-	case '\\':	goto yy2;
-	case ']':	goto yy45;
-	case '^':	goto yy27;
-	case '{':	goto yy53;
-	case '|':	goto yy31;
-	case '}':	goto yy55;
-	case '~':	goto yy49;
-	default:	goto yy68;
+	case 'z':	goto yy54;
+	case '[':	goto yy57;
+	case '\\':	goto yy59;
+	case ']':	goto yy60;
+	case '^':	goto yy62;
+	case '{':	goto yy64;
+	case '|':	goto yy66;
+	case '}':	goto yy68;
+	case '~':	goto yy70;
+	default:	goto yy4;
 	}
 yy2:
-	yyaccept = 0;
-	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych <= 0x08) goto yy3;
-	if (yych <= '\r') goto yy177;
-	if (yych == ' ') goto yy177;
-yy3:
-	{ goto bad_chars; }
+	++YYCURSOR;
+	{ if (eoi) { RET(TOKEN_EOI); } goto bad_chars; }
 yy4:
 	++YYCURSOR;
-	if ((yych = *YYCURSOR) <= '.') {
-		if (yych == '*') goto yy174;
-	} else {
-		if (yych <= '/') goto yy172;
-		if (yych == '=') goto yy170;
-	}
-	{ RET('/'); }
+yy5:
+	{ goto bad_chars; }
 yy6:
 	++YYCURSOR;
+	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	goto yy169;
-yy7:
-	{ RET(TOKEN_IDENTIFIER); }
-yy8:
-	yyaccept = 1;
-	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych <= 'X') {
-		if (yych <= 'T') {
-			if (yych == 'L') goto yy144;
-			goto yy160;
-		} else {
-			if (yych <= 'U') goto yy144;
-			if (yych <= 'W') goto yy160;
-			goto yy161;
-		}
+	if (yych <= '\n') {
+		if (yych == '\t') goto yy6;
 	} else {
-		if (yych <= 't') {
-			if (yych == 'l') goto yy144;
-			goto yy160;
-		} else {
-			if (yych <= 'u') goto yy144;
-			if (yych == 'x') goto yy161;
-			goto yy160;
-		}
+		if (yych <= '\f') goto yy6;
+		if (yych == ' ') goto yy6;
 	}
+	{ if (s->report_whitespace) RET(' '); goto scanner_loop; }
 yy9:
-	{ RET(TOKEN_INT_LITERAL); }
+	++YYCURSOR;
 yy10:
-	yyaccept = 1;
-	yych = *(YYMARKER = ++YYCURSOR);
-	goto yy142;
+	{ s->line++; RET('\n'); }
 yy11:
-	yyaccept = 0;
-	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych == '\n') goto yy3;
-	if (yych == '\r') goto yy3;
-	goto yy132;
+	yych = *++YYCURSOR;
+	if (yych == '\n') goto yy9;
+	goto yy10;
 yy12:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) <= '/') goto yy13;
-	if (yych <= '9') goto yy123;
-yy13:
-	{ RET('.'); }
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy72;
+	{ RET('!'); }
 yy14:
 	yyaccept = 0;
 	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych == '\n') goto yy3;
-	if (yych == '\r') goto yy3;
-	goto yy113;
+	if (yych == '\n') goto yy5;
+	if (yych == '\r') goto yy5;
+	goto yy75;
 yy15:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) <= '<') goto yy16;
-	if (yych <= '=') goto yy106;
-	if (yych <= '>') goto yy108;
-yy16:
-	{ RET('>'); }
+	yych = *++YYCURSOR;
+	if (yych == '#') goto yy80;
+	{ RET(TOKEN_HASH); }
 yy17:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) <= ';') goto yy18;
-	if (yych <= '<') goto yy102;
-	if (yych <= '=') goto yy100;
-yy18:
-	{ RET('<'); }
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy82;
+	{ RET('%'); }
 yy19:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '+') goto yy96;
-	if (yych == '=') goto yy98;
-	{ RET('+'); }
+	yych = *++YYCURSOR;
+	if (yych == '&') goto yy84;
+	if (yych == '=') goto yy86;
+	{ RET('&'); }
 yy21:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '-') goto yy92;
-	if (yych == '=') goto yy94;
-	{ RET('-'); }
-yy23:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy90;
-	{ RET('*'); }
-yy25:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy88;
-	{ RET('%'); }
-yy27:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy86;
-	{ RET('^'); }
-yy29:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '&') goto yy82;
-	if (yych == '=') goto yy84;
-	{ RET('&'); }
-yy31:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy80;
-	if (yych == '|') goto yy78;
-	{ RET('|'); }
-yy33:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy76;
-	{ RET('='); }
-yy35:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy74;
-	{ RET('!'); }
-yy37:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '#') goto yy72;
-	{ RET(TOKEN_HASH); }
-yy39:
+	yyaccept = 0;
+	yych = *(YYMARKER = ++YYCURSOR);
+	if (yych == '\n') goto yy5;
+	if (yych == '\r') goto yy5;
+	goto yy89;
+yy22:
 	++YYCURSOR;
 	{ RET('('); }
-yy41:
+yy24:
 	++YYCURSOR;
 	{ RET(')'); }
-yy43:
-	++YYCURSOR;
-	{ RET('['); }
-yy45:
-	++YYCURSOR;
-	{ RET(']'); }
-yy47:
+yy26:
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy92;
+	{ RET('*'); }
+yy28:
+	yych = *++YYCURSOR;
+	if (yych == '+') goto yy94;
+	if (yych == '=') goto yy96;
+	{ RET('+'); }
+yy30:
 	++YYCURSOR;
 	{ RET(','); }
-yy49:
-	++YYCURSOR;
-	{ RET('~'); }
-yy51:
+yy32:
+	yych = *++YYCURSOR;
+	if (yych == '-') goto yy98;
+	if (yych == '=') goto yy100;
+	{ RET('-'); }
+yy34:
+	yych = *++YYCURSOR;
+	if (yych <= '/') goto yy35;
+	if (yych <= '9') goto yy102;
+yy35:
+	{ RET('.'); }
+yy36:
+	yych = *++YYCURSOR;
+	if (yych <= '.') {
+		if (yych == '*') goto yy105;
+	} else {
+		if (yych <= '/') goto yy107;
+		if (yych == '=') goto yy109;
+	}
+	{ RET('/'); }
+yy38:
+	yyaccept = 1;
+	yych = *(YYMARKER = ++YYCURSOR);
+	if (yych == 'X') goto yy114;
+	if (yych == 'x') goto yy114;
+	goto yy41;
+yy39:
+	{ RET(TOKEN_INT_LITERAL); }
+yy40:
+	yyaccept = 1;
+	YYMARKER = ++YYCURSOR;
+	if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
+	yych = *YYCURSOR;
+yy41:
+	if (yych <= 'L') {
+		if (yych <= '9') {
+			if (yych == '.') goto yy102;
+			if (yych <= '/') goto yy39;
+			goto yy40;
+		} else {
+			if (yych == 'E') goto yy111;
+			if (yych <= 'K') goto yy39;
+			goto yy112;
+		}
+	} else {
+		if (yych <= 'e') {
+			if (yych == 'U') goto yy112;
+			if (yych <= 'd') goto yy39;
+			goto yy111;
+		} else {
+			if (yych <= 'l') {
+				if (yych <= 'k') goto yy39;
+				goto yy112;
+			} else {
+				if (yych == 'u') goto yy112;
+				goto yy39;
+			}
+		}
+	}
+yy42:
 	++YYCURSOR;
 	{ RET(':'); }
-yy53:
+yy44:
 	++YYCURSOR;
-	{ RET('{'); }
-yy55:
-	++YYCURSOR;
-	{ RET('}'); }
-yy57:
+	{ if (s->asm_comments) goto singlelinecomment; RET(';'); }
+yy46:
+	yych = *++YYCURSOR;
+	if (yych <= ';') goto yy47;
+	if (yych <= '<') goto yy115;
+	if (yych <= '=') goto yy117;
+yy47:
+	{ RET('<'); }
+yy48:
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy119;
+	{ RET('='); }
+yy50:
+	yych = *++YYCURSOR;
+	if (yych <= '<') goto yy51;
+	if (yych <= '=') goto yy121;
+	if (yych <= '>') goto yy123;
+yy51:
+	{ RET('>'); }
+yy52:
 	++YYCURSOR;
 	{ RET('?'); }
-yy59:
-	++YYCURSOR;
-	{ if (s->asm_comments) goto singlelinecomment; RET(';'); }
-yy61:
-	++YYCURSOR;
-	{ if (eoi) { RET(TOKEN_EOI); } goto bad_chars; }
-yy63:
-	++YYCURSOR;
-	yych = *YYCURSOR;
-	goto yy71;
-yy64:
-	{ if (s->report_whitespace) RET(' '); goto scanner_loop; }
-yy65:
-	++YYCURSOR;
-yy66:
-	{ s->line++; RET('\n'); }
-yy67:
-	yych = *++YYCURSOR;
-	if (yych == '\n') goto yy69;
-	goto yy66;
-yy68:
-	yych = *++YYCURSOR;
-	goto yy3;
-yy69:
-	yych = *++YYCURSOR;
-	goto yy66;
-yy70:
+yy54:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy71:
-	if (yych <= '\n') {
-		if (yych == '\t') goto yy70;
-		goto yy64;
+	if (yych <= 'Z') {
+		if (yych <= '/') goto yy56;
+		if (yych <= '9') goto yy54;
+		if (yych >= 'A') goto yy54;
 	} else {
-		if (yych <= '\f') goto yy70;
-		if (yych == ' ') goto yy70;
-		goto yy64;
+		if (yych <= '_') {
+			if (yych >= '_') goto yy54;
+		} else {
+			if (yych <= '`') goto yy56;
+			if (yych <= 'z') goto yy54;
+		}
 	}
-yy72:
+yy56:
+	{ RET(TOKEN_IDENTIFIER); }
+yy57:
+	++YYCURSOR;
+	{ RET('['); }
+yy59:
+	yyaccept = 0;
+	yych = *(YYMARKER = ++YYCURSOR);
+	if (yych <= 0x08) goto yy5;
+	if (yych <= '\r') goto yy126;
+	if (yych == ' ') goto yy126;
+	goto yy5;
+yy60:
 	++YYCURSOR;
-	{ RET(TOKEN_HASHHASH); }
-yy74:
+	{ RET(']'); }
+yy62:
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy130;
+	{ RET('^'); }
+yy64:
+	++YYCURSOR;
+	{ RET('{'); }
+yy66:
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy132;
+	if (yych == '|') goto yy134;
+	{ RET('|'); }
+yy68:
+	++YYCURSOR;
+	{ RET('}'); }
+yy70:
+	++YYCURSOR;
+	{ RET('~'); }
+yy72:
 	++YYCURSOR;
 	{ RET(TOKEN_NEQ); }
-yy76:
-	++YYCURSOR;
-	{ RET(TOKEN_EQL); }
-yy78:
-	++YYCURSOR;
-	{ RET(TOKEN_OROR); }
-yy80:
-	++YYCURSOR;
-	{ RET(TOKEN_ORASSIGN); }
-yy82:
-	++YYCURSOR;
-	{ RET(TOKEN_ANDAND); }
-yy84:
-	++YYCURSOR;
-	{ RET(TOKEN_ANDASSIGN); }
-yy86:
-	++YYCURSOR;
-	{ RET(TOKEN_XORASSIGN); }
-yy88:
-	++YYCURSOR;
-	{ RET(TOKEN_MODASSIGN); }
-yy90:
-	++YYCURSOR;
-	{ RET(TOKEN_MULTASSIGN); }
-yy92:
-	++YYCURSOR;
-	{ RET(TOKEN_DECREMENT); }
-yy94:
-	++YYCURSOR;
-	{ RET(TOKEN_SUBASSIGN); }
-yy96:
-	++YYCURSOR;
-	{ RET(TOKEN_INCREMENT); }
-yy98:
-	++YYCURSOR;
-	{ RET(TOKEN_ADDASSIGN); }
-yy100:
-	++YYCURSOR;
-	{ RET(TOKEN_LEQ); }
-yy102:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy104;
-	{ RET(TOKEN_LSHIFT); }
-yy104:
-	++YYCURSOR;
-	{ RET(TOKEN_LSHIFTASSIGN); }
-yy106:
-	++YYCURSOR;
-	{ RET(TOKEN_GEQ); }
-yy108:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '=') goto yy110;
-	{ RET(TOKEN_RSHIFT); }
-yy110:
-	++YYCURSOR;
-	{ RET(TOKEN_RSHIFTASSIGN); }
-yy112:
+yy74:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy113:
+yy75:
 	if (yych <= '\r') {
-		if (yych == '\n') goto yy114;
-		if (yych <= '\f') goto yy112;
+		if (yych == '\n') goto yy76;
+		if (yych <= '\f') goto yy74;
 	} else {
 		if (yych <= '"') {
-			if (yych <= '!') goto yy112;
-			goto yy116;
+			if (yych <= '!') goto yy74;
+			goto yy77;
 		} else {
-			if (yych == '\\') goto yy115;
-			goto yy112;
+			if (yych == '\\') goto yy79;
+			goto yy74;
 		}
 	}
-yy114:
+yy76:
 	YYCURSOR = YYMARKER;
 	if (yyaccept <= 1) {
-		if (yyaccept <= 0) {
-			goto yy3;
+		if (yyaccept == 0) {
+			goto yy5;
 		} else {
-			goto yy9;
+			goto yy39;
 		}
 	} else {
-		goto yy125;
+		goto yy104;
 	}
-yy115:
+yy77:
+	++YYCURSOR;
+	{ RET(TOKEN_STRING_LITERAL); }
+yy79:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	if (yych <= 'b') {
 		if (yych <= '7') {
 			if (yych <= '&') {
-				if (yych == '"') goto yy112;
-				goto yy114;
+				if (yych == '"') goto yy74;
+				goto yy76;
 			} else {
-				if (yych <= '\'') goto yy112;
-				if (yych <= '/') goto yy114;
-				goto yy119;
+				if (yych <= '\'') goto yy74;
+				if (yych <= '/') goto yy76;
+				goto yy74;
 			}
 		} else {
 			if (yych <= '[') {
-				if (yych == '?') goto yy112;
-				goto yy114;
+				if (yych == '?') goto yy74;
+				goto yy76;
 			} else {
-				if (yych <= '\\') goto yy112;
-				if (yych <= '`') goto yy114;
-				goto yy112;
+				if (yych <= '\\') goto yy74;
+				if (yych <= '`') goto yy76;
+				goto yy74;
 			}
 		}
 	} else {
 		if (yych <= 'r') {
 			if (yych <= 'm') {
-				if (yych == 'f') goto yy112;
-				goto yy114;
+				if (yych == 'f') goto yy74;
+				goto yy76;
 			} else {
-				if (yych <= 'n') goto yy112;
-				if (yych <= 'q') goto yy114;
-				goto yy112;
+				if (yych <= 'n') goto yy74;
+				if (yych <= 'q') goto yy76;
+				goto yy74;
 			}
 		} else {
 			if (yych <= 'u') {
-				if (yych == 't') goto yy112;
-				goto yy114;
+				if (yych == 't') goto yy74;
+				goto yy76;
 			} else {
-				if (yych <= 'v') goto yy112;
-				if (yych == 'x') goto yy118;
-				goto yy114;
+				if (yych <= 'v') goto yy74;
+				if (yych == 'x') goto yy136;
+				goto yy76;
 			}
 		}
 	}
-yy116:
+yy80:
+	++YYCURSOR;
+	{ RET(TOKEN_HASHHASH); }
+yy82:
 	++YYCURSOR;
-	{ RET(TOKEN_STRING_LITERAL); }
-yy118:
+	{ RET(TOKEN_MODASSIGN); }
+yy84:
+	++YYCURSOR;
+	{ RET(TOKEN_ANDAND); }
+yy86:
+	++YYCURSOR;
+	{ RET(TOKEN_ANDASSIGN); }
+yy88:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy114;
-		if (yych <= '9') goto yy121;
-		goto yy114;
+yy89:
+	if (yych <= '\r') {
+		if (yych == '\n') goto yy76;
+		if (yych <= '\f') goto yy88;
+		goto yy76;
 	} else {
-		if (yych <= 'F') goto yy121;
-		if (yych <= '`') goto yy114;
-		if (yych <= 'f') goto yy121;
-		goto yy114;
+		if (yych <= '\'') {
+			if (yych <= '&') goto yy88;
+		} else {
+			if (yych == '\\') goto yy91;
+			goto yy88;
+		}
 	}
-yy119:
+	++YYCURSOR;
+	goto yy39;
+yy91:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= '!') {
-		if (yych <= '\n') {
-			if (yych <= '\t') goto yy112;
-			goto yy114;
+	if (yych <= 'b') {
+		if (yych <= '7') {
+			if (yych <= '&') {
+				if (yych == '"') goto yy88;
+				goto yy76;
+			} else {
+				if (yych <= '\'') goto yy88;
+				if (yych <= '/') goto yy76;
+				goto yy88;
+			}
 		} else {
-			if (yych == '\r') goto yy114;
-			goto yy112;
+			if (yych <= '[') {
+				if (yych == '?') goto yy88;
+				goto yy76;
+			} else {
+				if (yych <= '\\') goto yy88;
+				if (yych <= '`') goto yy76;
+				goto yy88;
+			}
 		}
 	} else {
-		if (yych <= '7') {
-			if (yych <= '"') goto yy116;
-			if (yych <= '/') goto yy112;
-			goto yy119;
+		if (yych <= 'r') {
+			if (yych <= 'm') {
+				if (yych == 'f') goto yy88;
+				goto yy76;
+			} else {
+				if (yych <= 'n') goto yy88;
+				if (yych <= 'q') goto yy76;
+				goto yy88;
+			}
 		} else {
-			if (yych == '\\') goto yy115;
-			goto yy112;
+			if (yych <= 'u') {
+				if (yych == 't') goto yy88;
+				goto yy76;
+			} else {
+				if (yych <= 'v') goto yy88;
+				if (yych == 'x') goto yy137;
+				goto yy76;
+			}
 		}
 	}
-yy121:
+yy92:
+	++YYCURSOR;
+	{ RET(TOKEN_MULTASSIGN); }
+yy94:
+	++YYCURSOR;
+	{ RET(TOKEN_INCREMENT); }
+yy96:
 	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= '/') {
-		if (yych <= '\f') {
-			if (yych == '\n') goto yy114;
-			goto yy112;
-		} else {
-			if (yych <= '\r') goto yy114;
-			if (yych == '"') goto yy116;
-			goto yy112;
-		}
-	} else {
-		if (yych <= '[') {
-			if (yych <= '9') goto yy121;
-			if (yych <= '@') goto yy112;
-			if (yych <= 'F') goto yy121;
-			goto yy112;
-		} else {
-			if (yych <= '\\') goto yy115;
-			if (yych <= '`') goto yy112;
-			if (yych <= 'f') goto yy121;
-			goto yy112;
-		}
-	}
-yy123:
+	{ RET(TOKEN_ADDASSIGN); }
+yy98:
+	++YYCURSOR;
+	{ RET(TOKEN_DECREMENT); }
+yy100:
+	++YYCURSOR;
+	{ RET(TOKEN_SUBASSIGN); }
+yy102:
 	yyaccept = 2;
 	YYMARKER = ++YYCURSOR;
 	if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
 	yych = *YYCURSOR;
 	if (yych <= 'G') {
 		if (yych <= 'D') {
-			if (yych <= '/') goto yy125;
-			if (yych <= '9') goto yy123;
+			if (yych <= '/') goto yy104;
+			if (yych <= '9') goto yy102;
 		} else {
-			if (yych <= 'E') goto yy126;
-			if (yych <= 'F') goto yy127;
+			if (yych <= 'E') goto yy111;
+			if (yych <= 'F') goto yy138;
 		}
 	} else {
 		if (yych <= 'e') {
-			if (yych <= 'H') goto yy127;
-			if (yych >= 'e') goto yy126;
+			if (yych <= 'H') goto yy138;
+			if (yych >= 'e') goto yy111;
 		} else {
-			if (yych == 'g') goto yy125;
-			if (yych <= 'h') goto yy127;
+			if (yych == 'g') goto yy104;
+			if (yych <= 'h') goto yy138;
 		}
 	}
-yy125:
+yy104:
 	{ RET(TOKEN_FLOAT_LITERAL); }
-yy126:
+yy105:
+	++YYCURSOR;
+	{ goto multilinecomment; }
+yy107:
+	++YYCURSOR;
+	{ goto singlelinecomment; }
+yy109:
+	++YYCURSOR;
+	{ RET(TOKEN_DIVASSIGN); }
+yy111:
 	yych = *++YYCURSOR;
 	if (yych <= ',') {
-		if (yych == '+') goto yy128;
-		goto yy114;
+		if (yych == '+') goto yy139;
+		goto yy76;
 	} else {
-		if (yych <= '-') goto yy128;
-		if (yych <= '/') goto yy114;
-		if (yych <= '9') goto yy129;
-		goto yy114;
+		if (yych <= '-') goto yy139;
+		if (yych <= '/') goto yy76;
+		if (yych <= '9') goto yy140;
+		goto yy76;
 	}
-yy127:
-	yych = *++YYCURSOR;
-	goto yy125;
-yy128:
-	yych = *++YYCURSOR;
-	if (yych <= '/') goto yy114;
-	if (yych >= ':') goto yy114;
-yy129:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'G') {
-		if (yych <= '9') {
-			if (yych <= '/') goto yy125;
-			goto yy129;
-		} else {
-			if (yych == 'F') goto yy127;
-			goto yy125;
-		}
-	} else {
-		if (yych <= 'f') {
-			if (yych <= 'H') goto yy127;
-			if (yych <= 'e') goto yy125;
-			goto yy127;
-		} else {
-			if (yych == 'h') goto yy127;
-			goto yy125;
-		}
-	}
-yy131:
+yy112:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy132:
-	if (yych <= '\r') {
-		if (yych == '\n') goto yy114;
-		if (yych <= '\f') goto yy131;
-		goto yy114;
+	if (yych <= 'U') {
+		if (yych == 'L') goto yy112;
+		if (yych <= 'T') goto yy39;
+		goto yy112;
 	} else {
-		if (yych <= '\'') {
-			if (yych <= '&') goto yy131;
-			goto yy134;
+		if (yych <= 'l') {
+			if (yych <= 'k') goto yy39;
+			goto yy112;
 		} else {
-			if (yych != '\\') goto yy131;
+			if (yych == 'u') goto yy112;
+			goto yy39;
 		}
 	}
-yy133:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'b') {
-		if (yych <= '7') {
-			if (yych <= '&') {
-				if (yych == '"') goto yy131;
-				goto yy114;
-			} else {
-				if (yych <= '\'') goto yy131;
-				if (yych <= '/') goto yy114;
-				goto yy136;
-			}
-		} else {
-			if (yych <= '[') {
-				if (yych == '?') goto yy131;
-				goto yy114;
-			} else {
-				if (yych <= '\\') goto yy131;
-				if (yych <= '`') goto yy114;
-				goto yy131;
-			}
-		}
+yy114:
+	yych = *++YYCURSOR;
+	if (yych <= '@') {
+		if (yych <= '/') goto yy76;
+		if (yych <= '9') goto yy142;
+		goto yy76;
 	} else {
-		if (yych <= 'r') {
-			if (yych <= 'm') {
-				if (yych == 'f') goto yy131;
-				goto yy114;
-			} else {
-				if (yych <= 'n') goto yy131;
-				if (yych <= 'q') goto yy114;
-				goto yy131;
-			}
-		} else {
-			if (yych <= 'u') {
-				if (yych == 't') goto yy131;
-				goto yy114;
-			} else {
-				if (yych <= 'v') goto yy131;
-				if (yych == 'x') goto yy135;
-				goto yy114;
-			}
-		}
+		if (yych <= 'F') goto yy142;
+		if (yych <= '`') goto yy76;
+		if (yych <= 'f') goto yy142;
+		goto yy76;
 	}
-yy134:
+yy115:
+	yych = *++YYCURSOR;
+	if (yych == '=') goto yy144;
+	{ RET(TOKEN_LSHIFT); }
+yy117:
+	++YYCURSOR;
+	{ RET(TOKEN_LEQ); }
+yy119:
+	++YYCURSOR;
+	{ RET(TOKEN_EQL); }
+yy121:
+	++YYCURSOR;
+	{ RET(TOKEN_GEQ); }
+yy123:
 	yych = *++YYCURSOR;
-	goto yy9;
-yy135:
+	if (yych == '=') goto yy146;
+	{ RET(TOKEN_RSHIFT); }
+yy125:
+	++YYCURSOR;
+	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
+	yych = *YYCURSOR;
+yy126:
+	if (yych <= '\f') {
+		if (yych <= 0x08) goto yy76;
+		if (yych != '\n') goto yy125;
+	} else {
+		if (yych <= '\r') goto yy129;
+		if (yych == ' ') goto yy125;
+		goto yy76;
+	}
+yy127:
+	++YYCURSOR;
+yy128:
+	{ s->line++; goto scanner_loop; }
+yy129:
+	yych = *++YYCURSOR;
+	if (yych == '\n') goto yy127;
+	goto yy128;
+yy130:
+	++YYCURSOR;
+	{ RET(TOKEN_XORASSIGN); }
+yy132:
+	++YYCURSOR;
+	{ RET(TOKEN_ORASSIGN); }
+yy134:
+	++YYCURSOR;
+	{ RET(TOKEN_OROR); }
+yy136:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	if (yych <= '@') {
-		if (yych <= '/') goto yy114;
-		if (yych <= '9') goto yy138;
-		goto yy114;
+		if (yych <= '/') goto yy76;
+		if (yych <= '9') goto yy74;
+		goto yy76;
 	} else {
-		if (yych <= 'F') goto yy138;
-		if (yych <= '`') goto yy114;
-		if (yych <= 'f') goto yy138;
-		goto yy114;
+		if (yych <= 'F') goto yy74;
+		if (yych <= '`') goto yy76;
+		if (yych <= 'f') goto yy74;
+		goto yy76;
 	}
-yy136:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= '&') {
-		if (yych <= '\n') {
-			if (yych <= '\t') goto yy131;
-			goto yy114;
-		} else {
-			if (yych == '\r') goto yy114;
-			goto yy131;
-		}
-	} else {
-		if (yych <= '7') {
-			if (yych <= '\'') goto yy134;
-			if (yych <= '/') goto yy131;
-			goto yy136;
-		} else {
-			if (yych == '\\') goto yy133;
-			goto yy131;
-		}
-	}
-yy138:
+yy137:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-	if (yych <= '/') {
-		if (yych <= '\f') {
-			if (yych == '\n') goto yy114;
-			goto yy131;
-		} else {
-			if (yych <= '\r') goto yy114;
-			if (yych == '\'') goto yy134;
-			goto yy131;
-		}
-	} else {
-		if (yych <= '[') {
-			if (yych <= '9') goto yy138;
-			if (yych <= '@') goto yy131;
-			if (yych <= 'F') goto yy138;
-			goto yy131;
-		} else {
-			if (yych <= '\\') goto yy133;
-			if (yych <= '`') goto yy131;
-			if (yych <= 'f') goto yy138;
-			goto yy131;
-		}
-	}
-yy140:
-	yyaccept = 2;
-	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych == 'E') goto yy151;
-	if (yych == 'e') goto yy151;
-	goto yy150;
-yy141:
-	yyaccept = 1;
-	YYMARKER = ++YYCURSOR;
-	if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
-	yych = *YYCURSOR;
-yy142:
-	if (yych <= 'L') {
-		if (yych <= '9') {
-			if (yych == '.') goto yy140;
-			if (yych <= '/') goto yy9;
-			goto yy141;
-		} else {
-			if (yych == 'E') goto yy143;
-			if (yych <= 'K') goto yy9;
-			goto yy144;
-		}
+	if (yych <= '@') {
+		if (yych <= '/') goto yy76;
+		if (yych <= '9') goto yy88;
+		goto yy76;
 	} else {
-		if (yych <= 'e') {
-			if (yych == 'U') goto yy144;
-			if (yych <= 'd') goto yy9;
-		} else {
-			if (yych <= 'l') {
-				if (yych <= 'k') goto yy9;
-				goto yy144;
-			} else {
-				if (yych == 'u') goto yy144;
-				goto yy9;
-			}
-		}
+		if (yych <= 'F') goto yy88;
+		if (yych <= '`') goto yy76;
+		if (yych <= 'f') goto yy88;
+		goto yy76;
 	}
-yy143:
+yy138:
+	++YYCURSOR;
+	goto yy104;
+yy139:
 	yych = *++YYCURSOR;
-	if (yych <= ',') {
-		if (yych == '+') goto yy146;
-		goto yy114;
-	} else {
-		if (yych <= '-') goto yy146;
-		if (yych <= '/') goto yy114;
-		if (yych <= '9') goto yy147;
-		goto yy114;
-	}
-yy144:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'U') {
-		if (yych == 'L') goto yy144;
-		if (yych <= 'T') goto yy9;
-		goto yy144;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy9;
-			goto yy144;
-		} else {
-			if (yych == 'u') goto yy144;
-			goto yy9;
-		}
-	}
-yy146:
-	yych = *++YYCURSOR;
-	if (yych <= '/') goto yy114;
-	if (yych >= ':') goto yy114;
-yy147:
+	if (yych <= '/') goto yy76;
+	if (yych >= ':') goto yy76;
+yy140:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	if (yych <= 'G') {
 		if (yych <= '9') {
-			if (yych <= '/') goto yy125;
-			goto yy147;
-		} else {
-			if (yych == 'F') goto yy127;
-			goto yy125;
-		}
-	} else {
-		if (yych <= 'f') {
-			if (yych <= 'H') goto yy127;
-			if (yych <= 'e') goto yy125;
-			goto yy127;
-		} else {
-			if (yych == 'h') goto yy127;
-			goto yy125;
-		}
-	}
-yy149:
-	yyaccept = 2;
-	YYMARKER = ++YYCURSOR;
-	if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
-	yych = *YYCURSOR;
-yy150:
-	if (yych <= 'G') {
-		if (yych <= 'D') {
-			if (yych <= '/') goto yy125;
-			if (yych <= '9') goto yy149;
-			goto yy125;
+			if (yych <= '/') goto yy104;
+			goto yy140;
 		} else {
-			if (yych <= 'E') goto yy155;
-			if (yych <= 'F') goto yy127;
-			goto yy125;
-		}
-	} else {
-		if (yych <= 'e') {
-			if (yych <= 'H') goto yy127;
-			if (yych <= 'd') goto yy125;
-			goto yy155;
-		} else {
-			if (yych == 'g') goto yy125;
-			if (yych <= 'h') goto yy127;
-			goto yy125;
-		}
-	}
-yy151:
-	yych = *++YYCURSOR;
-	if (yych <= ',') {
-		if (yych != '+') goto yy114;
-	} else {
-		if (yych <= '-') goto yy152;
-		if (yych <= '/') goto yy114;
-		if (yych <= '9') goto yy153;
-		goto yy114;
-	}
-yy152:
-	yych = *++YYCURSOR;
-	if (yych <= '/') goto yy114;
-	if (yych >= ':') goto yy114;
-yy153:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'G') {
-		if (yych <= '9') {
-			if (yych <= '/') goto yy125;
-			goto yy153;
-		} else {
-			if (yych == 'F') goto yy127;
-			goto yy125;
+			if (yych == 'F') goto yy138;
+			goto yy104;
 		}
 	} else {
 		if (yych <= 'f') {
-			if (yych <= 'H') goto yy127;
-			if (yych <= 'e') goto yy125;
-			goto yy127;
+			if (yych <= 'H') goto yy138;
+			if (yych <= 'e') goto yy104;
+			goto yy138;
 		} else {
-			if (yych == 'h') goto yy127;
-			goto yy125;
+			if (yych == 'h') goto yy138;
+			goto yy104;
 		}
 	}
-yy155:
-	yych = *++YYCURSOR;
-	if (yych <= ',') {
-		if (yych != '+') goto yy114;
-	} else {
-		if (yych <= '-') goto yy156;
-		if (yych <= '/') goto yy114;
-		if (yych <= '9') goto yy157;
-		goto yy114;
-	}
-yy156:
-	yych = *++YYCURSOR;
-	if (yych <= '/') goto yy114;
-	if (yych >= ':') goto yy114;
-yy157:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'G') {
-		if (yych <= '9') {
-			if (yych <= '/') goto yy125;
-			goto yy157;
-		} else {
-			if (yych == 'F') goto yy127;
-			goto yy125;
-		}
-	} else {
-		if (yych <= 'f') {
-			if (yych <= 'H') goto yy127;
-			if (yych <= 'e') goto yy125;
-			goto yy127;
-		} else {
-			if (yych == 'h') goto yy127;
-			goto yy125;
-		}
-	}
-yy159:
-	yyaccept = 1;
-	YYMARKER = ++YYCURSOR;
-	if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
-	yych = *YYCURSOR;
-yy160:
-	if (yych <= 'L') {
-		if (yych <= '9') {
-			if (yych == '.') goto yy140;
-			if (yych <= '/') goto yy9;
-			goto yy159;
-		} else {
-			if (yych == 'E') goto yy143;
-			if (yych <= 'K') goto yy9;
-			goto yy166;
-		}
-	} else {
-		if (yych <= 'e') {
-			if (yych == 'U') goto yy166;
-			if (yych <= 'd') goto yy9;
-			goto yy143;
-		} else {
-			if (yych <= 'l') {
-				if (yych <= 'k') goto yy9;
-				goto yy166;
-			} else {
-				if (yych == 'u') goto yy166;
-				goto yy9;
-			}
-		}
-	}
-yy161:
-	yych = *++YYCURSOR;
-	if (yych <= '@') {
-		if (yych <= '/') goto yy114;
-		if (yych >= ':') goto yy114;
-	} else {
-		if (yych <= 'F') goto yy162;
-		if (yych <= '`') goto yy114;
-		if (yych >= 'g') goto yy114;
-	}
-yy162:
+yy142:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
 	if (yych <= 'T') {
 		if (yych <= '@') {
-			if (yych <= '/') goto yy9;
-			if (yych <= '9') goto yy162;
-			goto yy9;
+			if (yych <= '/') goto yy39;
+			if (yych <= '9') goto yy142;
+			goto yy39;
 		} else {
-			if (yych <= 'F') goto yy162;
-			if (yych != 'L') goto yy9;
+			if (yych <= 'F') goto yy142;
+			if (yych == 'L') goto yy112;
+			goto yy39;
 		}
 	} else {
 		if (yych <= 'k') {
-			if (yych <= 'U') goto yy164;
-			if (yych <= '`') goto yy9;
-			if (yych <= 'f') goto yy162;
-			goto yy9;
+			if (yych <= 'U') goto yy112;
+			if (yych <= '`') goto yy39;
+			if (yych <= 'f') goto yy142;
+			goto yy39;
 		} else {
-			if (yych <= 'l') goto yy164;
-			if (yych != 'u') goto yy9;
-		}
-	}
-yy164:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'U') {
-		if (yych == 'L') goto yy164;
-		if (yych <= 'T') goto yy9;
-		goto yy164;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy9;
-			goto yy164;
-		} else {
-			if (yych == 'u') goto yy164;
-			goto yy9;
-		}
-	}
-yy166:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-	if (yych <= 'U') {
-		if (yych == 'L') goto yy166;
-		if (yych <= 'T') goto yy9;
-		goto yy166;
-	} else {
-		if (yych <= 'l') {
-			if (yych <= 'k') goto yy9;
-			goto yy166;
-		} else {
-			if (yych == 'u') goto yy166;
-			goto yy9;
+			if (yych <= 'l') goto yy112;
+			if (yych == 'u') goto yy112;
+			goto yy39;
 		}
 	}
-yy168:
-	++YYCURSOR;
-	if (YYLIMIT <= YYCURSOR) YYFILL(1);
-	yych = *YYCURSOR;
-yy169:
-	if (yych <= 'Z') {
-		if (yych <= '/') goto yy7;
-		if (yych <= '9') goto yy168;
-		if (yych <= '@') goto yy7;
-		goto yy168;
-	} else {
-		if (yych <= '_') {
-			if (yych <= '^') goto yy7;
-			goto yy168;
-		} else {
-			if (yych <= '`') goto yy7;
-			if (yych <= 'z') goto yy168;
-			goto yy7;
-		}
-	}
-yy170:
-	++YYCURSOR;
-	{ RET(TOKEN_DIVASSIGN); }
-yy172:
+yy144:
 	++YYCURSOR;
-	{ goto singlelinecomment; }
-yy174:
-	++YYCURSOR;
-	{ goto multilinecomment; }
-yy176:
+	{ RET(TOKEN_LSHIFTASSIGN); }
+yy146:
 	++YYCURSOR;
-	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
-	yych = *YYCURSOR;
-yy177:
-	if (yych <= '\f') {
-		if (yych <= 0x08) goto yy114;
-		if (yych != '\n') goto yy176;
-	} else {
-		if (yych <= '\r') goto yy180;
-		if (yych == ' ') goto yy176;
-		goto yy114;
-	}
-yy178:
-	++YYCURSOR;
-yy179:
-	{ s->line++; goto scanner_loop; }
-yy180:
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '\n') goto yy178;
-	goto yy179;
+	{ RET(TOKEN_RSHIFTASSIGN); }
 }
 
 
@@ -1122,42 +784,39 @@
 	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
 	yych = *YYCURSOR;
 	if (yych <= '\f') {
-		if (yych <= 0x00) goto yy188;
-		if (yych == '\n') goto yy185;
-		goto yy190;
+		if (yych <= 0x00) goto yy150;
+		if (yych == '\n') goto yy154;
+		goto yy152;
 	} else {
-		if (yych <= '\r') goto yy187;
-		if (yych != '*') goto yy190;
+		if (yych <= '\r') goto yy156;
+		if (yych == '*') goto yy157;
+		goto yy152;
 	}
-	++YYCURSOR;
-	if ((yych = *YYCURSOR) == '/') goto yy192;
-yy184:
-	{ goto multilinecomment; }
-yy185:
-	++YYCURSOR;
-yy186:
-	{
-                        s->line++;
-                        goto multilinecomment;
-                    }
-yy187:
-	yych = *++YYCURSOR;
-	if (yych == '\n') goto yy191;
-	goto yy186;
-yy188:
+yy150:
 	++YYCURSOR;
 	{
                         if (eoi)
                             RET(TOKEN_INCOMPLETE_COMMENT);
                         goto multilinecomment;
                     }
-yy190:
+yy152:
+	++YYCURSOR;
+yy153:
+	{ goto multilinecomment; }
+yy154:
+	++YYCURSOR;
+yy155:
+	{
+                        s->line++;
+                        goto multilinecomment;
+                    }
+yy156:
 	yych = *++YYCURSOR;
-	goto yy184;
-yy191:
+	if (yych == '\n') goto yy154;
+	goto yy155;
+yy157:
 	yych = *++YYCURSOR;
-	goto yy186;
-yy192:
+	if (yych != '/') goto yy153;
 	++YYCURSOR;
 	{
                         if (s->report_comments)
@@ -1190,29 +849,14 @@
 	if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
 	yych = *YYCURSOR;
 	if (yych <= '\n') {
-		if (yych <= 0x00) goto yy199;
-		if (yych <= '\t') goto yy201;
+		if (yych <= 0x00) goto yy162;
+		if (yych <= '\t') goto yy164;
+		goto yy166;
 	} else {
-		if (yych == '\r') goto yy198;
-		goto yy201;
+		if (yych == '\r') goto yy168;
+		goto yy164;
 	}
-	++YYCURSOR;
-yy197:
-	{
-                        s->line++;
-                        if (s->report_comments)
-                        {
-                            cursor = matchptr;  // so we RET('\n') next.
-                            RET(TOKEN_SINGLE_COMMENT);
-                        }
-                        token = matchptr;
-                        RET('\n');
-                    }
-yy198:
-	yych = *++YYCURSOR;
-	if (yych == '\n') goto yy203;
-	goto yy197;
-yy199:
+yy162:
 	++YYCURSOR;
 	{
                         if (eoi)
@@ -1224,13 +868,26 @@
                         }
                         goto singlelinecomment;
                     }
-yy201:
+yy164:
 	++YYCURSOR;
 	{ goto singlelinecomment; }
-yy203:
+yy166:
 	++YYCURSOR;
-	yych = *YYCURSOR;
-	goto yy197;
+yy167:
+	{
+                        s->line++;
+                        if (s->report_comments)
+                        {
+                            cursor = matchptr;  // so we RET('\n') next.
+                            RET(TOKEN_SINGLE_COMMENT);
+                        }
+                        token = matchptr;
+                        RET('\n');
+                    }
+yy168:
+	yych = *++YYCURSOR;
+	if (yych == '\n') goto yy166;
+	goto yy167;
 }
 
 
@@ -1243,238 +900,287 @@
 	if ((YYLIMIT - YYCURSOR) < 8) YYFILL(8);
 	yych = *YYCURSOR;
 	if (yych <= '\f') {
-		if (yych == '\t') goto yy208;
-		if (yych <= '\n') goto yy210;
-		goto yy208;
+		if (yych == '\t') goto yy173;
+		if (yych >= '\v') goto yy173;
 	} else {
 		if (yych <= ' ') {
-			if (yych <= 0x1F) goto yy210;
-			goto yy208;
+			if (yych >= ' ') goto yy173;
 		} else {
-			if (yych != '#') goto yy210;
+			if (yych == '#') goto yy176;
 		}
 	}
-	yyaccept = 0;
-	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych <= 'h') {
-		if (yych <= 0x1F) {
-			if (yych == '\t') goto yy214;
-		} else {
-			if (yych <= ' ') goto yy214;
-			if (yych <= 'c') goto yy207;
-			if (yych <= 'e') goto yy214;
-		}
-	} else {
-		if (yych <= 'o') {
-			if (yych <= 'i') goto yy214;
-			if (yych == 'l') goto yy214;
-		} else {
-			if (yych <= 'p') goto yy214;
-			if (yych == 'u') goto yy214;
-		}
-	}
-yy207:
+	++YYCURSOR;
+yy172:
 	{
                             token = cursor = (const uchar *) s->source;
                             limit = cursor + s->bytes_left;
                             goto scanner_loop;
                         }
-yy208:
-	++YYCURSOR;
-	yych = *YYCURSOR;
-	goto yy212;
-yy209:
-	{ goto ppdirective; }
-yy210:
-	yych = *++YYCURSOR;
-	goto yy207;
-yy211:
+yy173:
 	++YYCURSOR;
 	if (YYLIMIT <= YYCURSOR) YYFILL(1);
 	yych = *YYCURSOR;
-yy212:
 	if (yych <= '\n') {
-		if (yych == '\t') goto yy211;
-		goto yy209;
+		if (yych == '\t') goto yy173;
 	} else {
-		if (yych <= '\f') goto yy211;
-		if (yych == ' ') goto yy211;
-		goto yy209;
+		if (yych <= '\f') goto yy173;
+		if (yych == ' ') goto yy173;
 	}
-yy213:
+	{ goto ppdirective; }
+yy176:
+	yyaccept = 0;
+	yych = *(YYMARKER = ++YYCURSOR);
+	if (yych <= 'h') {
+		if (yych <= 0x1F) {
+			if (yych == '\t') goto yy178;
+			goto yy172;
+		} else {
+			if (yych <= ' ') goto yy178;
+			if (yych <= 'c') goto yy172;
+			if (yych <= 'e') goto yy178;
+			goto yy172;
+		}
+	} else {
+		if (yych <= 'o') {
+			if (yych <= 'i') goto yy178;
+			if (yych == 'l') goto yy178;
+			goto yy172;
+		} else {
+			if (yych <= 'p') goto yy178;
+			if (yych == 'u') goto yy178;
+			goto yy172;
+		}
+	}
+yy177:
 	++YYCURSOR;
 	if ((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
 	yych = *YYCURSOR;
-yy214:
+yy178:
 	if (yych <= 'h') {
 		if (yych <= ' ') {
-			if (yych == '\t') goto yy213;
-			if (yych >= ' ') goto yy213;
+			if (yych == '\t') goto yy177;
+			if (yych >= ' ') goto yy177;
 		} else {
-			if (yych <= 'c') goto yy215;
-			if (yych <= 'd') goto yy220;
-			if (yych <= 'e') goto yy217;
+			if (yych <= 'c') goto yy179;
+			if (yych <= 'd') goto yy180;
+			if (yych <= 'e') goto yy181;
 		}
 	} else {
 		if (yych <= 'o') {
-			if (yych <= 'i') goto yy218;
-			if (yych == 'l') goto yy221;
+			if (yych <= 'i') goto yy182;
+			if (yych == 'l') goto yy183;
 		} else {
-			if (yych <= 'p') goto yy216;
-			if (yych == 'u') goto yy219;
+			if (yych <= 'p') goto yy184;
+			if (yych == 'u') goto yy185;
 		}
 	}
-yy215:
+yy179:
 	YYCURSOR = YYMARKER;
-	if (yyaccept <= 0) {
-		goto yy207;
+	if (yyaccept == 0) {
+		goto yy172;
 	} else {
-		goto yy239;
+		goto yy191;
 	}
-yy216:
+yy180:
 	yych = *++YYCURSOR;
-	if (yych == 'r') goto yy272;
-	goto yy215;
-yy217:
+	if (yych == 'e') goto yy186;
+	goto yy179;
+yy181:
 	yych = *++YYCURSOR;
 	if (yych <= 'm') {
-		if (yych == 'l') goto yy255;
-		goto yy215;
+		if (yych == 'l') goto yy187;
+		goto yy179;
 	} else {
-		if (yych <= 'n') goto yy256;
-		if (yych == 'r') goto yy257;
-		goto yy215;
+		if (yych <= 'n') goto yy188;
+		if (yych == 'r') goto yy189;
+		goto yy179;
 	}
-yy218:
+yy182:
 	yych = *++YYCURSOR;
-	if (yych == 'f') goto yy238;
-	if (yych == 'n') goto yy237;
-	goto yy215;
-yy219:
+	if (yych == 'f') goto yy190;
+	if (yych == 'n') goto yy192;
+	goto yy179;
+yy183:
 	yych = *++YYCURSOR;
-	if (yych == 'n') goto yy232;
-	goto yy215;
-yy220:
-	yych = *++YYCURSOR;
-	if (yych == 'e') goto yy226;
-	goto yy215;
-yy221:
-	yych = *++YYCURSOR;
-	if (yych != 'i') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'n') goto yy215;
+	if (yych == 'i') goto yy193;
+	goto yy179;
+yy184:
 	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_LINE); }
-yy226:
+	if (yych == 'r') goto yy194;
+	goto yy179;
+yy185:
 	yych = *++YYCURSOR;
-	if (yych != 'f') goto yy215;
+	if (yych == 'n') goto yy195;
+	goto yy179;
+yy186:
 	yych = *++YYCURSOR;
-	if (yych != 'i') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'n') goto yy215;
+	if (yych == 'f') goto yy196;
+	goto yy179;
+yy187:
 	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_DEFINE); }
-yy232:
-	yych = *++YYCURSOR;
-	if (yych != 'd') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
+	if (yych == 'i') goto yy197;
+	if (yych == 's') goto yy198;
+	goto yy179;
+yy188:
 	yych = *++YYCURSOR;
-	if (yych != 'f') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_UNDEF); }
-yy237:
+	if (yych == 'd') goto yy199;
+	goto yy179;
+yy189:
 	yych = *++YYCURSOR;
-	if (yych == 'c') goto yy249;
-	goto yy215;
-yy238:
+	if (yych == 'r') goto yy200;
+	goto yy179;
+yy190:
 	yyaccept = 1;
 	yych = *(YYMARKER = ++YYCURSOR);
-	if (yych == 'd') goto yy241;
-	if (yych == 'n') goto yy240;
-yy239:
+	if (yych == 'd') goto yy201;
+	if (yych == 'n') goto yy202;
+yy191:
 	{ RET(TOKEN_PP_IF); }
-yy240:
+yy192:
+	yych = *++YYCURSOR;
+	if (yych == 'c') goto yy203;
+	goto yy179;
+yy193:
+	yych = *++YYCURSOR;
+	if (yych == 'n') goto yy204;
+	goto yy179;
+yy194:
+	yych = *++YYCURSOR;
+	if (yych == 'a') goto yy205;
+	goto yy179;
+yy195:
+	yych = *++YYCURSOR;
+	if (yych == 'd') goto yy206;
+	goto yy179;
+yy196:
+	yych = *++YYCURSOR;
+	if (yych == 'i') goto yy207;
+	goto yy179;
+yy197:
+	yych = *++YYCURSOR;
+	if (yych == 'f') goto yy208;
+	goto yy179;
+yy198:
+	yych = *++YYCURSOR;
+	if (yych == 'e') goto yy210;
+	goto yy179;
+yy199:
+	yych = *++YYCURSOR;
+	if (yych == 'i') goto yy212;
+	goto yy179;
+yy200:
+	yych = *++YYCURSOR;
+	if (yych == 'o') goto yy213;
+	goto yy179;
+yy201:
+	yych = *++YYCURSOR;
+	if (yych == 'e') goto yy214;
+	goto yy179;
+yy202:
+	yych = *++YYCURSOR;
+	if (yych == 'd') goto yy215;
+	goto yy179;
+yy203:
+	yych = *++YYCURSOR;
+	if (yych == 'l') goto yy216;
+	goto yy179;
+yy204:
+	yych = *++YYCURSOR;
+	if (yych == 'e') goto yy217;
+	goto yy179;
+yy205:
 	yych = *++YYCURSOR;
-	if (yych == 'd') goto yy245;
-	goto yy215;
-yy241:
+	if (yych == 'g') goto yy219;
+	goto yy179;
+yy206:
+	yych = *++YYCURSOR;
+	if (yych == 'e') goto yy220;
+	goto yy179;
+yy207:
+	yych = *++YYCURSOR;
+	if (yych == 'n') goto yy221;
+	goto yy179;
+yy208:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_ELIF); }
+yy210:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_ELSE); }
+yy212:
+	yych = *++YYCURSOR;
+	if (yych == 'f') goto yy222;
+	goto yy179;
+yy213:
+	yych = *++YYCURSOR;
+	if (yych == 'r') goto yy224;
+	goto yy179;
+yy214:
 	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
+	if (yych == 'f') goto yy226;
+	goto yy179;
+yy215:
+	yych = *++YYCURSOR;
+	if (yych == 'e') goto yy228;
+	goto yy179;
+yy216:
+	yych = *++YYCURSOR;
+	if (yych == 'u') goto yy229;
+	goto yy179;
+yy217:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_LINE); }
+yy219:
 	yych = *++YYCURSOR;
-	if (yych != 'f') goto yy215;
+	if (yych == 'm') goto yy230;
+	goto yy179;
+yy220:
+	yych = *++YYCURSOR;
+	if (yych == 'f') goto yy231;
+	goto yy179;
+yy221:
+	yych = *++YYCURSOR;
+	if (yych == 'e') goto yy233;
+	goto yy179;
+yy222:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_ENDIF); }
+yy224:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_ERROR); }
+yy226:
 	++YYCURSOR;
 	{ RET(TOKEN_PP_IFDEF); }
-yy245:
+yy228:
+	yych = *++YYCURSOR;
+	if (yych == 'f') goto yy235;
+	goto yy179;
+yy229:
+	yych = *++YYCURSOR;
+	if (yych == 'd') goto yy237;
+	goto yy179;
+yy230:
 	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'f') goto yy215;
+	if (yych == 'a') goto yy238;
+	goto yy179;
+yy231:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_UNDEF); }
+yy233:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_DEFINE); }
+yy235:
 	++YYCURSOR;
 	{ RET(TOKEN_PP_IFNDEF); }
-yy249:
-	yych = *++YYCURSOR;
-	if (yych != 'l') goto yy215;
+yy237:
 	yych = *++YYCURSOR;
-	if (yych != 'u') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'd') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
+	if (yych == 'e') goto yy240;
+	goto yy179;
+yy238:
+	++YYCURSOR;
+	{ RET(TOKEN_PP_PRAGMA); }
+yy240:
 	++YYCURSOR;
 	{ RET(TOKEN_PP_INCLUDE); }
-yy255:
-	yych = *++YYCURSOR;
-	if (yych == 'i') goto yy266;
-	if (yych == 's') goto yy267;
-	goto yy215;
-yy256:
-	yych = *++YYCURSOR;
-	if (yych == 'd') goto yy262;
-	goto yy215;
-yy257:
-	yych = *++YYCURSOR;
-	if (yych != 'r') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'o') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'r') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_ERROR); }
-yy262:
-	yych = *++YYCURSOR;
-	if (yych != 'i') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'f') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_ENDIF); }
-yy266:
-	yych = *++YYCURSOR;
-	if (yych == 'f') goto yy270;
-	goto yy215;
-yy267:
-	yych = *++YYCURSOR;
-	if (yych != 'e') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_ELSE); }
-yy270:
-	++YYCURSOR;
-	{ RET(TOKEN_PP_ELIF); }
-yy272:
-	yych = *++YYCURSOR;
-	if (yych != 'a') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'g') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'm') goto yy215;
-	yych = *++YYCURSOR;
-	if (yych != 'a') goto yy215;
-	++YYCURSOR;
-	{ RET(TOKEN_PP_PRAGMA); }
 }
 
 
@@ -1487,24 +1193,26 @@
 	yych = *YYCURSOR;
 	if (yych <= '#') {
 		if (yych <= '\r') {
-			if (yych <= 0x00) goto yy282;
-			if (yych <= 0x08) goto yy284;
+			if (yych <= 0x00) goto yy244;
+			if (yych <= 0x08) goto yy246;
+			goto yy248;
 		} else {
-			if (yych <= 0x1F) goto yy284;
-			if (yych == '"') goto yy284;
+			if (yych <= 0x1F) goto yy246;
+			if (yych == '"') goto yy246;
+			goto yy248;
 		}
 	} else {
 		if (yych <= '@') {
-			if (yych <= '$') goto yy284;
-			if (yych >= '@') goto yy284;
+			if (yych <= '$') goto yy246;
+			if (yych <= '?') goto yy248;
+			goto yy246;
 		} else {
-			if (yych == '`') goto yy284;
-			if (yych >= 0x7F) goto yy284;
+			if (yych == '`') goto yy246;
+			if (yych <= '~') goto yy248;
+			goto yy246;
 		}
 	}
-	++YYCURSOR;
-	{ cursor--; RET(TOKEN_BAD_CHARS); }
-yy282:
+yy244:
 	++YYCURSOR;
 	{
                         if (eoi)
@@ -1517,9 +1225,12 @@
                         }
                         goto bad_chars;
                     }
-yy284:
+yy246:
 	++YYCURSOR;
 	{ goto bad_chars; }
+yy248:
+	++YYCURSOR;
+	{ cursor--; RET(TOKEN_BAD_CHARS); }
 }