@@ -2,7 +2,7 @@ use std::fmt;
22use std:: fmt:: { Display , Formatter } ;
33
44use crate :: decompiler:: ast:: {
5- Call , Class , Constant , ConstructorCall , Expr , Method , Operation , Statement ,
5+ Class , Constant , ConstructorCall , Expr , Method , Operation , Statement ,
66} ;
77use crate :: types:: { Function , RefField , Type } ;
88use crate :: Bytecode ;
@@ -245,13 +245,12 @@ impl Statement {
245245 } => {
246246 if * declaration { "var " } else { "" } { disp!( variable) } " = " { disp!( assign) } ";"
247247 }
248- Statement :: Call ( Call { fun , args } ) => {
249- { disp!( fun ) } "(" { fmtools :: join ( ", " , args . iter ( ) . map ( |e| disp! ( e ) ) ) } ") ;"
248+ Statement :: ExprStatement ( expr ) => {
249+ { disp!( expr ) } ";"
250250 }
251251 Statement :: Return ( expr) => {
252- "return " { disp!( expr ) } ";"
252+ "return" if let Some ( e ) = expr { " " { disp!( e ) } } ";"
253253 }
254- Statement :: ReturnVoid => "return;" ,
255254 Statement :: If { cond, stmts } => {
256255 "if (" { disp!( cond) } ") {\n "
257256 let indent2 = indent. inc_nesting( ) ;
@@ -268,6 +267,24 @@ impl Statement {
268267 }
269268 { indent} "}"
270269 }
270+ Statement :: Switch { arg, default , cases} => {
271+ "switch (" { disp!( arg) } ") {\n "
272+ let indent2 = indent. inc_nesting( ) ;
273+ let indent3 = indent2. inc_nesting( ) ;
274+ if !default . is_empty( ) {
275+ { indent2} "default:\n "
276+ for stmt in default {
277+ { indent3} { stmt. display( & indent3, code, f) } "\n "
278+ }
279+ }
280+ for ( pattern, stmts) in cases {
281+ { indent2} "case " { disp!( pattern) } ":\n "
282+ for stmt in stmts {
283+ { indent3} { stmt. display( & indent3, code, f) } "\n "
284+ }
285+ }
286+ { indent} "}"
287+ }
271288 Statement :: While { cond, stmts } => {
272289 "while (" { disp!( cond) } ") {\n "
273290 let indent2 = indent. inc_nesting( ) ;
0 commit comments