@@ -819,18 +819,20 @@ export class Parser extends DiagnosticEmitter {
819
819
return null ;
820
820
}
821
821
var members = new Array < EnumValueDeclaration > ( ) ;
822
- if ( ! tn . skip ( Token . CLOSEBRACE ) ) {
823
- do {
824
- let member = this . parseEnumValue ( tn , CommonFlags . NONE ) ;
825
- if ( ! member ) return null ;
826
- members . push ( < EnumValueDeclaration > member ) ;
827
- } while ( tn . skip ( Token . COMMA ) ) ;
828
- if ( ! tn . skip ( Token . CLOSEBRACE ) ) {
829
- this . error (
830
- DiagnosticCode . _0_expected ,
831
- tn . range ( ) , "}"
832
- ) ;
833
- return null ;
822
+ while ( ! tn . skip ( Token . CLOSEBRACE ) ) {
823
+ let member = this . parseEnumValue ( tn , CommonFlags . NONE ) ;
824
+ if ( ! member ) return null ;
825
+ members . push ( < EnumValueDeclaration > member ) ;
826
+ if ( ! tn . skip ( Token . COMMA ) ) {
827
+ if ( tn . skip ( Token . CLOSEBRACE ) ) {
828
+ break ;
829
+ } else {
830
+ this . error (
831
+ DiagnosticCode . _0_expected ,
832
+ tn . range ( ) , "}"
833
+ ) ;
834
+ return null ;
835
+ }
834
836
}
835
837
}
836
838
var ret = Node . createEnumDeclaration (
@@ -900,17 +902,21 @@ export class Parser extends DiagnosticEmitter {
900
902
901
903
var typeParameters = new Array < TypeParameterNode > ( ) ;
902
904
if ( ! tn . skip ( Token . GREATERTHAN ) ) {
903
- do {
905
+ while ( ! tn . skip ( Token . GREATERTHAN ) ) {
904
906
let typeParameter = this . parseTypeParameter ( tn ) ;
905
907
if ( ! typeParameter ) return null ;
906
908
typeParameters . push ( < TypeParameterNode > typeParameter ) ;
907
- } while ( tn . skip ( Token . COMMA ) ) ;
908
- if ( ! tn . skip ( Token . GREATERTHAN ) ) {
909
- this . error (
910
- DiagnosticCode . _0_expected ,
911
- tn . range ( ) , ">"
912
- ) ;
913
- return null ;
909
+ if ( ! tn . skip ( Token . COMMA ) ) {
910
+ if ( tn . skip ( Token . GREATERTHAN ) ) {
911
+ break ;
912
+ } else {
913
+ this . error (
914
+ DiagnosticCode . _0_expected ,
915
+ tn . range ( ) , ">"
916
+ ) ;
917
+ return null ;
918
+ }
919
+ }
914
920
}
915
921
} else {
916
922
this . error (
@@ -971,45 +977,47 @@ export class Parser extends DiagnosticEmitter {
971
977
var seenOptional = false ;
972
978
var reportedRest = false ;
973
979
974
- if ( tn . peek ( ) != Token . CLOSEPAREN ) {
975
- do {
976
- let param = this . parseParameter ( tn , isConstructor ) ;
977
- if ( ! param ) return null ;
978
- if ( seenRest && ! reportedRest ) {
980
+ while ( ! tn . skip ( Token . CLOSEPAREN ) ) {
981
+ let param = this . parseParameter ( tn , isConstructor ) ;
982
+ if ( ! param ) return null ;
983
+ if ( seenRest && ! reportedRest ) {
984
+ this . error (
985
+ DiagnosticCode . A_rest_parameter_must_be_last_in_a_parameter_list ,
986
+ seenRest . name . range
987
+ ) ;
988
+ reportedRest = true ;
989
+ }
990
+ switch ( param . parameterKind ) {
991
+ default : {
992
+ if ( seenOptional ) {
993
+ this . error (
994
+ DiagnosticCode . A_required_parameter_cannot_follow_an_optional_parameter ,
995
+ param . name . range
996
+ ) ;
997
+ }
998
+ break ;
999
+ }
1000
+ case ParameterKind . OPTIONAL : {
1001
+ seenOptional = true ;
1002
+ break ;
1003
+ }
1004
+ case ParameterKind . REST : {
1005
+ seenRest = param ;
1006
+ break ;
1007
+ }
1008
+ }
1009
+ parameters . push ( param ) ;
1010
+ if ( ! tn . skip ( Token . COMMA ) ) {
1011
+ if ( tn . skip ( Token . CLOSEPAREN ) ) {
1012
+ break ;
1013
+ } else {
979
1014
this . error (
980
- DiagnosticCode . A_rest_parameter_must_be_last_in_a_parameter_list ,
981
- seenRest . name . range
1015
+ DiagnosticCode . _0_expected ,
1016
+ tn . range ( ) , ")"
982
1017
) ;
983
- reportedRest = true ;
984
- }
985
- switch ( param . parameterKind ) {
986
- default : {
987
- if ( seenOptional ) {
988
- this . error (
989
- DiagnosticCode . A_required_parameter_cannot_follow_an_optional_parameter ,
990
- param . name . range
991
- ) ;
992
- }
993
- break ;
994
- }
995
- case ParameterKind . OPTIONAL : {
996
- seenOptional = true ;
997
- break ;
998
- }
999
- case ParameterKind . REST : {
1000
- seenRest = param ;
1001
- break ;
1002
- }
1018
+ return null ;
1003
1019
}
1004
- parameters . push ( param ) ;
1005
- } while ( tn . skip ( Token . COMMA ) ) ;
1006
- }
1007
- if ( ! tn . skip ( Token . CLOSEPAREN ) ) {
1008
- this . error (
1009
- DiagnosticCode . _0_expected ,
1010
- tn . range ( ) , ")"
1011
- ) ;
1012
- return null ;
1020
+ }
1013
1021
}
1014
1022
return parameters ;
1015
1023
}
@@ -2877,23 +2885,24 @@ export class Parser extends DiagnosticEmitter {
2877
2885
// ArrayLiteralExpression
2878
2886
case Token . OPENBRACKET : {
2879
2887
let elementExpressions = new Array < Expression | null > ( ) ;
2880
- if ( ! tn . skip ( Token . CLOSEBRACKET ) ) {
2881
- do {
2882
- if ( tn . peek ( ) == Token . COMMA ) {
2883
- expr = null ; // omitted
2888
+ while ( ! tn . skip ( Token . CLOSEBRACKET ) ) {
2889
+ if ( tn . peek ( ) == Token . COMMA ) {
2890
+ expr = null ; // omitted
2891
+ } else {
2892
+ expr = this . parseExpression ( tn , Precedence . COMMA + 1 ) ;
2893
+ if ( ! expr ) return null ;
2894
+ }
2895
+ elementExpressions . push ( expr ) ;
2896
+ if ( ! tn . skip ( Token . COMMA ) ) {
2897
+ if ( tn . skip ( Token . CLOSEBRACKET ) ) {
2898
+ break ;
2884
2899
} else {
2885
- expr = this . parseExpression ( tn , Precedence . COMMA + 1 ) ;
2886
- if ( ! expr ) return null ;
2900
+ this . error (
2901
+ DiagnosticCode . _0_expected ,
2902
+ tn . range ( ) , "]"
2903
+ ) ;
2904
+ return null ;
2887
2905
}
2888
- elementExpressions . push ( expr ) ;
2889
- if ( tn . peek ( ) == Token . CLOSEBRACKET ) break ;
2890
- } while ( tn . skip ( Token . COMMA ) ) ;
2891
- if ( ! tn . skip ( Token . CLOSEBRACKET ) ) {
2892
- this . error (
2893
- DiagnosticCode . _0_expected ,
2894
- tn . range ( ) , "]"
2895
- ) ;
2896
- return null ;
2897
2906
}
2898
2907
}
2899
2908
return Node . createArrayLiteralExpression ( elementExpressions , tn . range ( startPos , tn . pos ) ) ;
@@ -2979,6 +2988,9 @@ export class Parser extends DiagnosticEmitter {
2979
2988
if ( ! tn . skip ( Token . LESSTHAN ) ) return null ;
2980
2989
var typeArguments = new Array < CommonTypeNode > ( ) ;
2981
2990
do {
2991
+ if ( tn . peek ( ) === Token . GREATERTHAN ) {
2992
+ break ;
2993
+ }
2982
2994
let type = this . parseType ( tn , true , true ) ;
2983
2995
if ( ! type ) {
2984
2996
tn . reset ( state ) ;
@@ -3000,18 +3012,20 @@ export class Parser extends DiagnosticEmitter {
3000
3012
// at '(': (Expression (',' Expression)*)? ')'
3001
3013
3002
3014
var args = new Array < Expression > ( ) ;
3003
- if ( ! tn . skip ( Token . CLOSEPAREN ) ) {
3004
- do {
3005
- let expr = this . parseExpression ( tn , Precedence . COMMA + 1 ) ;
3006
- if ( ! expr ) return null ;
3007
- args . push ( expr ) ;
3008
- } while ( tn . skip ( Token . COMMA ) ) ;
3009
- if ( ! tn . skip ( Token . CLOSEPAREN ) ) {
3010
- this . error (
3011
- DiagnosticCode . _0_expected ,
3012
- tn . range ( ) , ")"
3013
- ) ;
3014
- return null ;
3015
+ while ( ! tn . skip ( Token . CLOSEPAREN ) ) {
3016
+ let expr = this . parseExpression ( tn , Precedence . COMMA + 1 ) ;
3017
+ if ( ! expr ) return null ;
3018
+ args . push ( expr ) ;
3019
+ if ( ! tn . skip ( Token . COMMA ) ) {
3020
+ if ( tn . skip ( Token . CLOSEPAREN ) ) {
3021
+ break ;
3022
+ } else {
3023
+ this . error (
3024
+ DiagnosticCode . _0_expected ,
3025
+ tn . range ( ) , ")"
3026
+ ) ;
3027
+ return null ;
3028
+ }
3015
3029
}
3016
3030
}
3017
3031
return args ;
0 commit comments