authorgravatar for tssund93@gmail.comTravis <tssund93@gmail.com> 2020-10-28 16:44:39-05:00
committergravatar for tssund93@gmail.comTravis <tssund93@gmail.com> 2020-10-29 12:03:45-05:00
log069aee149546c9394733b128f4a5d5b3f6f6a984
tree028465c8fa37d95980d9ae0f1a2082aceb78ad24
parentb3314a8be6c902c4da3ccef4b29f2ca3ae22061c

don't allow a token starting with an asterisk directly following .*


1 files changed, 14 insertions(+), 2 deletions(-)

src/stage1/tokenizer.cpp+14-2
......@@ -223,6 +223,7 @@ enum TokenizeState {
223223 TokenizeStateSawGreaterThanGreaterThan,
224224 TokenizeStateSawDot,
225225 TokenizeStateSawDotDot,
226 TokenizeStateSawDotStar,
226227 TokenizeStateSawAtSign,
227228 TokenizeStateCharCode,
228229 TokenizeStateError,
......@@ -566,9 +567,8 @@ void tokenize(Buf *buf, Tokenization *out) {
566567 set_token_id(&t, t.cur_tok, TokenIdEllipsis2);
567568 break;
568569 case '*':
569 t.state = TokenizeStateStart;
570 t.state = TokenizeStateSawDotStar;
570571 set_token_id(&t, t.cur_tok, TokenIdDotStar);
571 end_token(&t);
572572 break;
573573 default:
574574 t.pos -= 1;
......@@ -591,6 +591,18 @@ void tokenize(Buf *buf, Tokenization *out) {
591591 continue;
592592 }
593593 break;
594 case TokenizeStateSawDotStar:
595 switch (c) {
596 case '*':
597 tokenize_error(&t, "`.*` can't be followed by `*`. Are you missing a space?");
598 break;
599 default:
600 t.pos -= 1;
601 end_token(&t);
602 t.state = TokenizeStateStart;
603 continue;
604 }
605 break;
594606 case TokenizeStateSawGreaterThan:
595607 switch (c) {
596608 case '=':