|
@@ -110,7 +110,7 @@ struct
|
|
|
let mk_heexpr = function
|
|
|
| TConst _ -> 0 | TLocal _ -> 1 | TArray _ -> 3 | TBinop _ -> 4 | TField _ -> 5 | TTypeExpr _ -> 7 | TParenthesis _ -> 8 | TObjectDecl _ -> 9
|
|
|
| TArrayDecl _ -> 10 | TCall _ -> 11 | TNew _ -> 12 | TUnop _ -> 13 | TFunction _ -> 14 | TVars _ -> 15 | TBlock _ -> 16 | TFor _ -> 17 | TIf _ -> 18 | TWhile _ -> 19
|
|
|
- | TSwitch _ -> 20 | TMatch _ -> 21 | TTry _ -> 22 | TReturn _ -> 23 | TBreak -> 24 | TContinue -> 25 | TThrow _ -> 26 | TCast _ -> 27 | TMeta _ -> 28 | TPatMatch _ -> 29
|
|
|
+ | TSwitch _ -> 20 | TPatMatch _ -> 21 | TTry _ -> 22 | TReturn _ -> 23 | TBreak -> 24 | TContinue -> 25 | TThrow _ -> 26 | TCast _ -> 27 | TMeta _ -> 28
|
|
|
|
|
|
let mk_heetype = function
|
|
|
| TMono _ -> 0 | TEnum _ -> 1 | TInst _ -> 2 | TType _ -> 3 | TFun _ -> 4
|
|
@@ -4602,8 +4602,8 @@ struct
|
|
|
{ expr with eexpr = TWhile(fn cond, block, flag) }
|
|
|
| TSwitch(cond, el_block_l, default) ->
|
|
|
{ expr with eexpr = TSwitch( fn cond, List.map (fun (el,block) -> (List.map fn el, block)) el_block_l, default ) }
|
|
|
- | TMatch(cond, enum, cases, default) ->
|
|
|
- { expr with eexpr = TMatch(fn cond, enum, cases, default) }
|
|
|
+(* | TMatch(cond, enum, cases, default) ->
|
|
|
+ { expr with eexpr = TMatch(fn cond, enum, cases, default) } *)
|
|
|
| TReturn(eopt) ->
|
|
|
{ expr with eexpr = TReturn(Option.map fn eopt) }
|
|
|
| TThrow (texpr) ->
|
|
@@ -4669,7 +4669,6 @@ struct
|
|
|
| TFor _
|
|
|
| TWhile _
|
|
|
| TSwitch _
|
|
|
- | TMatch _
|
|
|
| TPatMatch _
|
|
|
| TTry _
|
|
|
| TReturn _
|
|
@@ -4795,8 +4794,8 @@ struct
|
|
|
{ right with eexpr = TBlock(apply_assign_block assign_fun el) }
|
|
|
| TSwitch (cond, elblock_l, default) ->
|
|
|
{ right with eexpr = TSwitch(cond, List.map (fun (el,block) -> (el, mk_get_block assign_fun block)) elblock_l, Option.map (mk_get_block assign_fun) default) }
|
|
|
- | TMatch (cond, ep, il_vlo_e_l, default) ->
|
|
|
- { right with eexpr = TMatch(cond, ep, List.map (fun (il,vlo,e) -> (il,vlo,mk_get_block assign_fun e)) il_vlo_e_l, Option.map (mk_get_block assign_fun) default) }
|
|
|
+(* | TMatch (cond, ep, il_vlo_e_l, default) ->
|
|
|
+ { right with eexpr = TMatch(cond, ep, List.map (fun (il,vlo,e) -> (il,vlo,mk_get_block assign_fun e)) il_vlo_e_l, Option.map (mk_get_block assign_fun) default) } *)
|
|
|
| TTry (block, catches) ->
|
|
|
{ right with eexpr = TTry(mk_get_block assign_fun block, List.map (fun (v,block) -> (v,mk_get_block assign_fun block) ) catches) }
|
|
|
| TIf (cond,eif,eelse) ->
|
|
@@ -5103,8 +5102,8 @@ struct
|
|
|
{ e with eexpr = TBlock(block) }
|
|
|
| TTry (block, catches) ->
|
|
|
{ e with eexpr = TTry(traverse (mk_block block), List.map (fun (v,block) -> (v, traverse (mk_block block))) catches) }
|
|
|
- | TMatch (cond,ep,il_vol_e_l,default) ->
|
|
|
- { e with eexpr = TMatch(cond,ep,List.map (fun (il,vol,e) -> (il,vol,traverse (mk_block e))) il_vol_e_l, Option.map (fun e -> traverse (mk_block e)) default) }
|
|
|
+(* | TMatch (cond,ep,il_vol_e_l,default) ->
|
|
|
+ { e with eexpr = TMatch(cond,ep,List.map (fun (il,vol,e) -> (il,vol,traverse (mk_block e))) il_vol_e_l, Option.map (fun e -> traverse (mk_block e)) default) } *)
|
|
|
| TSwitch (cond,el_e_l, default) ->
|
|
|
{ e with eexpr = TSwitch(cond, List.map (fun (el,e) -> (el, traverse (mk_block e))) el_e_l, Option.map (fun e -> traverse (mk_block e)) default) }
|
|
|
| TWhile (cond,block,flag) ->
|
|
@@ -6010,8 +6009,8 @@ struct
|
|
|
{ e with eexpr = TWhile (handle (run econd) gen.gcon.basic.tbool econd.etype, run (mk_block e1), flag) }
|
|
|
| TSwitch (cond, el_e_l, edef) ->
|
|
|
{ e with eexpr = TSwitch(run cond, List.map (fun (el,e) -> (List.map run el, run (mk_block e))) el_e_l, Option.map (fun e -> run (mk_block e)) edef) }
|
|
|
- | TMatch (cond, en, il_vl_e_l, edef) ->
|
|
|
- { e with eexpr = TMatch(run cond, en, List.map (fun (il, vl, e) -> (il, vl, run (mk_block e))) il_vl_e_l, Option.map (fun e -> run (mk_block e)) edef) }
|
|
|
+(* | TMatch (cond, en, il_vl_e_l, edef) ->
|
|
|
+ { e with eexpr = TMatch(run cond, en, List.map (fun (il, vl, e) -> (il, vl, run (mk_block e))) il_vl_e_l, Option.map (fun e -> run (mk_block e)) edef) } *)
|
|
|
| TFor (v,cond,e1) ->
|
|
|
{ e with eexpr = TFor(v, run cond, run (mk_block e1)) }
|
|
|
| TTry (e, ve_l) ->
|
|
@@ -8600,43 +8599,6 @@ struct
|
|
|
in
|
|
|
let cond_array = { (mk_field_access gen f "params" f.epos) with etype = gen.gcon.basic.tarray t_empty } in
|
|
|
{ e with eexpr = TArray(cond_array, mk_int gen i cond_array.epos); }
|
|
|
- | TMatch(cond,(en,eparams),cases,default) ->
|
|
|
- let cond = run cond in (* being safe *)
|
|
|
- (* check if en was converted to class *)
|
|
|
- (* if it was, switch on tag field and change cond type *)
|
|
|
- let exprs_before, cond_local, cond = try
|
|
|
- let cl = Hashtbl.find t.ec_tbl en.e_path in
|
|
|
- let cond = { cond with etype = TInst(cl, eparams) } in
|
|
|
- let exprs_before, new_cond = ensure_local gen cond in
|
|
|
- exprs_before, new_cond, get_index gen new_cond cl eparams
|
|
|
- with | Not_found ->
|
|
|
- (*
|
|
|
- if it's not a class, we'll either use get_native_enum_tag or in a last resource,
|
|
|
- call Type.getEnumIndex
|
|
|
- *)
|
|
|
- match opt_get_native_enum_tag with
|
|
|
- | Some get_native_etag ->
|
|
|
- [], cond, get_native_etag cond
|
|
|
- | None ->
|
|
|
- [], cond, { eexpr = TCall(mk_static_field_access_infer gen.gclasses.cl_type "enumIndex" e.epos [], [cond]); etype = gen.gcon.basic.tint; epos = cond.epos }
|
|
|
- in
|
|
|
-
|
|
|
- (* for each case, change cases to expr int, and see if there is any var create *)
|
|
|
- let change_case (il, params, expr) =
|
|
|
- let expr = run expr in
|
|
|
- (* if there are, set var with tarray *)
|
|
|
- let exprs = tmatch_params_to_exprs gen params cond_local in
|
|
|
- let expr = match expr.eexpr with
|
|
|
- | TBlock(bl) -> { expr with eexpr = TBlock(exprs @ bl) }
|
|
|
- | _ -> { expr with eexpr = TBlock ( exprs @ [expr] ) }
|
|
|
- in
|
|
|
- (List.map (fun i -> mk_int gen i e.epos) il, expr)
|
|
|
- in
|
|
|
-
|
|
|
- let tswitch = { e with eexpr = TSwitch(cond, List.map change_case cases, Option.map run default) } in
|
|
|
- (match exprs_before with
|
|
|
- | [] -> tswitch
|
|
|
- | _ -> { e with eexpr = TBlock(exprs_before @ [tswitch]) })
|
|
|
| _ -> Type.map_expr run e
|
|
|
in
|
|
|
|
|
@@ -9350,7 +9312,7 @@ struct
|
|
|
|
|
|
new_e
|
|
|
| TSwitch _
|
|
|
- | TMatch _ ->
|
|
|
+ | TPatMatch _ ->
|
|
|
let last_switch = !in_switch in
|
|
|
in_switch := true;
|
|
|
|
|
@@ -9574,9 +9536,9 @@ struct
|
|
|
(el, handle_case (e, ek))
|
|
|
) el_e_l, Some def) } in
|
|
|
ret, !k
|
|
|
- | TMatch(cond, ep, il_vopt_e_l, None) ->
|
|
|
- { expr with eexpr = TMatch(cond, ep, List.map (fun (il, vopt, e) -> (il, vopt, handle_case (process_expr e))) il_vopt_e_l, None) }, Normal
|
|
|
- | TMatch(cond, ep, il_vopt_e_l, Some def) ->
|
|
|
+(* | TMatch(cond, ep, il_vopt_e_l, None) ->
|
|
|
+ { expr with eexpr = TMatch(cond, ep, List.map (fun (il, vopt, e) -> (il, vopt, handle_case (process_expr e))) il_vopt_e_l, None) }, Normal *)
|
|
|
+(* | TMatch(cond, ep, il_vopt_e_l, Some def) ->
|
|
|
let def, k = process_expr def in
|
|
|
let def = handle_case (def, k) in
|
|
|
let k = ref k in
|
|
@@ -9585,7 +9547,7 @@ struct
|
|
|
k := aggregate_kind !k ek;
|
|
|
(il, vopt, handle_case (e, ek))
|
|
|
) il_vopt_e_l, Some def) } in
|
|
|
- ret, !k
|
|
|
+ ret, !k *)
|
|
|
| TTry (e, catches) ->
|
|
|
let e, k = process_expr e in
|
|
|
let k = ref k in
|
|
@@ -9866,8 +9828,8 @@ struct
|
|
|
{ e with eexpr = TBlock bl }
|
|
|
| TTry (block, catches) ->
|
|
|
{ e with eexpr = TTry(traverse (mk_block block), List.map (fun (v,block) -> (v, traverse (mk_block block))) catches) }
|
|
|
- | TMatch (cond,ep,il_vol_e_l,default) ->
|
|
|
- { e with eexpr = TMatch(cond,ep,List.map (fun (il,vol,e) -> (il,vol,traverse (mk_block e))) il_vol_e_l, Option.map (fun e -> traverse (mk_block e)) default) }
|
|
|
+(* | TMatch (cond,ep,il_vol_e_l,default) ->
|
|
|
+ { e with eexpr = TMatch(cond,ep,List.map (fun (il,vol,e) -> (il,vol,traverse (mk_block e))) il_vol_e_l, Option.map (fun e -> traverse (mk_block e)) default) } *)
|
|
|
| TSwitch (cond,el_e_l, default) ->
|
|
|
{ e with eexpr = TSwitch(cond, List.map (fun (el,e) -> (el, traverse (mk_block e))) el_e_l, Option.map (fun e -> traverse (mk_block e)) default) }
|
|
|
| TWhile (cond,block,flag) ->
|