|
@@ -1378,6 +1378,13 @@ and make_string ctx s p =
|
|
op ctx (OSetField (s,1,reg_int ctx len));
|
|
op ctx (OSetField (s,1,reg_int ctx len));
|
|
s
|
|
s
|
|
|
|
|
|
|
|
+and get_enum_index ctx v =
|
|
|
|
+ let r = alloc_tmp ctx HI32 in
|
|
|
|
+ let re = eval_expr ctx v in
|
|
|
|
+ op ctx (ONullCheck re);
|
|
|
|
+ op ctx (OEnumIndex (r,re));
|
|
|
|
+ r
|
|
|
|
+
|
|
and eval_var ctx v =
|
|
and eval_var ctx v =
|
|
match captured_index ctx v with
|
|
match captured_index ctx v with
|
|
| None -> alloc_var ctx v false
|
|
| None -> alloc_var ctx v false
|
|
@@ -1858,11 +1865,7 @@ and eval_expr ctx e =
|
|
r
|
|
r
|
|
| _ -> abort "Constant string required" v.epos)
|
|
| _ -> abort "Constant string required" v.epos)
|
|
| "$enumIndex", [v] ->
|
|
| "$enumIndex", [v] ->
|
|
- let r = alloc_tmp ctx HI32 in
|
|
|
|
- let re = eval_expr ctx v in
|
|
|
|
- op ctx (ONullCheck re);
|
|
|
|
- op ctx (OEnumIndex (r,re));
|
|
|
|
- r
|
|
|
|
|
|
+ get_enum_index ctx v
|
|
| "$__mk_pos__", [{ eexpr = TConst (TString file) };min;max] ->
|
|
| "$__mk_pos__", [{ eexpr = TConst (TString file) };min;max] ->
|
|
(* macros only - generated by reification *)
|
|
(* macros only - generated by reification *)
|
|
let rt = HAbstract ("macro_pos",alloc_string ctx "macro_pos") in
|
|
let rt = HAbstract ("macro_pos",alloc_string ctx "macro_pos") in
|
|
@@ -1878,6 +1881,10 @@ and eval_expr ctx e =
|
|
r
|
|
r
|
|
| _ ->
|
|
| _ ->
|
|
abort ("Unknown native call " ^ v.v_name) e.epos)
|
|
abort ("Unknown native call " ^ v.v_name) e.epos)
|
|
|
|
+ | TCall ({ eexpr = TField (_,FStatic ({ cl_path = [],"Type" },{ cf_name = "enumIndex" })) },[{ eexpr = TCast(v,_) }]) when (match follow v.etype with TEnum _ -> true | _ -> false) ->
|
|
|
|
+ get_enum_index ctx v
|
|
|
|
+ | TCall ({ eexpr = TField (_,FStatic ({ cl_path = [],"Type" },{ cf_name = "enumIndex" })) },[v]) when (match follow v.etype with TEnum _ -> true | _ -> false) ->
|
|
|
|
+ get_enum_index ctx v
|
|
| TCall (ec,args) ->
|
|
| TCall (ec,args) ->
|
|
let tfun = real_type ctx ec in
|
|
let tfun = real_type ctx ec in
|
|
let el() = eval_args ctx args tfun e.epos in
|
|
let el() = eval_args ctx args tfun e.epos in
|