@@ -18,7 +18,8 @@ import {
1818 Token ,
1919 Range ,
2020 CommentHandler ,
21- IdentifierHandling
21+ IdentifierHandling ,
22+ isIllegalVariableIdentifier
2223} from "./tokenizer" ;
2324
2425import {
@@ -815,6 +816,12 @@ export class Parser extends DiagnosticEmitter {
815816 return null ;
816817 }
817818 var identifier = Node . createIdentifierExpression ( tn . readIdentifier ( ) , tn . range ( ) ) ;
819+ if ( isIllegalVariableIdentifier ( identifier . text ) ) {
820+ this . error (
821+ DiagnosticCode . Identifier_expected ,
822+ identifier . range
823+ ) ;
824+ }
818825 var flags = parentFlags ;
819826 if ( tn . skip ( Token . EXCLAMATION ) ) {
820827 flags |= CommonFlags . DEFINITE_ASSIGNMENT ;
@@ -1780,10 +1787,17 @@ export class Parser extends DiagnosticEmitter {
17801787
17811788 var readonlyStart : i32 = 0 ;
17821789 var readonlyEnd : i32 = 0 ;
1783- if ( tn . skip ( Token . READONLY ) ) {
1784- flags |= CommonFlags . READONLY ;
1785- readonlyStart = tn . tokenPos ;
1786- readonlyEnd = tn . pos ;
1790+ if ( tn . peek ( ) == Token . READONLY ) {
1791+ let state = tn . mark ( ) ;
1792+ tn . next ( ) ;
1793+ if ( tn . peek ( ) != Token . COLON ) { // modifier
1794+ tn . discard ( state ) ;
1795+ flags |= CommonFlags . READONLY ;
1796+ readonlyStart = tn . tokenPos ;
1797+ readonlyEnd = tn . pos ;
1798+ } else { // identifier
1799+ tn . reset ( state ) ;
1800+ }
17871801 }
17881802
17891803 // check if accessor: ('get' | 'set') ^\n Identifier
@@ -3426,7 +3440,9 @@ export class Parser extends DiagnosticEmitter {
34263440 ) ;
34273441 }
34283442 case Token . IDENTIFIER : {
3429- let identifier = Node . createIdentifierExpression ( tn . readIdentifier ( ) , tn . range ( startPos , tn . pos ) ) ;
3443+ let identifierText = tn . readIdentifier ( ) ;
3444+ if ( identifierText == "null" ) return Node . createNullExpression ( tn . range ( ) ) ; // special
3445+ let identifier = Node . createIdentifierExpression ( identifierText , tn . range ( startPos , tn . pos ) ) ;
34303446 if ( tn . peek ( true ) == Token . EQUALS_GREATERTHAN && ! tn . nextTokenOnNewLine ) {
34313447 return this . parseFunctionExpressionCommon (
34323448 tn ,
0 commit comments