From 069aee149546c9394733b128f4a5d5b3f6f6a984 Mon Sep 17 00:00:00 2001 From: Travis Date: Wed, 28 Oct 2020 16:44:39 -0500 Subject: [PATCH] don't allow a token starting with an asterisk directly following .* --- src/stage1/tokenizer.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/stage1/tokenizer.cpp b/src/stage1/tokenizer.cpp index f597acb701e1a063701e1a4f147f4ea4d1ec1d2e..bfb70943d80aeca8558fe509f8bb34985a0621a5 100644 --- a/src/stage1/tokenizer.cpp +++ b/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 '=': -- 2.54.0