@@ -475,6 +475,16 @@ impl LoopExpr {
475475 pub fn loop_token ( & self ) -> Option < SyntaxToken > { support:: token ( & self . syntax , T ! [ loop ] ) }
476476}
477477
478+ #[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
479+ pub struct TryBlockExpr {
480+ pub ( crate ) syntax : SyntaxNode ,
481+ }
482+ impl ast:: AttrsOwner for TryBlockExpr { }
483+ impl TryBlockExpr {
484+ pub fn try_token ( & self ) -> Option < SyntaxToken > { support:: token ( & self . syntax , T ! [ try] ) }
485+ pub fn body ( & self ) -> Option < BlockExpr > { support:: child ( & self . syntax ) }
486+ }
487+
478488#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
479489pub struct ForExpr {
480490 pub ( crate ) syntax : SyntaxNode ,
@@ -1467,6 +1477,7 @@ pub enum Expr {
14671477 FieldExpr ( FieldExpr ) ,
14681478 AwaitExpr ( AwaitExpr ) ,
14691479 TryExpr ( TryExpr ) ,
1480+ TryBlockExpr ( TryBlockExpr ) ,
14701481 CastExpr ( CastExpr ) ,
14711482 RefExpr ( RefExpr ) ,
14721483 PrefixExpr ( PrefixExpr ) ,
@@ -1949,6 +1960,17 @@ impl AstNode for LoopExpr {
19491960 }
19501961 fn syntax ( & self ) -> & SyntaxNode { & self . syntax }
19511962}
1963+ impl AstNode for TryBlockExpr {
1964+ fn can_cast ( kind : SyntaxKind ) -> bool { kind == TRY_BLOCK_EXPR }
1965+ fn cast ( syntax : SyntaxNode ) -> Option < Self > {
1966+ if Self :: can_cast ( syntax. kind ( ) ) {
1967+ Some ( Self { syntax } )
1968+ } else {
1969+ None
1970+ }
1971+ }
1972+ fn syntax ( & self ) -> & SyntaxNode { & self . syntax }
1973+ }
19521974impl AstNode for ForExpr {
19531975 fn can_cast ( kind : SyntaxKind ) -> bool { kind == FOR_EXPR }
19541976 fn cast ( syntax : SyntaxNode ) -> Option < Self > {
@@ -3290,6 +3312,9 @@ impl From<AwaitExpr> for Expr {
32903312impl From < TryExpr > for Expr {
32913313 fn from ( node : TryExpr ) -> Expr { Expr :: TryExpr ( node) }
32923314}
3315+ impl From < TryBlockExpr > for Expr {
3316+ fn from ( node : TryBlockExpr ) -> Expr { Expr :: TryBlockExpr ( node) }
3317+ }
32933318impl From < CastExpr > for Expr {
32943319 fn from ( node : CastExpr ) -> Expr { Expr :: CastExpr ( node) }
32953320}
@@ -3320,8 +3345,9 @@ impl AstNode for Expr {
33203345 TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR
33213346 | LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL
33223347 | BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR
3323- | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | CAST_EXPR | REF_EXPR
3324- | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL | BOX_EXPR => true ,
3348+ | METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR
3349+ | CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL
3350+ | BOX_EXPR => true ,
33253351 _ => false ,
33263352 }
33273353 }
@@ -3349,6 +3375,7 @@ impl AstNode for Expr {
33493375 FIELD_EXPR => Expr :: FieldExpr ( FieldExpr { syntax } ) ,
33503376 AWAIT_EXPR => Expr :: AwaitExpr ( AwaitExpr { syntax } ) ,
33513377 TRY_EXPR => Expr :: TryExpr ( TryExpr { syntax } ) ,
3378+ TRY_BLOCK_EXPR => Expr :: TryBlockExpr ( TryBlockExpr { syntax } ) ,
33523379 CAST_EXPR => Expr :: CastExpr ( CastExpr { syntax } ) ,
33533380 REF_EXPR => Expr :: RefExpr ( RefExpr { syntax } ) ,
33543381 PREFIX_EXPR => Expr :: PrefixExpr ( PrefixExpr { syntax } ) ,
@@ -3385,6 +3412,7 @@ impl AstNode for Expr {
33853412 Expr :: FieldExpr ( it) => & it. syntax ,
33863413 Expr :: AwaitExpr ( it) => & it. syntax ,
33873414 Expr :: TryExpr ( it) => & it. syntax ,
3415+ Expr :: TryBlockExpr ( it) => & it. syntax ,
33883416 Expr :: CastExpr ( it) => & it. syntax ,
33893417 Expr :: RefExpr ( it) => & it. syntax ,
33903418 Expr :: PrefixExpr ( it) => & it. syntax ,
@@ -3865,6 +3893,11 @@ impl std::fmt::Display for LoopExpr {
38653893 std:: fmt:: Display :: fmt ( self . syntax ( ) , f)
38663894 }
38673895}
3896+ impl std:: fmt:: Display for TryBlockExpr {
3897+ fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
3898+ std:: fmt:: Display :: fmt ( self . syntax ( ) , f)
3899+ }
3900+ }
38683901impl std:: fmt:: Display for ForExpr {
38693902 fn fmt ( & self , f : & mut std:: fmt:: Formatter ) -> std:: fmt:: Result {
38703903 std:: fmt:: Display :: fmt ( self . syntax ( ) , f)
0 commit comments