|
@@ -123,7 +123,17 @@ let handle_side_effects com gen_temp e =
|
|
let p = e.epos in
|
|
let p = e.epos in
|
|
let e_break = mk TBreak t_dynamic p in
|
|
let e_break = mk TBreak t_dynamic p in
|
|
let e_not = mk (TUnop(Not,Prefix,Codegen.mk_parent e1)) e1.etype e1.epos in
|
|
let e_not = mk (TUnop(Not,Prefix,Codegen.mk_parent e1)) e1.etype e1.epos in
|
|
- let e_if = mk (TIf(e_not,e_break,None)) com.basic.tvoid p in
|
|
|
|
|
|
+ let e_if eo = mk (TIf(e_not,e_break,eo)) com.basic.tvoid p in
|
|
|
|
+ let rec map_continue e = match e.eexpr with
|
|
|
|
+ | TContinue ->
|
|
|
|
+ (e_if (Some e))
|
|
|
|
+ | TWhile _ | TFor _ ->
|
|
|
|
+ e
|
|
|
|
+ | _ ->
|
|
|
|
+ Type.map_expr map_continue e
|
|
|
|
+ in
|
|
|
|
+ let e2 = if flag = NormalWhile then e2 else map_continue e2 in
|
|
|
|
+ let e_if = e_if None in
|
|
let e_block = if flag = NormalWhile then Type.concat e_if e2 else Type.concat e2 e_if in
|
|
let e_block = if flag = NormalWhile then Type.concat e_if e2 else Type.concat e2 e_if in
|
|
let e_true = mk (TConst (TBool true)) com.basic.tbool p in
|
|
let e_true = mk (TConst (TBool true)) com.basic.tbool p in
|
|
let e = mk (TWhile(Codegen.mk_parent e_true,e_block,NormalWhile)) e.etype p in
|
|
let e = mk (TWhile(Codegen.mk_parent e_true,e_block,NormalWhile)) e.etype p in
|