@@ -26,7 +26,6 @@ use hhbc::ModuleName;
2626use hhbc:: ParamEntry ;
2727use hhbc:: StringId ;
2828use hhbc:: StringIdMap ;
29- use hhbc:: TParamInfo ;
3029use hhbc:: TypedValue ;
3130use hhvm_types_ffi:: Attr ;
3231use log:: trace;
@@ -322,7 +321,6 @@ fn assemble_typedef(token_iter: &mut Lexer<'_>, case_type: bool) -> Result<hhbc:
322321
323322fn assemble_class ( token_iter : & mut Lexer < ' _ > , adata : & AdataMap ) -> Result < hhbc:: Class > {
324323 parse ! ( token_iter, ".class"
325- <tparams: assemble_tparams( ) >
326324 <upper_bounds: assemble_upper_bounds( ) >
327325 <attr: assemble_special_and_user_attrs( ) >
328326 <name: assemble_class_name( ) >
@@ -374,7 +372,6 @@ fn assemble_class(token_iter: &mut Lexer<'_>, adata: &AdataMap) -> Result<hhbc::
374372 ctx_constants : ctx_constants. into ( ) ,
375373 requirements : requirements. into ( ) ,
376374 upper_bounds : upper_bounds. into ( ) ,
377- tparams : tparams. into ( ) ,
378375 doc_comment,
379376 flags,
380377 } ;
@@ -480,7 +477,7 @@ fn assemble_const_or_type_const(
480477fn assemble_method ( token_iter : & mut Lexer < ' _ > , adata : & AdataMap ) -> Result < hhbc:: Method > {
481478 let method_tok = token_iter. peek ( ) . copied ( ) ;
482479 token_iter. expect_str ( Token :: is_decl, ".method" ) ?;
483- let tparam_info = assemble_tparam_info ( token_iter) ?;
480+ let shadowed_tparams = assemble_shadowed_tparams ( token_iter) ?;
484481 let upper_bounds = assemble_upper_bounds ( token_iter) ?;
485482 let ( attrs, attributes) = assemble_special_and_user_attrs ( token_iter) ?;
486483 let span = assemble_span ( token_iter) ?;
@@ -497,7 +494,7 @@ fn assemble_method(token_iter: &mut Lexer<'_>, adata: &AdataMap) -> Result<hhbc:
497494 attrs,
498495 params,
499496 return_type,
500- tparam_info ,
497+ shadowed_tparams ,
501498 upper_bounds,
502499 span,
503500 ) ?;
@@ -513,28 +510,19 @@ fn assemble_method(token_iter: &mut Lexer<'_>, adata: &AdataMap) -> Result<hhbc:
513510 } )
514511}
515512
516- fn parse_bool ( token_iter : & mut Lexer < ' _ > ) -> Result < bool > {
517- let tok = token_iter. expect ( Token :: is_identifier) ?;
518- let id = tok. as_str ( ) ?;
519- let b = id. parse ( ) ?;
520- Ok ( b)
521- }
522-
523- fn assemble_single_tparam_info ( token_iter : & mut Lexer < ' _ > ) -> Result < TParamInfo > {
524- parse ! ( token_iter, "[" <name: assemble_class_name( ) > <shadows_class_tparam: parse_bool> "]" ) ;
525- Ok ( TParamInfo {
526- name,
527- shadows_class_tparam,
528- } )
529- }
530-
531- fn assemble_tparam_info ( token_iter : & mut Lexer < ' _ > ) -> Result < Vec < TParamInfo > > {
532- Ok ( if token_iter. peek_is ( Token :: is_lt) {
533- parse ! ( token_iter, "<" <tparams: assemble_single_tparam_info( ) , * > ">" ) ;
534- tparams
535- } else {
536- Vec :: new ( )
537- } )
513+ fn assemble_shadowed_tparams ( token_iter : & mut Lexer < ' _ > ) -> Result < Vec < ClassName > > {
514+ token_iter. expect ( Token :: is_open_curly) ?;
515+ let mut stp = Vec :: new ( ) ;
516+ while token_iter. peek_is ( Token :: is_identifier) {
517+ stp. push ( ClassName :: intern (
518+ token_iter. expect ( Token :: is_identifier) ?. as_str ( ) ?,
519+ ) ) ;
520+ if !token_iter. peek_is ( Token :: is_close_curly) {
521+ token_iter. expect ( Token :: is_comma) ?;
522+ }
523+ }
524+ token_iter. expect ( Token :: is_close_curly) ?;
525+ Ok ( stp)
538526}
539527
540528fn assemble_method_flags ( token_iter : & mut Lexer < ' _ > ) -> Result < hhbc:: MethodFlags > {
@@ -1035,7 +1023,6 @@ where
10351023/// .function {upper bounds} [special_and_user_attrs] (span) <type_info> name (params) flags? {body}
10361024fn assemble_function ( token_iter : & mut Lexer < ' _ > , adata : & AdataMap ) -> Result < hhbc:: Function > {
10371025 token_iter. expect_str ( Token :: is_decl, ".function" ) ?;
1038- let tparam_info = assemble_tparam_info ( token_iter) ?;
10391026 let upper_bounds = assemble_upper_bounds ( token_iter) ?;
10401027 // Special and user attrs may or may not be specified. If not specified, no [] printed
10411028 let ( attrs, attributes) = assemble_special_and_user_attrs ( token_iter) ?;
@@ -1051,6 +1038,7 @@ fn assemble_function(token_iter: &mut Lexer<'_>, adata: &AdataMap) -> Result<hhb
10511038 let mut decl_map = DeclMap :: default ( ) ;
10521039 let params = assemble_params ( token_iter, & mut decl_map) ?;
10531040 let flags = assemble_function_flags ( name, token_iter) ?;
1041+ let shadowed_tparams = Default :: default ( ) ;
10541042 let body = assemble_body (
10551043 token_iter,
10561044 & mut decl_map,
@@ -1059,7 +1047,7 @@ fn assemble_function(token_iter: &mut Lexer<'_>, adata: &AdataMap) -> Result<hhb
10591047 attrs,
10601048 params,
10611049 return_type,
1062- tparam_info ,
1050+ shadowed_tparams ,
10631051 upper_bounds,
10641052 span,
10651053 ) ?;
@@ -1115,15 +1103,6 @@ fn assemble_upper_bounds(token_iter: &mut Lexer<'_>) -> Result<Vec<hhbc::UpperBo
11151103 Ok ( ubs)
11161104}
11171105
1118- fn assemble_tparams ( token_iter : & mut Lexer < ' _ > ) -> Result < Vec < ClassName > > {
1119- Ok ( if token_iter. peek_is ( Token :: is_lt) {
1120- parse ! ( token_iter, "<" <tparams: assemble_class_name( ) , * > ">" ) ;
1121- tparams
1122- } else {
1123- Vec :: new ( )
1124- } )
1125- }
1126-
11271106/// Ex: (T as <"HH\\int" "HH\\int" upper_bound>)
11281107fn assemble_upper_bound ( token_iter : & mut Lexer < ' _ > ) -> Result < hhbc:: UpperBound > {
11291108 parse ! ( token_iter, "(" <id: id> "as" <tis: assemble_type_info( TypeInfoKind :: NotEnumOrTypeDef ) , * > ")" ) ;
@@ -1395,7 +1374,7 @@ fn assemble_body(
13951374 attrs : hhbc:: Attr ,
13961375 params : Vec < ParamEntry > ,
13971376 return_type : Maybe < hhbc:: TypeInfo > ,
1398- tparam_info : Vec < TParamInfo > ,
1377+ shadowed_tparams : Vec < ClassName > ,
13991378 upper_bounds : Vec < hhbc:: UpperBound > ,
14001379 span : hhbc:: Span ,
14011380) -> Result < hhbc:: Body > {
@@ -1457,7 +1436,7 @@ fn assemble_body(
14571436 is_memoize_wrapper_lsb,
14581437 doc_comment,
14591438 return_type,
1460- tparam_info : tparam_info . into ( ) ,
1439+ shadowed_tparams : shadowed_tparams . into ( ) ,
14611440 upper_bounds : upper_bounds. into ( ) ,
14621441 span,
14631442 repr : hhbc:: BcRepr {
0 commit comments