Sigali pass into compiler + added a_id field to applications
- Added "z3z" target language, calling sigali code generation - a_id is application id, so as to identify node applications; added to Minils AST. a_id is given on hept2mls pass. This is needed for the controller execution from controller synthesis.
This commit is contained in:
parent
da37fd8e58
commit
85bbe21d6c
5 changed files with 26 additions and 7 deletions
|
@ -44,6 +44,10 @@ struct
|
|||
raise Errors.Error
|
||||
end
|
||||
|
||||
let fresh = Idents.gen_fresh "hept2mls"
|
||||
(function Heptagon.Enode f -> (shortname f)
|
||||
| _ -> "n")
|
||||
|
||||
(* add an equation *)
|
||||
let equation locals eqs e =
|
||||
let n = Idents.gen_var "hept2mls" "ck" in
|
||||
|
@ -87,7 +91,9 @@ let rec translate_op = function
|
|||
|
||||
let translate_app app =
|
||||
mk_app ~params:app.Heptagon.a_params
|
||||
~unsafe:app.Heptagon.a_unsafe (translate_op app.Heptagon.a_op)
|
||||
~unsafe:app.Heptagon.a_unsafe
|
||||
~id:(Some (fresh app.Heptagon.a_op))
|
||||
(translate_op app.Heptagon.a_op)
|
||||
|
||||
let rec translate_extvalue e =
|
||||
let mk_extvalue = mk_extvalue ~loc:e.Heptagon.e_loc ~ty:e.Heptagon.e_ty in
|
||||
|
|
|
@ -461,7 +461,12 @@ and mk_node_call map call_context app loc name_list args ty =
|
|||
v @ nd.Minils.n_local, si, j, subst_act_list env s
|
||||
|
||||
| Minils.Enode f | Minils.Efun f ->
|
||||
let o = mk_obj_call_from_context call_context (gen_obj_ident f) in
|
||||
let id =
|
||||
begin match app.Minils.a_id with
|
||||
None -> gen_obj_name f
|
||||
| Some id -> name id
|
||||
end in
|
||||
let o = mk_obj_call_from_context call_context id in
|
||||
let obj =
|
||||
{ o_ident = obj_ref_name o; o_class = f;
|
||||
o_params = app.Minils.a_params;
|
||||
|
|
|
@ -42,10 +42,12 @@ let no_conf () = ()
|
|||
|
||||
let targets = [ "c",(Obc_no_params Cmain.program, no_conf);
|
||||
"java", (Obc Java_main.program, no_conf);
|
||||
"z3z", (Minils_no_params Sigalimain.program, no_conf);
|
||||
"obc", (Obc write_obc_file, no_conf);
|
||||
"obc_np", (Obc_no_params write_obc_file, no_conf);
|
||||
"epo", (Minils write_object_file, no_conf) ]
|
||||
|
||||
|
||||
let generate_target p s =
|
||||
let print_unfolded p_list =
|
||||
comment "Unfolding";
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
<analysis> or <transformations> or <main> or <parsing>:include
|
||||
<sigali>:include
|
|
@ -72,7 +72,11 @@ and edesc =
|
|||
* extvalue list * extvalue list * var_ident option
|
||||
(** map f <<n>> (extvalue, extvalue...) reset ident *)
|
||||
|
||||
and app = { a_op: op; a_params: static_exp list; a_unsafe: bool }
|
||||
and app = { a_op: op;
|
||||
a_params: static_exp list;
|
||||
a_unsafe: bool;
|
||||
a_id: ident option;
|
||||
a_inlined: bool }
|
||||
(** Unsafe applications could have side effects
|
||||
and be delicate about optimizations, !be careful! *)
|
||||
|
||||
|
@ -120,8 +124,8 @@ type node_dec = {
|
|||
n_input : var_dec list;
|
||||
n_output : var_dec list;
|
||||
n_contract : contract option;
|
||||
(* GD: inglorious hack for controller call
|
||||
mutable n_controller_call : var_ident list * var_ident list; *)
|
||||
(* GD: inglorious hack for controller call *)
|
||||
mutable n_controller_call : string list * string list;
|
||||
n_local : var_dec list;
|
||||
n_equs : eq list;
|
||||
n_loc : location;
|
||||
|
@ -182,6 +186,7 @@ let mk_type_dec type_desc name loc =
|
|||
let mk_const_dec id ty e loc =
|
||||
{ c_name = id; c_type = ty; c_value = e; c_loc = loc }
|
||||
|
||||
let mk_app ?(params=[]) ?(unsafe=false) op =
|
||||
{ a_op = op; a_params = params; a_unsafe = unsafe }
|
||||
let mk_app ?(params=[]) ?(unsafe=false) ?(id=None) ?(inlined=false) op =
|
||||
{ a_op = op; a_params = params; a_unsafe = unsafe;
|
||||
a_id = id; a_inlined = inlined }
|
||||
|
||||
|
|
Loading…
Reference in a new issue