Commit 069aee1495

Travis <tssund93@gmail.com>
2020-10-28 22:44:39
don't allow a token starting with an asterisk directly following .*
1 parent b3314a8
Changed files (1)
src
src/stage1/tokenizer.cpp
@@ -223,6 +223,7 @@ enum TokenizeState {
     TokenizeStateSawGreaterThanGreaterThan,
     TokenizeStateSawDot,
     TokenizeStateSawDotDot,
+    TokenizeStateSawDotStar,
     TokenizeStateSawAtSign,
     TokenizeStateCharCode,
     TokenizeStateError,
@@ -566,9 +567,8 @@ void tokenize(Buf *buf, Tokenization *out) {
                         set_token_id(&t, t.cur_tok, TokenIdEllipsis2);
                         break;
                     case '*':
-                        t.state = TokenizeStateStart;
+                        t.state = TokenizeStateSawDotStar;
                         set_token_id(&t, t.cur_tok, TokenIdDotStar);
-                        end_token(&t);
                         break;
                     default:
                         t.pos -= 1;
@@ -591,6 +591,18 @@ void tokenize(Buf *buf, Tokenization *out) {
                         continue;
                 }
                 break;
+            case TokenizeStateSawDotStar:
+                switch (c) {
+                    case '*':
+                        tokenize_error(&t, "`.*` can't be followed by `*`.  Are you missing a space?");
+                        break;
+                    default:
+                        t.pos -= 1;
+                        end_token(&t);
+                        t.state = TokenizeStateStart;
+                        continue;
+                }
+                break;
             case TokenizeStateSawGreaterThan:
                 switch (c) {
                     case '=':