@@ -89,6 +89,7 @@ extern char *yytext;
89
89
%token TRAIT
90
90
%token TYPE
91
91
%token UNSAFE
92
+ %token DEFAULT
92
93
%token USE
93
94
%token WHILE
94
95
%token CONTINUE
@@ -534,6 +535,11 @@ maybe_unsafe
534
535
| %empty { $$ = mk_none(); }
535
536
;
536
537
538
+ maybe_default_impl
539
+ : IMPL { $$ = mk_none(); }
540
+ | DEFAULT IMPL { $$ = $1 }
541
+ ;
542
+
537
543
trait_method
538
544
: type_method { $$ = mk_node("Required", 1, $1); }
539
545
| method { $$ = mk_node("Provided", 1, $1); }
@@ -588,27 +594,27 @@ impl_method
588
594
// they are ambiguous with traits. We do the same here, regrettably,
589
595
// by splitting ty into ty and ty_prim.
590
596
item_impl
591
- : maybe_unsafe IMPL generic_params ty_prim_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
597
+ : maybe_unsafe maybe_default_impl generic_params ty_prim_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
592
598
{
593
- $$ = mk_node("ItemImpl", 6, $1, $3, $4, $5, $7, $8);
599
+ $$ = mk_node("ItemImpl", 6, $1, $3, $4, $5, $7, $8, $2 );
594
600
}
595
- | maybe_unsafe IMPL generic_params '(' ty ')' maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
601
+ | maybe_unsafe maybe_default_impl generic_params '(' ty ')' maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
596
602
{
597
- $$ = mk_node("ItemImpl", 6, $1, $3, 5, $6, $9, $10);
603
+ $$ = mk_node("ItemImpl", 6, $1, $3, 5, $6, $9, $10, $2 );
598
604
}
599
- | maybe_unsafe IMPL generic_params trait_ref FOR ty_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
605
+ | maybe_unsafe maybe_default_impl generic_params trait_ref FOR ty_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
600
606
{
601
- $$ = mk_node("ItemImpl", 6, $3, $4, $6, $7, $9, $10);
607
+ $$ = mk_node("ItemImpl", 6, $3, $4, $6, $7, $9, $10, $2 );
602
608
}
603
- | maybe_unsafe IMPL generic_params '!' trait_ref FOR ty_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
609
+ | maybe_unsafe maybe_default_impl generic_params '!' trait_ref FOR ty_sum maybe_where_clause '{' maybe_inner_attrs maybe_impl_items '}'
604
610
{
605
- $$ = mk_node("ItemImplNeg", 7, $1, $3, $5, $7, $8, $10, $11);
611
+ $$ = mk_node("ItemImplNeg", 7, $1, $3, $5, $7, $8, $10, $11, $2 );
606
612
}
607
- | maybe_unsafe IMPL generic_params trait_ref FOR DOTDOT '{' '}'
613
+ | maybe_unsafe maybe_default_impl generic_params trait_ref FOR DOTDOT '{' '}'
608
614
{
609
615
$$ = mk_node("ItemImplDefault", 3, $1, $3, $4);
610
616
}
611
- | maybe_unsafe IMPL generic_params '!' trait_ref FOR DOTDOT '{' '}'
617
+ | maybe_unsafe maybe_default_impl generic_params '!' trait_ref FOR DOTDOT '{' '}'
612
618
{
613
619
$$ = mk_node("ItemImplDefaultNeg", 3, $1, $3, $4);
614
620
}
@@ -1935,4 +1941,4 @@ brackets_delimited_token_trees
1935
1941
$2,
1936
1942
mk_node("TTTok", 1, mk_atom("]")));
1937
1943
}
1938
- ;
1944
+ ;
0 commit comments