@@ -143,6 +143,29 @@ class Exec extends Exec_ {
143143 override Stmt getASubStatement ( ) { none ( ) }
144144}
145145
146+ /** An except group statement (part of a `try` statement), such as `except* IOError as err:` */
147+ class ExceptGroupStmt extends ExceptGroupStmt_ {
148+ /* syntax: except Expr [ as Expr ]: */
149+ /** Gets the immediately enclosing try statement */
150+ Try getTry ( ) { result .getAHandler ( ) = this }
151+
152+ override Expr getASubExpression ( ) {
153+ result = this .getName ( )
154+ or
155+ result = this .getType ( )
156+ }
157+
158+ override Stmt getASubStatement ( ) { result = this .getAStmt ( ) }
159+
160+ override Stmt getLastStatement ( ) { result = this .getBody ( ) .getLastItem ( ) .getLastStatement ( ) }
161+
162+ override Expr getType ( ) {
163+ result = super .getType ( ) and not result instanceof Tuple
164+ or
165+ result = super .getType ( ) .( Tuple ) .getAnElt ( )
166+ }
167+ }
168+
146169/** An except statement (part of a `try` statement), such as `except IOError as err:` */
147170class ExceptStmt extends ExceptStmt_ {
148171 /* syntax: except Expr [ as Expr ]: */
@@ -364,10 +387,10 @@ class Try extends Try_ {
364387 result = this .getAnOrelse ( )
365388 }
366389
367- override ExceptStmt getHandler ( int i ) { result = Try_ .super .getHandler ( i ) }
390+ override Stmt getHandler ( int i ) { result = Try_ .super .getHandler ( i ) }
368391
369392 /** Gets an exception handler of this try statement. */
370- override ExceptStmt getAHandler ( ) { result = Try_ .super .getAHandler ( ) }
393+ override Stmt getAHandler ( ) { result = Try_ .super .getAHandler ( ) }
371394
372395 override Stmt getLastStatement ( ) {
373396 result = this .getFinalbody ( ) .getLastItem ( ) .getLastStatement ( )
0 commit comments