@@ -77,6 +77,7 @@ impl<'buf, 'ttb, 'sco> LintSource<'buf, 'ttb, 'sco> {
7777 Expr :: UnOp ( un) => match un. op . token {
7878 Token :: Dash => self . check_negate ( un) ,
7979 Token :: Exclam => self . check_not ( un) ,
80+ Token :: Try => self . check_try ( un) ,
8081 Token :: Ampersand => self . check_borrow_ro ( un) ,
8182 Token :: Asterisk => self . check_borrow_mut ( un) ,
8283 Token :: Copy => self . check_copy ( un) ,
@@ -112,6 +113,7 @@ impl<'buf, 'ttb, 'sco> LintSource<'buf, 'ttb, 'sco> {
112113 Expr :: ArgDef ( arg) => self . check_arg_def ( & arg) ,
113114 Expr :: ArrayType ( arr) => self . check_array_type ( & arr) ,
114115 Expr :: ArrayAccess ( arr) => self . check_array_access ( & arr) ,
116+ Expr :: UndefBubble ( u) => self . check_undefined_bubble ( & u) ,
115117 _ => panic ! ( "type-lang linter issue, expr not implemented {:?}" , to_cmp) ,
116118 }
117119 }
@@ -750,16 +752,22 @@ impl<'buf, 'ttb, 'sco> LintSource<'buf, 'ttb, 'sco> {
750752 return ok_tree ! ( Copy , unop, curried) ;
751753 }
752754
755+ pub fn check_undefined_bubble ( & mut self , un : & UndefBubble ) -> ResultTreeType {
756+ let result = self . lint_recurse ( & un. prev ) ?;
757+ let unop = UnaryOp {
758+ val : result. 0 ,
759+ curried : result. 1 ,
760+ } ;
761+ let curried = unop. curried . clone ( ) ;
762+ return ok_tree ! ( BubbleUndef , unop, curried) ;
763+ }
764+
753765 pub fn check_clone ( & mut self , un : & UnOp ) -> ResultTreeType {
754766 let result = self . lint_recurse ( & un. val ) ?;
755- let mut unop = UnaryOp {
767+ let unop = UnaryOp {
756768 val : result. 0 ,
757769 curried : result. 1 ,
758770 } ;
759- match unop. val . as_ref ( ) . as_ref ( ) {
760- TypeTree :: BoolValue ( _) => unop. curried = Ty :: Bool ,
761- _ => panic ! ( "clone check failed" ) ,
762- }
763771 let curried = unop. curried . clone ( ) ;
764772 return ok_tree ! ( Clone , unop, curried) ;
765773 }
@@ -896,6 +904,16 @@ impl<'buf, 'ttb, 'sco> LintSource<'buf, 'ttb, 'sco> {
896904 return ok_tree ! ( NotEq , binop, curried) ;
897905 }
898906
907+ pub fn check_try ( & mut self , un : & UnOp ) -> ResultTreeType {
908+ let result = self . lint_recurse ( & un. val ) ?;
909+ let unop = UnaryOp {
910+ val : result. 0 ,
911+ curried : result. 1 ,
912+ } ;
913+ let curried = unop. curried . clone ( ) ;
914+ return ok_tree ! ( BubbleError , unop, curried) ;
915+ }
916+
899917 pub fn check_not ( & mut self , un : & UnOp ) -> ResultTreeType {
900918 let result = self . lint_recurse ( & un. val ) ?;
901919 let mut unop = UnaryOp {
0 commit comments