Prechádzať zdrojové kódy

[cs] don't generate redundant switch in __hx_cast functions

Dan Korostelev 11 rokov pred
rodič
commit
0e5dc8c1f0
1 zmenil súbory, kde vykonal 13 pridanie a 9 odobranie
  1. 13 9
      gencommon.ml

+ 13 - 9
gencommon.ml

@@ -4506,15 +4506,19 @@ struct
 													etype = gen.gcon.basic.tvoid;
 													epos = pos
 												};
-												(* switch(field) { ... } *)
-												{
-													eexpr = TSwitch(local_field, fields_to_cases fields, Some(
-														(* default: Reflect.setField(new_me, field, Reflect.field(this, field)) *)
-														gen.gtools.r_set_field gen.gcon.basic.tvoid local_new_me local_field (gen.gtools.r_field false gen.gcon.basic.tvoid this local_field)
-													));
-													etype = gen.gcon.basic.tvoid;
-													epos = pos;
-												}
+												(
+													(* default: Reflect.setField(new_me, field, Reflect.field(this, field)) *)
+													let edef = gen.gtools.r_set_field gen.gcon.basic.tvoid local_new_me local_field (gen.gtools.r_field false gen.gcon.basic.tvoid this local_field) in
+													if fields <> [] then
+														(* switch(field) { ... } *)
+														{
+															eexpr = TSwitch(local_field, fields_to_cases fields, Some(edef));
+															etype = gen.gcon.basic.tvoid;
+															epos = pos;
+														}
+													else
+														edef;
+												)
 											];
 											etype = gen.gcon.basic.tvoid;
 											epos = pos