@@ -219,6 +219,8 @@ enum TokenizeState {
219219 TokenizeStateSawAtSign,
220220 TokenizeStateCharCode,
221221 TokenizeStateError,
222+ TokenizeStateLBracket,
223+ TokenizeStateLBracketStar,
222224};
223225
224226
@@ -539,8 +541,8 @@ void tokenize(Buf *buf, Tokenization *out) {
539541 end_token (&t);
540542 break ;
541543 case ' [' :
544+ t.state = TokenizeStateLBracket;
542545 begin_token (&t, TokenIdLBracket);
543- end_token (&t);
544546 break ;
545547 case ' ]' :
546548 begin_token (&t, TokenIdRBracket);
@@ -852,6 +854,30 @@ void tokenize(Buf *buf, Tokenization *out) {
852854 continue ;
853855 }
854856 break ;
857+ case TokenizeStateLBracket:
858+ switch (c) {
859+ case ' *' :
860+ t.state = TokenizeStateLBracketStar;
861+ set_token_id (&t, t.cur_tok , TokenIdBracketStarBracket);
862+ break ;
863+ default :
864+ // reinterpret as just an lbracket
865+ t.pos -= 1 ;
866+ end_token (&t);
867+ t.state = TokenizeStateStart;
868+ continue ;
869+ }
870+ break ;
871+ case TokenizeStateLBracketStar:
872+ switch (c) {
873+ case ' ]' :
874+ end_token (&t);
875+ t.state = TokenizeStateStart;
876+ break ;
877+ default :
878+ invalid_char_error (&t, c);
879+ }
880+ break ;
855881 case TokenizeStateSawPlusPercent:
856882 switch (c) {
857883 case ' =' :
@@ -1467,12 +1493,14 @@ void tokenize(Buf *buf, Tokenization *out) {
14671493 case TokenizeStateLineString:
14681494 case TokenizeStateLineStringEnd:
14691495 case TokenizeStateSawBarBar:
1496+ case TokenizeStateLBracket:
14701497 end_token (&t);
14711498 break ;
14721499 case TokenizeStateSawDotDot:
14731500 case TokenizeStateSawBackslash:
14741501 case TokenizeStateLineStringContinue:
14751502 case TokenizeStateLineStringContinueC:
1503+ case TokenizeStateLBracketStar:
14761504 tokenize_error (&t, " unexpected EOF" );
14771505 break ;
14781506 case TokenizeStateLineComment:
@@ -1509,6 +1537,7 @@ const char * token_name(TokenId id) {
15091537 case TokenIdBitShiftRight: return " >>" ;
15101538 case TokenIdBitShiftRightEq: return " >>=" ;
15111539 case TokenIdBitXorEq: return " ^=" ;
1540+ case TokenIdBracketStarBracket: return " [*]" ;
15121541 case TokenIdCharLiteral: return " CharLiteral" ;
15131542 case TokenIdCmpEq: return " ==" ;
15141543 case TokenIdCmpGreaterOrEq: return " >=" ;
0 commit comments