@@ -47,7 +47,10 @@ public class Scanner {
47
47
private int typeParameterLevel ;
48
48
49
49
public Scanner (
50
- ErrorReporter errorReporter , CommentRecorder commentRecorder , SourceFile file , int offset ) {
50
+ ErrorReporter errorReporter ,
51
+ CommentRecorder commentRecorder ,
52
+ SourceFile file ,
53
+ int offset ) {
51
54
this .errorReporter = errorReporter ;
52
55
this .commentRecorder = commentRecorder ;
53
56
this .source = file ;
@@ -622,9 +625,16 @@ private Token scanToken() {
622
625
return createToken (TokenType .BAR , beginToken );
623
626
}
624
627
case '#' :
625
- return createToken (TokenType .POUND , beginToken );
626
- // TODO: add NumberToken
627
- // TODO: character following NumericLiteral must not be an IdentifierStart or DecimalDigit
628
+ // Shebang is not actually ever parsed here (when used correctly, it's handled above in the
629
+ // skipComments() call) so its token is an error.
630
+ if (peek ('!' )) {
631
+ reportError (getPosition (index ), "Shebang comment must be at the start of the file" );
632
+ } else {
633
+ reportError (getPosition (index ), "Invalid usage of #" );
634
+ }
635
+ return createToken (TokenType .ERROR , beginToken );
636
+ // TODO: add NumberToken
637
+ // TODO: character following NumericLiteral must not be an IdentifierStart or DecimalDigit
628
638
case '0' :
629
639
return scanPostZero (beginToken );
630
640
case '1' :
@@ -982,7 +992,7 @@ private SkipTemplateCharactersResult skipTemplateCharacters() {
982
992
if (peekChar (1 ) == '{' ) {
983
993
return result ;
984
994
}
985
- // Fall through.
995
+ // Fall through.
986
996
default :
987
997
nextChar ();
988
998
}
@@ -1046,15 +1056,15 @@ private SkipTemplateCharactersResult skipTemplateCharacters() {
1046
1056
}
1047
1057
return null ;
1048
1058
}
1049
- // https://tc39.es/ecma262/#prod-TemplateEscapeSequence
1059
+ // https://tc39.es/ecma262/#prod-TemplateEscapeSequence
1050
1060
case '\\' :
1051
1061
case 'b' :
1052
1062
case 'f' :
1053
1063
case 'n' :
1054
1064
case 'r' :
1055
1065
case 't' :
1056
1066
case 'v' :
1057
- // special meaning in template literal
1067
+ // special meaning in template literal
1058
1068
case '$' :
1059
1069
case '`' :
1060
1070
return null ;
0 commit comments