@@ -122,9 +122,7 @@ export class CFGBuilder {
122122 return this . processWhileStatement ( node ) ;
123123 case "do_statement" :
124124 return this . processDoStatement ( node ) ;
125- case "expression_switch_statement" :
126- case "type_switch_statement" :
127- case "select_statement" :
125+ case "switch_statement" :
128126 return this . processSwitchlike ( node ) ;
129127 case "return_statement" : {
130128 const returnNode = this . addNode ( "RETURN" , node . text ) ;
@@ -211,42 +209,49 @@ export class CFGBuilder {
211209 if ( previous ) {
212210 this . addEdge ( previous , mergeNode , "alternative" ) ;
213211 }
212+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
213+ if ( fallthrough ) {
214+ this . addEdge ( fallthrough , mergeNode , "regular" ) ;
215+ }
214216 }
215217
216218 private collectCases (
217219 switchSyntax : Parser . SyntaxNode ,
218220 blockHandler : BlockHandler ,
219221 ) : Case [ ] {
220222 const cases : Case [ ] = [ ] ;
221- const caseTypes = [
222- "default_case" ,
223- "communication_case" ,
224- "type_case" ,
225- "expression_case" ,
226- ] ;
227- switchSyntax . namedChildren
223+ const caseTypes = [ "case_statement" ] ;
224+ switchSyntax . namedChildren [ 1 ] . namedChildren
228225 . filter ( ( child ) => caseTypes . includes ( child . type ) )
229226 . forEach ( ( caseSyntax ) => {
230227 const isDefault = caseSyntax . type === "default_case" ;
231228
232229 const consequence = caseSyntax . namedChildren . slice ( isDefault ? 0 : 1 ) ;
233- const hasFallthrough = consequence
234- . map ( ( node ) => node . type )
235- . includes ( "fallthrough_statement" ) ;
230+ const hasFallthrough = true ;
236231
237232 const conditionNode = this . addNode (
238233 "CASE_CONDITION" ,
239234 isDefault ? "default" : ( caseSyntax . firstNamedChild ?. text ?? "" ) ,
240235 ) ;
241- const consequenceNode = blockHandler . update (
236+ // let consequenceBlock;
237+ // if (consequence.length) {
238+ // consequenceBlock = blockHandler.update(
239+ // this.processStatements(consequence),
240+ // );
241+ // } else {
242+ // const consequenceNode = this.addNode("EMPTY", "empty case body");
243+ // consequenceBlock = { entry: consequenceNode, exit: consequenceNode };
244+ // }
245+
246+ const consequenceBlock = blockHandler . update (
242247 this . processStatements ( consequence ) ,
243248 ) ;
244249
245250 cases . push ( {
246251 conditionEntry : conditionNode ,
247252 conditionExit : conditionNode ,
248- consequenceEntry : consequenceNode . entry ,
249- consequenceExit : consequenceNode . exit ,
253+ consequenceEntry : consequenceBlock . entry ,
254+ consequenceExit : consequenceBlock . exit ,
250255 alternativeExit : conditionNode ,
251256 hasFallthrough,
252257 isDefault,
0 commit comments