Fixed warnings & documentation comments.

- gitignore: ignore files generated by `configure' script.
master
Nicolas Berthier 11 years ago
parent 10bdab4dc6
commit 216550c0d1

3
.gitignore vendored

@ -29,3 +29,6 @@ lib/java/.classpath
/test/async/build/* /test/async/build/*
/test/image_filters/java/* /test/image_filters/java/*
compiler/doc.odocl compiler/doc.odocl
compiler/doc.docdir
config
config.status

@ -49,8 +49,9 @@ clean:
$(OCAMLBUILD) -clean $(OCAMLBUILD) -clean
.PHONY: doc .PHONY: doc
doc: doc: $(TARGET)
find _build -regex '.*.cmi?' -printf '%f\n' \ # Filter unused modules by scanning built ones:
find _build -regex '.*.cmi?' -printf '%f\n' \
| sed -e '/ocamlbuild/ d; s/\(.*\)\.cmi$$/\u\1/' \ | sed -e '/ocamlbuild/ d; s/\(.*\)\.cmi$$/\u\1/' \
| sort > doc.odocl; | sort > doc.odocl;
$(OCAMLBUILD) doc.docdir/index.html $(OCAMLBUILD) doc.docdir/index.html

@ -5,4 +5,3 @@ To do so, go to the lablgtk library directory and type:
ocamlc -a gtkThread.cmo -o lablgtkthread.cma ocamlc -a gtkThread.cmo -o lablgtkthread.cma
ocamlopt -a gtkThread.cmx -o lablgtkthread.cmxa ocamlopt -a gtkThread.cmx -o lablgtkthread.cmxa

@ -100,7 +100,7 @@ and ck funs acc c = match c with
| Cbase -> c, acc | Cbase -> c, acc
| Cvar(link_ref) -> | Cvar(link_ref) ->
let l, acc = link_it funs acc link_ref.contents in let l, acc = link_it funs acc link_ref.contents in
Cvar {link_ref with contents = l}, acc Cvar {contents = l}, acc
| Con(ck, constructor_name, v) -> | Con(ck, constructor_name, v) ->
let ck, acc = ck_it funs acc ck in let ck, acc = ck_it funs acc ck in
let v, acc = var_ident_it funs acc v in let v, acc = var_ident_it funs acc v in
@ -114,7 +114,7 @@ and link funs acc l = match l with
and var_ident_it funs acc i = funs.var_ident funs acc i and var_ident_it funs acc i = funs.var_ident funs acc i
and var_ident funs acc i = i, acc and var_ident _funs acc i = i, acc
and structure_it funs acc s = funs.structure funs acc s and structure_it funs acc s = funs.structure funs acc s
and structure funs acc s = and structure funs acc s =

@ -27,7 +27,6 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Names open Names
open Idents
open Signature open Signature
open Types open Types
open Clocks open Clocks
@ -195,5 +194,3 @@ let print_interface ff =
NamesEnv.iter NamesEnv.iter
(fun key sigtype -> Format.fprintf ff "%a@," print_interface_value (key,sigtype)) m.m_values; (fun key sigtype -> Format.fprintf ff "%a@," print_interface_value (key,sigtype)) m.m_values;
Format.fprintf ff "@]@." Format.fprintf ff "@]@."

@ -30,7 +30,6 @@
(* inspired from the source of the Caml Light 0.73 compiler *) (* inspired from the source of the Caml Light 0.73 compiler *)
open Lexing open Lexing
open Parsing
open Format open Format
(* two important global variables: [input_name] and [input_chan] *) (* two important global variables: [input_name] and [input_chan] *)
@ -54,7 +53,7 @@ let error_prompt = ">"
(** Prints [n] times char [c] on [oc]. *) (** Prints [n] times char [c] on [oc]. *)
let prints_n_chars ff n c = for i = 1 to n do pp_print_char ff c done let prints_n_chars ff n c = for _i = 1 to n do pp_print_char ff c done
(** Prints out to [oc] a line designed to be printed under [line] from file [ic] (** Prints out to [oc] a line designed to be printed under [line] from file [ic]
underlining from char [first] to char [last] with char [ch]. underlining from char [first] to char [last] with char [ch].
@ -82,7 +81,7 @@ let underline_line ic ff ch line first last =
let copy_lines nl ic ff prompt = let copy_lines nl ic ff prompt =
for i = 1 to nl do for _i = 1 to nl do
pp_print_string ff prompt; pp_print_string ff prompt;
(try pp_print_string ff (input_line ic) (try pp_print_string ff (input_line ic)
with End_of_file -> pp_print_string ff "<EOF>"); with End_of_file -> pp_print_string ff "<EOF>");
@ -90,13 +89,13 @@ let copy_lines nl ic ff prompt =
done done
let copy_chunk p1 p2 ic ff = let copy_chunk p1 p2 ic ff =
try for i = p1 to p2 - 1 do pp_print_char ff (input_char ic) done try for _i = p1 to p2 - 1 do pp_print_char ff (input_char ic) done
with End_of_file -> pp_print_string ff "<EOF>" with End_of_file -> pp_print_string ff "<EOF>"
let skip_lines n ic = let skip_lines n ic =
try for i = 1 to n do try for _i = 1 to n do
let _ = input_line ic in () let _ = input_line ic in ()
done done
with End_of_file -> () with End_of_file -> ()

@ -30,7 +30,6 @@
(* Module objects and global environnement management *) (* Module objects and global environnement management *)
open Misc
open Compiler_options open Compiler_options
open Signature open Signature
open Types open Types
@ -161,7 +160,7 @@ let initialize modul =
List.iter open_module !default_used_modules List.iter open_module !default_used_modules
(** { 3 Add functions prevent redefinitions } *) (** {3 Add functions prevent redefinitions} *)
let _check_not_defined env f = let _check_not_defined env f =
if QualEnv.mem f env then raise Already_defined if QualEnv.mem f env then raise Already_defined
@ -190,7 +189,7 @@ let replace_type f v =
let replace_const f v = let replace_const f v =
g_env.consts <- QualEnv.add f v g_env.consts g_env.consts <- QualEnv.add f v g_env.consts
(** { 3 Find functions look in the global environement, nothing more } *) (** {3 Find functions look in the global environement, nothing more} *)
let find_value x = QualEnv.find x g_env.values let find_value x = QualEnv.find x g_env.values
let find_type x = QualEnv.find x g_env.types let find_type x = QualEnv.find x g_env.types
@ -204,7 +203,7 @@ let find_struct n =
| Tstruct fields -> fields | Tstruct fields -> fields
| _ -> raise Not_found | _ -> raise Not_found
(** { 3 Check functions } (** {3 Check functions}
Try to load the needed module and then to find it, Try to load the needed module and then to find it,
return true if in the table, return false if it can't find it. *) return true if in the table, return false if it can't find it. *)
@ -226,9 +225,12 @@ let check_const q =
try let _ = QualEnv.find q g_env.consts in true with Not_found -> false try let _ = QualEnv.find q g_env.consts in true with Not_found -> false
(** { 3 Qualify functions [qualify_* name] return the qualified name (** {3 Qualify functions}
matching [name] in the global env scope (current module :: opened modules).
@raise [Not_found] if not in scope } *) [qualify_* name] return the qualified name matching [name] in the global env
scope (current module :: opened modules).
@raise Not_found if not in scope *)
let _qualify env name = let _qualify env name =
let tries m = let tries m =
@ -247,11 +249,11 @@ let qualify_const name = _qualify g_env.consts name
(** @return the name as qualified with the current module (** @return the name as qualified with the current module
(should not be used..)*) (should not be used..)*)
let current_qual n = { qual = g_env.current_mod; name = n } let current_qual n = { qual = g_env.current_mod; name = n }
(** { 3 Fresh functions return a fresh qualname for the current module } *) (** {3 Fresh functions return a fresh qualname for the current module} *)
let rec fresh_value pass_name name = let rec fresh_value pass_name name =
let fname = let fname =
@ -306,7 +308,9 @@ let rec fresh_constr pass_name name =
exception Undefined_type of qualname exception Undefined_type of qualname
(** @return the unaliased version of a type. @raise Undefined_type *) (** @return the unaliased version of a type.
@raise Undefined_type . *)
let rec unalias_type t = match t with let rec unalias_type t = match t with
| Tid ({ qual = q } as ty_name) -> | Tid ({ qual = q } as ty_name) ->
_load_module q; _load_module q;
@ -320,7 +324,7 @@ let rec unalias_type t = match t with
| Tinvalid -> Tinvalid | Tinvalid -> Tinvalid
(** Return the current module as a [module_object] *) (** Return the current module as a {!module_object} *)
let current_module () = let current_module () =
(* Filter and transform a qualified env into the current module object env *) (* Filter and transform a qualified env into the current module object env *)
let unqualify env = (* unqualify and filter env keys *) let unqualify env = (* unqualify and filter env keys *)
@ -342,4 +346,3 @@ let current_module () =
m_constrs = unqualify_all g_env.constrs; m_constrs = unqualify_all g_env.constrs;
m_fields = unqualify_all g_env.fields; m_fields = unqualify_all g_env.fields;
m_format_version = g_env.format_version } m_format_version = g_env.format_version }

@ -77,7 +77,7 @@ type type_def =
type const_def = { c_type : ty; c_value : static_exp } type const_def = { c_type : ty; c_value : static_exp }
(** { 3 Signature helper functions } *) (** {3 Signature helper functions} *)
let rec ck_to_sck ck = let rec ck_to_sck ck =
let ck = Clocks.ck_repr ck in let ck = Clocks.ck_repr ck in
@ -120,6 +120,3 @@ let rec field_assoc f = function
| { f_name = n; f_type = ty }::l -> | { f_name = n; f_type = ty }::l ->
if f = n then ty if f = n then ty
else field_assoc f l else field_assoc f l

@ -28,9 +28,8 @@
(***********************************************************************) (***********************************************************************)
(** This module defines static expressions, used in params and for constants. (** This module defines static expressions, used in params and for constants.
const n: int = 3; [const n: int = 3;
var x : int^n; var y : int^(n + 2); var x : int^n; var y : int^(n + 2); x[n - 1], x[1 + 3],...] *)
x[n - 1], x[1 + 3],... *)
open Names open Names
open Format open Format
@ -193,14 +192,14 @@ let rec simplify_type env ty = match ty with
(** [eval env e] does the same as [simplify] (** [eval env e] does the same as [simplify]
but if it returns, there are no variables nor op left. but if it returns, there are no variables nor op left.
@raise [Errors.Error] when it cannot fully evaluate. *) @raise Errors.Error when it cannot fully evaluate. *)
let eval env se = let eval env se =
try eval_core false env se try eval_core false env se
with exn -> message exn with exn -> message exn
(** [int_of_static_exp env e] returns the value of the expression (** [int_of_static_exp env e] returns the value of the expression
[e] in the environment [env], mapping vars to integers. [e] in the environment [env], mapping vars to integers.
@raise [Errors.Error] if it cannot be computed.*) @raise Errors.Error if it cannot be computed.*)
let int_of_static_exp env se = match (eval env se).se_desc with let int_of_static_exp env se = match (eval env se).se_desc with
| Sint i -> i | Sint i -> i
| _ -> Misc.internal_error "static int_of_static_exp" | _ -> Misc.internal_error "static int_of_static_exp"
@ -258,4 +257,3 @@ let instanciate_constr m constr =
| Cfalse -> Cfalse in | Cfalse -> Cfalse in
List.map (replace_one m) constr List.map (replace_one m) constr
*) *)

@ -28,7 +28,6 @@
(***********************************************************************) (***********************************************************************)
open Names open Names
open Misc
open Location open Location
@ -43,9 +42,9 @@ and static_exp_desc =
| Sconstructor of constructor_name | Sconstructor of constructor_name
| Sfield of field_name | Sfield of field_name
| Stuple of static_exp list | Stuple of static_exp list
| Sarray_power of static_exp * (static_exp list) (** power : 0^n^m : [[0,0,..],[0,0,..],..] *) | Sarray_power of static_exp * (static_exp list) (** power : [0^n^m : [[0,0,..],[0,0,..],..]] *)
| Sarray of static_exp list (** [ e1, e2, e3 ] *) | Sarray of static_exp list (** [[ e1, e2, e3 ]] *)
| Srecord of (field_name * static_exp) list (** { f1 = e1; f2 = e2; ... } *) | Srecord of (field_name * static_exp) list (** [{ f1 = e1; f2 = e2; ... }] *)
| Sop of fun_name * static_exp list (** defined ops for now in pervasives *) | Sop of fun_name * static_exp list (** defined ops for now in pervasives *)
and ty = and ty =
@ -66,5 +65,3 @@ let unprod = function
let mk_static_exp ?(loc = no_location) ty desc = (*note ~ty: replace as first arg*) let mk_static_exp ?(loc = no_location) ty desc = (*note ~ty: replace as first arg*)
{ se_desc = desc; se_ty = ty; se_loc = loc } { se_desc = desc; se_ty = ty; se_loc = loc }

@ -29,10 +29,7 @@
(* causality check of scheduling constraints *) (* causality check of scheduling constraints *)
open Misc
open Names
open Idents open Idents
open Heptagon
open Location open Location
open Sgraph open Sgraph
open Format open Format
@ -148,7 +145,7 @@ let rec ctuple l =
norm_tuple l before (ac::newl) norm_tuple l before (ac::newl)
| ((Aac _) as ac)::l -> | ((Aac _) as ac)::l ->
norm_tuple l (cand before ac) newl norm_tuple l (cand before ac) newl
| (Aor _)::l -> assert false | (Aor _)::_ -> assert false
in in
norm_tuple l Aempty [] norm_tuple l Aempty []
@ -217,7 +214,7 @@ let build ac =
with with
| Not_found -> () in | Not_found -> () in
let rec add_dependence g = function let add_dependence g = function
| Aread(n) -> attach g n; attach_lin g n | Aread(n) -> attach g n; attach_lin g n
| Alinread(n) -> attach g n | Alinread(n) -> attach g n
| _ -> () | _ -> ()

@ -30,11 +30,8 @@
(* causality check *) (* causality check *)
open Misc open Misc
open Names
open Idents open Idents
open Heptagon open Heptagon
open Location
open Sgraph
open Linearity open Linearity
open Causal open Causal
@ -227,7 +224,7 @@ and typing_automaton state_handlers =
cseq t2 (cseq tb t1) in cseq t2 (cseq tb t1) in
corlist (List.map handler state_handlers) corlist (List.map handler state_handlers)
and typing_block { b_local = dec; b_equs = eq_list; b_loc = loc } = and typing_block { b_local = _dec; b_equs = eq_list; b_loc = _loc } =
(*let teq = typing_eqs eq_list in (*let teq = typing_eqs eq_list in
Causal.check loc teq; Causal.check loc teq;
clear (build dec) teq *) clear (build dec) teq *)
@ -236,7 +233,7 @@ and typing_block { b_local = dec; b_equs = eq_list; b_loc = loc } =
let typing_contract loc contract = let typing_contract loc contract =
match contract with match contract with
| None -> cempty | None -> cempty
| Some { c_block = b; | Some { c_block = b;
c_assume = e_a; c_assume = e_a;
c_assume_loc = e_a_loc; c_assume_loc = e_a_loc;
c_enforce = e_g; c_enforce = e_g;
@ -264,4 +261,3 @@ let typing_node { n_contract = contract;
let program ({ p_desc = pd } as p) = let program ({ p_desc = pd } as p) =
List.iter (function Pnode n -> typing_node n | _ -> ()) pd; List.iter (function Pnode n -> typing_node n | _ -> ()) pd;
p p

@ -37,15 +37,12 @@
*) *)
open Misc
open Names open Names
open Idents open Idents
open Heptagon open Heptagon
open Hept_utils open Hept_utils
open Global_printer open Global_printer
open Hept_printer
open Signature open Signature
open Types
open Clocks open Clocks
open Location open Location
open Format open Format
@ -113,7 +110,7 @@ let rec typing h pat e =
typing h pat e typing h pat e
| Ewhen (e,c,n) -> | Ewhen (e,c,n) ->
let ck_n = ck_of_name h n in let ck_n = ck_of_name h n in
let base = expect h pat (skeleton ck_n e.e_ty) e in let _base = expect h pat (skeleton ck_n e.e_ty) e in
skeleton (Con (ck_n, c, n)) e.e_ty, Con (ck_n, c, n) skeleton (Con (ck_n, c, n)) e.e_ty, Con (ck_n, c, n)
| Emerge (x, c_e_list) -> | Emerge (x, c_e_list) ->
let ck = ck_of_name h x in let ck = ck_of_name h x in
@ -134,7 +131,7 @@ let rec typing h pat e =
typing_app h base_ck pat op (pargs@args) typing_app h base_ck pat op (pargs@args)
| Imapi -> (* clocking the node with the extra i input on [ck_r] *) | Imapi -> (* clocking the node with the extra i input on [ck_r] *)
let il (* stubs i as 0 *) = let il (* stubs i as 0 *) =
List.map (fun x -> mk_exp List.map (fun _ -> mk_exp
(Econst (Initial.mk_static_int 0)) (Econst (Initial.mk_static_int 0))
~ct_annot:(Some(Ck(base_ck))) ~ct_annot:(Some(Ck(base_ck)))
Initial.tint Initial.tint
@ -145,12 +142,12 @@ let rec typing h pat e =
| Ifold | Imapfold -> | Ifold | Imapfold ->
(* clocking node with equality constaint on last input and last output *) (* clocking node with equality constaint on last input and last output *)
let ct = typing_app h base_ck pat op (pargs@args) in let ct = typing_app h base_ck pat op (pargs@args) in
Misc.optional (unify (Ck(Clocks.last_clock ct))) ignore (Misc.optional (unify (Ck(Clocks.last_clock ct)))
(Misc.last_element args).e_ct_annot; (Misc.last_element args).e_ct_annot);
ct ct
| Ifoldi -> (* clocking the node with the extra i and last in/out constraints *) | Ifoldi -> (* clocking the node with the extra i and last in/out constraints *)
let il (* stubs i as 0 *) = let il (* stubs i as 0 *) =
List.map (fun x -> mk_exp List.map (fun _ -> mk_exp
(Econst (Initial.mk_static_int 0)) (Econst (Initial.mk_static_int 0))
~ct_annot:(Some(Ck(base_ck))) ~ct_annot:(Some(Ck(base_ck)))
Initial.tint Initial.tint
@ -163,8 +160,8 @@ let rec typing h pat e =
| h::l -> h::(insert_i l) | h::l -> h::(insert_i l)
in in
let ct = typing_app h base_ck pat op (pargs@(insert_i args)) in let ct = typing_app h base_ck pat op (pargs@(insert_i args)) in
Misc.optional (unify (Ck (Clocks.last_clock ct))) ignore (Misc.optional (unify (Ck (Clocks.last_clock ct)))
(Misc.last_element args).e_ct_annot; (Misc.last_element args).e_ct_annot);
ct ct
in in
ct, base_ck ct, base_ck
@ -183,7 +180,7 @@ let rec typing h pat e =
ct, base ct, base
and expect h pat expected_ct e = and expect h pat expected_ct e =
let actual_ct,base = typing h pat e in let actual_ct,_base = typing h pat e in
(try unify actual_ct expected_ct (try unify actual_ct expected_ct
with Unify -> error_message e.e_loc (Etypeclash (actual_ct, expected_ct))) with Unify -> error_message e.e_loc (Etypeclash (actual_ct, expected_ct)))
@ -237,7 +234,7 @@ and typing_app h base pat op e_list = match op with
let append_env h vds = let append_env h vds =
List.fold_left (fun h { v_ident = n; v_clock = ck } -> Env.add n ck h) h vds List.fold_left (fun h { v_ident = n; v_clock = ck } -> Env.add n ck h) h vds
let rec typing_eq h ({ eq_desc = desc; eq_loc = loc } as eq) = let rec typing_eq h ({ eq_desc = desc; eq_loc = loc } as _eq) =
match desc with match desc with
| Eeq(pat,e) -> | Eeq(pat,e) ->
let ct,_ = typing h pat e in let ct,_ = typing h pat e in
@ -253,7 +250,7 @@ let rec typing_eq h ({ eq_desc = desc; eq_loc = loc } as eq) =
and typing_eqs h eq_list = List.iter (typing_eq h) eq_list and typing_eqs h eq_list = List.iter (typing_eq h) eq_list
and typing_block h and typing_block h
({ b_local = l; b_equs = eq_list; b_loc = loc } as b) = ({ b_local = l; b_equs = eq_list } as _b) =
let h' = append_env h l in let h' = append_env h l in
typing_eqs h' eq_list; typing_eqs h' eq_list;
h' h'
@ -270,7 +267,7 @@ let typing_contract h contract =
expect h' (Etuplepat []) (Ck Cbase) e_a; expect h' (Etuplepat []) (Ck Cbase) e_a;
(* property *) (* property *)
expect h' (Etuplepat []) (Ck Cbase) e_g; expect h' (Etuplepat []) (Ck Cbase) e_g;
append_env h c_list append_env h c_list
let typing_local_contract h contract = let typing_local_contract h contract =
@ -318,4 +315,3 @@ let program p =
| _ -> pd | _ -> pd
in in
{ p with p_desc = List.map program_desc p.p_desc; } { p with p_desc = List.map program_desc p.p_desc; }

@ -39,12 +39,10 @@
(* Requis : typage *) (* Requis : typage *)
open Misc open Misc
open Names
open Idents open Idents
open Heptagon open Heptagon
open Types open Types
open Location open Location
open Format
type typ = type typ =
| Iproduct of typ list | Iproduct of typ list
@ -349,7 +347,7 @@ and typing_automaton h state_handlers =
let initialized h { s_block = { b_defnames = l } } = let initialized h { s_block = { b_defnames = l } } =
let env_update x h = let env_update x h =
try try
let xl = IEnv.find_last x h in (* it's a last in the env, good. *) let _xl = IEnv.find_last x h in (* it's a last in the env, good. *)
IEnv.add_last x (IEnv.find_var x h) h IEnv.add_last x (IEnv.find_var x h) h
with Not_found -> h (* nothing to do *) with Not_found -> h (* nothing to do *)
in in
@ -412,5 +410,3 @@ let typing_node { n_input = i_list; n_output = o_list;
let program ({ p_desc = pd } as p) = let program ({ p_desc = pd } as p) =
List.iter (function Pnode n -> typing_node n | _ -> ()) pd; List.iter (function Pnode n -> typing_node n | _ -> ()) pd;
p p

@ -32,7 +32,6 @@ open Names
open Location open Location
open Misc open Misc
open Signature open Signature
open Modules
open Heptagon open Heptagon
type error = type error =
@ -203,7 +202,7 @@ let check_fresh_lin_var (env, used_vars, init_vars) loc lin =
(** Substitutes linearity variables (Lvar r) with their value (** Substitutes linearity variables (Lvar r) with their value
given by the map. *) given by the map. *)
let rec subst_lin m lin_list = let subst_lin m lin_list =
let subst_one = function let subst_one = function
| Lvar r -> | Lvar r ->
(try (try
@ -253,7 +252,7 @@ let subst_from_lin (s,m) expect_lin lin =
) )
| _, _ -> s,m | _, _ -> s,m
let rec not_linear_for_exp e = let not_linear_for_exp e =
lin_skeleton Ltop e.e_ty lin_skeleton Ltop e.e_ty
let check_init env loc init lin = let check_init env loc init lin =
@ -399,7 +398,7 @@ let rec fuse_args_lin args_lin collect_lins =
(** [extract_not_lin_var_exp args_lin e_list] returns the linearities (** [extract_not_lin_var_exp args_lin e_list] returns the linearities
and expressions from e_list that are not yet set to Lvar r.*) and expressions from e_list that are not yet set to Lvar r.*)
let rec extract_not_lin_var_exp args_lin e_list = let extract_not_lin_var_exp args_lin e_list =
match args_lin, e_list with match args_lin, e_list with
| [], [] -> [], [] | [], [] -> [], []
| arg_lin::args_lin, e::e_list -> | arg_lin::args_lin, e::e_list ->
@ -791,7 +790,7 @@ and typing_eq env eq =
| Eeq(Evarpat y, { e_desc = Efby(e_1, e_2) }) -> | Eeq(Evarpat y, { e_desc = Efby(e_1, e_2) }) ->
let lin = lin_of_ident y env in let lin = lin_of_ident y env in
let _, env = check_init env eq.eq_loc eq.eq_inits lin in let _, env = check_init env eq.eq_loc eq.eq_inits lin in
safe_expect env Ltop e_1; ignore (safe_expect env Ltop e_1);
safe_expect env lin e_2 safe_expect env lin e_2
| Eeq(pat, e) -> | Eeq(pat, e) ->
let lin_pat = typing_pat env pat in let lin_pat = typing_pat env pat in
@ -917,4 +916,3 @@ let node f =
let program ({ p_desc = pd } as p) = let program ({ p_desc = pd } as p) =
List.iter (function Pnode n -> node n | _ -> ()) pd; List.iter (function Pnode n -> node n | _ -> ()) pd;
p p

@ -27,7 +27,6 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
(* Checks that a node declared stateless is stateless, and set possible nodes as stateless. *) (* Checks that a node declared stateless is stateless, and set possible nodes as stateless. *)
open Names
open Location open Location
open Signature open Signature
open Modules open Modules

@ -39,7 +39,6 @@ open Static
open Types open Types
open Global_printer open Global_printer
open Heptagon open Heptagon
open Hept_mapfold
open Pp_tools open Pp_tools
open Format open Format
@ -440,7 +439,7 @@ let rec _unify cenv t1 t2 =
_unify cenv ty1 ty2 _unify cenv ty1 ty2
| _ -> raise Unify | _ -> raise Unify
(** { 3 Constraints related functions } *) (** {3 Constraints related functions} *)
and (curr_constrnt : constrnt list ref) = ref [] and (curr_constrnt : constrnt list ref) = ref []
and solve ?(unsafe=false) c_l = and solve ?(unsafe=false) c_l =
@ -1193,7 +1192,7 @@ let typing_contract cenv h contract =
let typed_e_g = expect cenv h' (Tid Initial.pbool) e_g in let typed_e_g = expect cenv h' (Tid Initial.pbool) e_g in
let typed_e_g_loc = expect cenv h' (Tid Initial.pbool) e_g_loc in let typed_e_g_loc = expect cenv h' (Tid Initial.pbool) e_g_loc in
let typed_c, (c_names, h) = build cenv h c in let typed_c, (_c_names, h) = build cenv h c in
Some { c_block = typed_b; Some { c_block = typed_b;
c_assume = typed_e_a; c_assume = typed_e_a;
@ -1222,7 +1221,7 @@ let node ({ n_name = f; n_input = i_list; n_output = o_list;
try try
let typed_params, cenv = let typed_params, cenv =
build_node_params QualEnv.empty node_params in build_node_params QualEnv.empty node_params in
let typed_i_list, (input_names, h) = build cenv Env.empty i_list in let typed_i_list, (_input_names, h) = build cenv Env.empty i_list in
let typed_o_list, (output_names, h) = build cenv h o_list in let typed_o_list, (output_names, h) = build cenv h o_list in
(* typing contract *) (* typing contract *)

@ -27,7 +27,6 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
(* Checks that a node not declared unsafe is safe, and set app unsafe flag. *) (* Checks that a node not declared unsafe is safe, and set app unsafe flag. *)
open Names
open Location open Location
open Signature open Signature
open Modules open Modules

@ -216,7 +216,7 @@ and block_it funs acc b = funs.block funs acc b
and block funs acc b = and block funs acc b =
let b_local, acc = mapfold (var_dec_it funs) acc b.b_local in let b_local, acc = mapfold (var_dec_it funs) acc b.b_local in
let b_equs, acc = mapfold (eq_it funs) acc b.b_equs in let b_equs, acc = mapfold (eq_it funs) acc b.b_equs in
let b_defnames, acc = let b_defnames, acc =
Idents.Env.fold Idents.Env.fold
(fun v v_dec (env,acc) -> (fun v v_dec (env,acc) ->
let v, acc = var_ident_it funs.global_funs acc v in let v, acc = var_ident_it funs.global_funs acc v in
@ -332,7 +332,7 @@ and program_desc_it funs acc pd =
with Fallback -> program_desc funs acc pd with Fallback -> program_desc funs acc pd
and program_desc funs acc pd = match pd with and program_desc funs acc pd = match pd with
| Pconst cd -> let cd, acc = const_dec_it funs acc cd in Pconst cd, acc | Pconst cd -> let cd, acc = const_dec_it funs acc cd in Pconst cd, acc
| Ptype td -> pd, acc (* TODO types *) | Ptype _td -> pd, acc (* TODO types *)
| Pnode n -> let n, acc = node_dec_it funs acc n in Pnode n, acc | Pnode n -> let n, acc = node_dec_it funs acc n in Pnode n, acc
let defaults = { let defaults = {
@ -380,8 +380,3 @@ let defaults_stop = {
program = stop; program = stop;
program_desc = stop; program_desc = stop;
global_funs = Global_mapfold.defaults_stop } global_funs = Global_mapfold.defaults_stop }

@ -28,18 +28,12 @@
(***********************************************************************) (***********************************************************************)
(* The Heptagon printer *) (* The Heptagon printer *)
open Location
open Misc open Misc
open Names open Names
open Idents
open Modules
open Static
open Format open Format
open Global_printer open Global_printer
open Pp_tools open Pp_tools
open Types
open Linearity open Linearity
open Signature
open Heptagon open Heptagon
let iterator_to_string i = let iterator_to_string i =
@ -334,7 +328,7 @@ and print_sblock sep ff { b_local = v_list; b_equs = eqs } =
fprintf ff "@[<v>%a@,%a@]" (print_local_vars sep) v_list print_eq_list eqs fprintf ff "@[<v>%a@,%a@]" (print_local_vars sep) v_list print_eq_list eqs
let rec print_type_def ff { t_name = name; t_desc = tdesc } = let print_type_def ff { t_name = name; t_desc = tdesc } =
let print_type_desc ff = function let print_type_desc ff = function
| Type_abs -> () | Type_abs -> ()
| Type_alias ty -> fprintf ff " =@ %a" print_type ty | Type_alias ty -> fprintf ff " =@ %a" print_type ty

@ -28,10 +28,7 @@
(***********************************************************************) (***********************************************************************)
(* the internal representation *) (* the internal representation *)
open Location open Location
open Misc
open Names
open Idents open Idents
open Static
open Signature open Signature
open Types open Types
open Linearity open Linearity
@ -139,4 +136,3 @@ let signature_of_node n =
node_param_constraints = n.n_param_constraints; node_param_constraints = n.n_param_constraints;
node_external = false; node_external = false;
node_loc = n.n_loc } node_loc = n.n_loc }

@ -28,15 +28,12 @@
(***********************************************************************) (***********************************************************************)
(* the internal representation *) (* the internal representation *)
open Location open Location
open Misc
open Names open Names
open Idents open Idents
open Static
open Signature open Signature
open Types open Types
open Linearity open Linearity
open Clocks open Clocks
open Initial
type state_name = name type state_name = name
@ -217,4 +214,3 @@ and interface_desc =
| Itypedef of type_dec | Itypedef of type_dec
| Iconstdef of const_dec | Iconstdef of const_dec
| Isignature of signature | Isignature of signature

@ -29,8 +29,6 @@
open Compiler_options open Compiler_options
open Compiler_utils open Compiler_utils
open Location
open Global_printer
let pp p = if !verbose then Hept_printer.print stdout p let pp p = if !verbose then Hept_printer.print stdout p

@ -30,7 +30,6 @@
open Compiler_options open Compiler_options
open Compiler_utils open Compiler_utils
open Location open Location
open Global_printer
let pp p = if !verbose then Hept_printer.print stdout p let pp p = if !verbose then Hept_printer.print stdout p
@ -72,4 +71,3 @@ let parse_interface modname lexbuf =
(* Convert the parse tree to Heptagon AST *) (* Convert the parse tree to Heptagon AST *)
let i = do_silent_pass "Scoping" Hept_scoping.translate_interface i in let i = do_silent_pass "Scoping" Hept_scoping.translate_interface i in
i i

@ -28,10 +28,8 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Signature
open Location open Location
open Names open Names
open Types
open Linearity open Linearity
open Hept_parsetree open Hept_parsetree

@ -29,7 +29,6 @@
open Location open Location
open Signature
(** var_names will be converted to idents *) (** var_names will be converted to idents *)
type var_name = Names.name type var_name = Names.name
@ -64,9 +63,9 @@ and static_exp_desc =
| Sconstructor of constructor_name | Sconstructor of constructor_name
| Sfield of field_name | Sfield of field_name
| Stuple of static_exp list | Stuple of static_exp list
| Sarray_power of static_exp * (static_exp list) (** power : 0^n : [0,0,0,0,0,..] *) | Sarray_power of static_exp * (static_exp list) (** power : 0^n : [[0,0,0,0,0,..]] *)
| Sarray of static_exp list (** [ e1, e2, e3 ] *) | Sarray of static_exp list (** [[ e1, e2, e3 ]] *)
| Srecord of (field_name * static_exp) list (** { f1 = e1; f2 = e2; ... } *) | Srecord of (field_name * static_exp) list (** [{ f1 = e1; f2 = e2; ... }] *)
| Sop of fun_name * static_exp list (** defined ops for now in pervasives *) | Sop of fun_name * static_exp list (** defined ops for now in pervasives *)
type iterator_type = type iterator_type =

@ -54,7 +54,6 @@
op<a1,a2> (a3) ==> op <a1> (a2,a3) ==> op (a1,a2,a3) *) op<a1,a2> (a3) ==> op <a1> (a2,a3) ==> op (a1,a2,a3) *)
open Location open Location
open Types
open Hept_parsetree open Hept_parsetree
open Names open Names
open Idents open Idents
@ -221,7 +220,7 @@ let build_const loc vd_list =
List.fold_left build NamesSet.empty vd_list List.fold_left build NamesSet.empty vd_list
(** { 3 Translate the AST into Heptagon. } *) (** {3 Translate the AST into Heptagon} *)
let translate_iterator_type = function let translate_iterator_type = function
| Imap -> Heptagon.Imap | Imap -> Heptagon.Imap
| Imapi -> Heptagon.Imapi | Imapi -> Heptagon.Imapi
@ -236,7 +235,7 @@ let rec translate_static_exp se =
with with
| ScopingError err -> message se.se_loc err | ScopingError err -> message se.se_loc err
and translate_static_exp_desc loc ed = and translate_static_exp_desc _loc ed =
let t = translate_static_exp in let t = translate_static_exp in
match ed with match ed with
| Svar (Q q) -> Types.Svar q | Svar (Q q) -> Types.Svar q
@ -579,7 +578,7 @@ let translate_signature s =
let p, _ = params_of_var_decs Rename.empty s.sig_params in let p, _ = params_of_var_decs Rename.empty s.sig_params in
let c = List.map translate_constrnt s.sig_param_constraints in let c = List.map translate_constrnt s.sig_param_constraints in
let sig_node = let sig_node =
Signature.mk_node Signature.mk_node
~extern:s.sig_external s.sig_loc i o s.sig_stateful s.sig_unsafe p in ~extern:s.sig_external s.sig_loc i o s.sig_stateful s.sig_unsafe p in
Check_signature.check_signature sig_node; Check_signature.check_signature sig_node;
safe_add s.sig_loc add_value n sig_node; safe_add s.sig_loc add_value n sig_node;

@ -30,7 +30,6 @@
(* TODO deal correctly with [stateful] and [unsafe] *) (* TODO deal correctly with [stateful] and [unsafe] *)
open Misc
open Types open Types
open Names open Names
open Idents open Idents
@ -38,7 +37,6 @@ open Heptagon
open Hept_utils open Hept_utils
open Hept_mapfold open Hept_mapfold
open Initial open Initial
open Modules
type var = S | NS | R | NR | PNR type var = S | NS | R | NR | PNR
let fresh = Idents.gen_fresh "automata" let fresh = Idents.gen_fresh "automata"
@ -130,9 +128,9 @@ let translate_automaton v eq_list handlers =
in in
let strong { s_state = n; s_unless = su } = let strong { s_state = n; s_unless = su } =
let rst_vd = mk_var_dec resetname (Tid Initial.pbool) Linearity.Ltop in let rst_vd = mk_var_dec resetname (Tid Initial.pbool) ~linearity:Linearity.Ltop in
let defnames = Env.add resetname rst_vd Env.empty in let defnames = Env.add resetname rst_vd Env.empty in
let state_vd = mk_var_dec statename tstatetype Linearity.Ltop in let state_vd = mk_var_dec statename tstatetype ~linearity:Linearity.Ltop in
let defnames = Env.add statename state_vd defnames in let defnames = Env.add statename state_vd defnames in
let st_eq = mk_simple_equation let st_eq = mk_simple_equation
(Etuplepat[Evarpat(statename); Evarpat(resetname)]) (Etuplepat[Evarpat(statename); Evarpat(resetname)])
@ -142,9 +140,9 @@ let translate_automaton v eq_list handlers =
in in
let weak { s_state = n; s_block = b; s_until = su } = let weak { s_state = n; s_block = b; s_until = su } =
let nextrst_vd = mk_var_dec next_resetname (Tid Initial.pbool) Linearity.Ltop in let nextrst_vd = mk_var_dec next_resetname (Tid Initial.pbool) ~linearity:Linearity.Ltop in
let defnames = Env.add next_resetname nextrst_vd b.b_defnames in let defnames = Env.add next_resetname nextrst_vd b.b_defnames in
let nextstate_vd = mk_var_dec next_statename tstatetype Linearity.Ltop in let nextstate_vd = mk_var_dec next_statename tstatetype ~linearity:Linearity.Ltop in
let defnames = Env.add next_statename nextstate_vd defnames in let defnames = Env.add next_statename nextstate_vd defnames in
let ns_eq = mk_simple_equation let ns_eq = mk_simple_equation
(Etuplepat[Evarpat(next_statename); Evarpat(next_resetname)]) (Etuplepat[Evarpat(next_statename); Evarpat(next_resetname)])
@ -195,7 +193,7 @@ let translate_automaton v eq_list handlers =
(mk_exp_fby_false (boolvar (next_resetname))) in (mk_exp_fby_false (boolvar (next_resetname))) in
v, ns_switch_eq :: switch_eq :: pnr_eq :: eq_list v, ns_switch_eq :: switch_eq :: pnr_eq :: eq_list
let rec eq funs (v, eq_list) eq = let eq funs (v, eq_list) eq =
let eq, (v, eq_list) = Hept_mapfold.eq funs (v, eq_list) eq in let eq, (v, eq_list) = Hept_mapfold.eq funs (v, eq_list) eq in
match eq.eq_desc with match eq.eq_desc with
| Eautomaton state_handlers -> | Eautomaton state_handlers ->

@ -28,9 +28,7 @@
(***********************************************************************) (***********************************************************************)
(* complete partial definitions with [x = last(x)] *) (* complete partial definitions with [x = last(x)] *)
open Misc
open Heptagon open Heptagon
open Global_mapfold
open Hept_utils open Hept_utils
open Hept_mapfold open Hept_mapfold
open Idents open Idents
@ -67,7 +65,7 @@ let funs_collect =
(* adds an equation [x = last(x)] for every partially defined variable *) (* adds an equation [x = last(x)] for every partially defined variable *)
(* in a control structure *) (* in a control structure *)
let complete_with_last defined_names local_defined_names eq_list = let complete_with_last defined_names local_defined_names eq_list =
let last n vd = mk_exp (Elast n) vd.v_type Linearity.Ltop in let last n vd = mk_exp (Elast n) vd.v_type ~linearity:Linearity.Ltop in
let equation n vd eq_list = let equation n vd eq_list =
(mk_equation (Eeq(Evarpat n, last n vd)))::eq_list in (mk_equation (Eeq(Evarpat n, last n vd)))::eq_list in
let d = Env.diff defined_names local_defined_names in let d = Env.diff defined_names local_defined_names in
@ -86,11 +84,10 @@ let eqdesc funs _ ed = match ed with
let ed, defnames = let ed, defnames =
Hept_mapfold.eqdesc funs_collect Env.empty ed in Hept_mapfold.eqdesc funs_collect Env.empty ed in
(* add missing defnames *) (* add missing defnames *)
let ed, defnames = Hept_mapfold.eqdesc funs defnames ed in let ed, _defnames = Hept_mapfold.eqdesc funs defnames ed in
ed, Env.empty ed, Env.empty
| _ -> raise Errors.Fallback | _ -> raise Errors.Fallback
let funs = { Hept_mapfold.defaults with eqdesc = eqdesc; block = block; } let funs = { Hept_mapfold.defaults with eqdesc = eqdesc; block = block; }
let program p = let p, _ = program_it funs Env.empty p in p let program p = let p, _ = program_it funs Env.empty p in p

@ -93,7 +93,7 @@ let mk_unique_node nd =
let subst_contract funs subst c = let subst_contract funs subst c =
let c_block, subst' = subst_contract_block funs subst c.c_block in let c_block, subst' = subst_contract_block funs subst c.c_block in
let c_assume, subst' = exp_it funs subst' c.c_assume in let c_assume, subst' = exp_it funs subst' c.c_assume in
let c_enforce, subst' = exp_it funs subst' c.c_enforce in let c_enforce, _subst' = exp_it funs subst' c.c_enforce in
let subst = let subst =
List.fold_left List.fold_left
(fun subst vd -> (fun subst vd ->
@ -323,4 +323,3 @@ let program p =
assert (newequs = []); assert (newequs = []);
assert (contracts = []); assert (contracts = []);
p p

@ -95,7 +95,7 @@ let tuple_of_vd_list l =
mk_exp (Eapp (mk_app Etuple, el, None)) ty ~linearity:lin mk_exp (Eapp (mk_app Etuple, el, None)) ty ~linearity:lin
let vd_of_arg ad = let vd_of_arg ad =
mk_var_dec (fresh_vd_of_arg ad) ad.a_type ad.a_linearity mk_var_dec (fresh_vd_of_arg ad) ad.a_type ~linearity:ad.a_linearity
(** @return the lists of inputs and outputs (as var_dec) of (** @return the lists of inputs and outputs (as var_dec) of
an app object. *) an app object. *)
@ -150,7 +150,7 @@ let edesc funs acc ed =
let new_inp, e, acc_eq_list = mk_call g acc_eq_list in let new_inp, e, acc_eq_list = mk_call g acc_eq_list in
new_inp @ inp, acc_eq_list, e::largs, local_args @ args, true new_inp @ inp, acc_eq_list, e::largs, local_args @ args, true
| _ -> | _ ->
let vd = mk_var_dec (fresh_var ()) e.e_ty e.e_linearity in let vd = mk_var_dec (fresh_var ()) e.e_ty ~linearity:e.e_linearity in
vd::inp, acc_eq_list, (exp_of_vd vd)::largs, e::args, b vd::inp, acc_eq_list, (exp_of_vd vd)::largs, e::args, b
in in
@ -162,7 +162,7 @@ let edesc funs acc ed =
let _, outp = get_node_inp_outp f in let _, outp = get_node_inp_outp f in
let f_out_type = type_of_vd_list outp in let f_out_type = type_of_vd_list outp in
let f_out_lin = linearity_of_vd_list outp in let f_out_lin = linearity_of_vd_list outp in
let call = mk_exp (Eapp(f, largs, None)) f_out_type f_out_lin in let call = mk_exp (Eapp(f, largs, None)) f_out_type ~linearity:f_out_lin in
let eq = mk_equation (Eeq(pat_of_vd_list outp, call)) in let eq = mk_equation (Eeq(pat_of_vd_list outp, call)) in
(* create the lambda *) (* create the lambda *)
let anon = mk_app let anon = mk_app

@ -46,10 +46,11 @@ let last (eq_list, env, v) { v_ident = n; v_type = t; v_linearity = lin; v_last
let eq = let eq =
mk_equation (Eeq (Evarpat lastn, mk_equation (Eeq (Evarpat lastn,
mk_exp (Epre (default, mk_exp (Epre (default,
mk_exp (Evar n) t Linearity.Ltop)) t lin)) in mk_exp (Evar n) t ~linearity:Linearity.Ltop))
t ~linearity:lin)) in
eq:: eq_list, eq:: eq_list,
Env.add n lastn env, Env.add n lastn env,
(mk_var_dec lastn t lin) :: v (mk_var_dec lastn t ~linearity:lin) :: v
let extend_env env v = List.fold_left last ([], env, []) v let extend_env env v = List.fold_left last ([], env, []) v

@ -27,14 +27,11 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Misc open Misc
open Names
open Idents
open Location open Location
open Heptagon open Heptagon
open Hept_utils open Hept_utils
open Hept_mapfold open Hept_mapfold
open Types open Types
open Clocks
open Linearity open Linearity
open Format open Format
@ -86,7 +83,7 @@ let flatten_e_list l =
let equation (d_list, eq_list) e = let equation (d_list, eq_list) e =
let add_one_var ty lin d_list = let add_one_var ty lin d_list =
let n = Idents.gen_var "normalize" "v" in let n = Idents.gen_var "normalize" "v" in
let d_list = (mk_var_dec n ty lin) :: d_list in let d_list = (mk_var_dec n ty ~linearity:lin) :: d_list in
n, d_list n, d_list
in in
match e.e_ty with match e.e_ty with
@ -102,7 +99,7 @@ let equation (d_list, eq_list) e =
let pat_list = List.map (fun n -> Evarpat n) var_list in let pat_list = List.map (fun n -> Evarpat n) var_list in
let eq_list = (mk_equation (Eeq (Etuplepat pat_list, e))) :: eq_list in let eq_list = (mk_equation (Eeq (Etuplepat pat_list, e))) :: eq_list in
let e_list = Misc.map3 let e_list = Misc.map3
(fun n ty lin -> mk_exp (Evar n) ty lin) var_list ty_list lin_list in (fun n ty lin -> mk_exp (Evar n) ty ~linearity:lin) var_list ty_list lin_list in
let e = Eapp(mk_app Etuple, e_list, None) in let e = Eapp(mk_app Etuple, e_list, None) in
(d_list, eq_list), e (d_list, eq_list), e
| _ -> | _ ->
@ -111,7 +108,7 @@ let equation (d_list, eq_list) e =
(d_list, eq_list), Evar n (d_list, eq_list), Evar n
(* [(e1,...,ek) when C(n) = (e1 when C(n),...,ek when C(n))] *) (* [(e1,...,ek) when C(n) = (e1 when C(n),...,ek when C(n))] *)
let rec whenc context e c n e_orig = let whenc context e c n e_orig =
let when_on_c c n context e = let when_on_c c n context e =
(* If memalloc is activated, there cannot be a stateful exp inside a when. Indeed, (* If memalloc is activated, there cannot be a stateful exp inside a when. Indeed,
the expression inside the when will be called on a fast rhythm and write its result the expression inside the when will be called on a fast rhythm and write its result
@ -268,7 +265,7 @@ and merge context e x c_e_list =
let context, e = translate ExtValue context e in let context, e = translate ExtValue context e in
(tag, e), context (tag, e), context
in in
let rec mk_merge x c_list e_lists = let mk_merge x c_list e_lists =
let ty = (List.hd (List.hd e_lists)).e_ty in let ty = (List.hd (List.hd e_lists)).e_ty in
let lin = (List.hd (List.hd e_lists)).e_linearity in let lin = (List.hd (List.hd e_lists)).e_linearity in
let rec build_c_e_list c_list e_lists = let rec build_c_e_list c_list e_lists =
@ -347,7 +344,7 @@ and translate_eq_list d_list eq_list =
(fun context eq -> translate_eq context eq) (fun context eq -> translate_eq context eq)
(d_list, []) eq_list (d_list, []) eq_list
let eq funs context eq = let eq _funs context eq =
let context = translate_eq context eq in let context = translate_eq context eq in
eq, context eq, context

@ -31,7 +31,6 @@
(* REQUIRES automaton stateful present *) (* REQUIRES automaton stateful present *)
open Misc open Misc
open Idents
open Heptagon open Heptagon
open Hept_utils open Hept_utils
open Types open Types
@ -117,7 +116,7 @@ let block funs (res,_) b =
(* Transform reset blocks in blocks with reseted exps, (* Transform reset blocks in blocks with reseted exps,
create a var to store the reset condition evaluation if not already a var. *) create a var to store the reset condition evaluation if not already a var. *)
let eqdesc funs (res,stateful) = function let eqdesc funs (res,stateful) = function
| Ereset(b, ({ e_desc = Evar x } as e)) -> | Ereset(b, ({ e_desc = Evar _ } as e)) ->
let r = if stateful then merge_resets res (Some e) else res in let r = if stateful then merge_resets res (Some e) else res in
let b, _ = Hept_mapfold.block_it funs (r,stateful) b in let b, _ = Hept_mapfold.block_it funs (r,stateful) b in
Eblock(b), (res,stateful) Eblock(b), (res,stateful)

@ -59,7 +59,6 @@ with one defined var y ( defnames = {y} ) and used var x
open Misc
open Heptagon open Heptagon
open Hept_utils open Hept_utils
open Hept_mapfold open Hept_mapfold
@ -81,7 +80,6 @@ module Env = struct
open Idents open Idents
open Names
open Clocks open Clocks
type t = Base | Level of ck * IdentSet.t * t type t = Base | Level of ck * IdentSet.t * t
@ -152,7 +150,7 @@ let level_up defnames constr h =
let add_to_locals vd_env locals h = let add_to_locals vd_env locals h =
let add_one n nn (locals,vd_env) = let add_one n nn (locals,vd_env) =
let orig_vd = Idents.Env.find n vd_env in let orig_vd = Idents.Env.find n vd_env in
let vd_nn = mk_var_dec nn orig_vd.v_type orig_vd.v_linearity in let vd_nn = mk_var_dec nn orig_vd.v_type ~linearity:orig_vd.v_linearity in
vd_nn::locals, Idents.Env.add vd_nn.v_ident vd_nn vd_env vd_nn::locals, Idents.Env.add vd_nn.v_ident vd_nn vd_env
in in
fold add_one h (locals, vd_env) fold add_one h (locals, vd_env)
@ -197,7 +195,7 @@ let eqdesc funs (vd_env,env,h) eqd = match eqd with
(* create a clock var corresponding to the switch condition [e] *) (* create a clock var corresponding to the switch condition [e] *)
let ck = fresh_clock_id () in let ck = fresh_clock_id () in
let e, (vd_env,env,h) = exp_it funs (vd_env,env,h) e in let e, (vd_env,env,h) = exp_it funs (vd_env,env,h) e in
let locals = [mk_var_dec ck e.e_ty e.e_linearity] in let locals = [mk_var_dec ck e.e_ty ~linearity:e.e_linearity] in
let equs = [mk_equation (Eeq (Evarpat ck, e))] in let equs = [mk_equation (Eeq (Evarpat ck, e))] in
(* typing have proved that defined variables are the same among states *) (* typing have proved that defined variables are the same among states *)
@ -246,8 +244,3 @@ let program p =
exp = exp; eq = eq; eqdesc = eqdesc } in exp = exp; eq = eq; eqdesc = eqdesc } in
let p, _ = program_it funs (Idents.Env.empty,Env.Base,Rename.empty) p in let p, _ = program_it funs (Idents.Env.empty,Env.Base,Rename.empty) p in
p p

@ -33,14 +33,11 @@ open Location
open Misc open Misc
open Names open Names
open Idents open Idents
open Static
open Types open Types
open Clocks open Clocks
open Format open Format
open Minils open Minils
open Mls_utils
open Signature
module Error = module Error =
struct struct
@ -84,7 +81,7 @@ let translate_iterator_type = function
| Heptagon.Ifoldi -> Ifoldi | Heptagon.Ifoldi -> Ifoldi
| Heptagon.Imapfold -> Imapfold | Heptagon.Imapfold -> Imapfold
let rec translate_op = function let translate_op = function
| Heptagon.Eifthenelse -> Eifthenelse | Heptagon.Eifthenelse -> Eifthenelse
| Heptagon.Efun f -> Efun f | Heptagon.Efun f -> Efun f
| Heptagon.Enode f -> Enode f | Heptagon.Enode f -> Enode f
@ -180,7 +177,7 @@ let rec translate_pat = function
| Heptagon.Evarpat(n) -> Evarpat n | Heptagon.Evarpat(n) -> Evarpat n
| Heptagon.Etuplepat(l) -> Etuplepat (List.map translate_pat l) | Heptagon.Etuplepat(l) -> Etuplepat (List.map translate_pat l)
let rec translate_eq { Heptagon.eq_desc = desc; Heptagon.eq_loc = loc } = let translate_eq { Heptagon.eq_desc = desc; Heptagon.eq_loc = loc } =
match desc with match desc with
| Heptagon.Eeq(p, e) -> | Heptagon.Eeq(p, e) ->
begin match e.Heptagon.e_desc with begin match e.Heptagon.e_desc with

@ -37,7 +37,6 @@ open Obc_utils
open Obc_mapfold open Obc_mapfold
open Types open Types
open Clocks open Clocks
open Static
open Initial open Initial
@ -83,7 +82,7 @@ let fresh_for = fresh_for "mls2obc"
let op_from_string op = { qual = Pervasives; name = op; } let op_from_string op = { qual = Pervasives; name = op; }
let rec pattern_of_idx_list p l = let pattern_of_idx_list p l =
let rec aux p l = match Modules.unalias_type p.pat_ty, l with let rec aux p l = match Modules.unalias_type p.pat_ty, l with
| _, [] -> p | _, [] -> p
| Tarray (ty',_), idx :: l -> aux (mk_pattern ty' (Larray (p, idx))) l | Tarray (ty',_), idx :: l -> aux (mk_pattern ty' (Larray (p, idx))) l
@ -103,7 +102,7 @@ let rec extvalue_of_idx_list w l = match Modules.unalias_type w.w_ty, l with
extvalue_of_idx_list (mk_ext_value ty' (Warray (w, idx))) l extvalue_of_idx_list (mk_ext_value ty' (Warray (w, idx))) l
| _ -> internal_error "mls2obc extvalue_of_idx_list" | _ -> internal_error "mls2obc extvalue_of_idx_list"
let rec ext_value_of_trunc_idx_list p l = let ext_value_of_trunc_idx_list p l =
let mk_between idx se = let mk_between idx se =
mk_exp_int (Eop (mk_pervasives "between", [idx; mk_ext_value_exp se.se_ty (Wconst se)])) mk_exp_int (Eop (mk_pervasives "between", [idx; mk_ext_value_exp se.se_ty (Wconst se)]))
in in
@ -116,7 +115,7 @@ let rec ext_value_of_trunc_idx_list p l =
let rec ty_of_idx_list ty idx_list = match ty, idx_list with let rec ty_of_idx_list ty idx_list = match ty, idx_list with
| _, [] -> ty | _, [] -> ty
| Tarray(ty, _), idx::idx_list -> ty_of_idx_list ty idx_list | Tarray(ty, _), _idx::idx_list -> ty_of_idx_list ty idx_list
| _, _ -> internal_error "mls2obc ty_of_idx_list" | _, _ -> internal_error "mls2obc ty_of_idx_list"
let mk_static_array_power ty c params = match params with let mk_static_array_power ty c params = match params with
@ -133,7 +132,7 @@ let array_elt_of_exp idx e =
mk_ext_value_exp ty (Warray(ext_value_of_exp e, idx)) mk_ext_value_exp ty (Warray(ext_value_of_exp e, idx))
| _ -> internal_error "mls2obc array_elt_of_exp" | _ -> internal_error "mls2obc array_elt_of_exp"
let rec array_elt_of_exp_list idx_list e = let array_elt_of_exp_list idx_list e =
match e.e_desc, Modules.unalias_type e.e_ty with match e.e_desc, Modules.unalias_type e.e_ty with
| Eextvalue { w_desc = Wconst { se_desc = Sarray_power (c, params) } }, Tarray (ty,n) -> | Eextvalue { w_desc = Wconst { se_desc = Sarray_power (c, params) } }, Tarray (ty,n) ->
let new_params, _ = Misc.split_at (List.length params - List.length idx_list) params in let new_params, _ = Misc.split_at (List.length params - List.length idx_list) params in
@ -244,7 +243,7 @@ let rec translate_extvalue map w = match w.Minils.w_desc with
| _ -> | _ ->
let desc = match w.Minils.w_desc with let desc = match w.Minils.w_desc with
| Minils.Wconst v -> Wconst v | Minils.Wconst v -> Wconst v
| Minils.Wvar x -> assert false | Minils.Wvar _ -> assert false
| Minils.Wfield (w1, f) -> Wfield (translate_extvalue map w1, f) | Minils.Wfield (w1, f) -> Wfield (translate_extvalue map w1, f)
| Minils.Wwhen (w1, _, _) | Minils.Wreinit(_, w1) -> (translate_extvalue map w1).w_desc | Minils.Wwhen (w1, _, _) | Minils.Wreinit(_, w1) -> (translate_extvalue map w1).w_desc
in in
@ -318,7 +317,7 @@ and translate_act map pat
let cpt1, cpt1d = fresh_it () in let cpt1, cpt1d = fresh_it () in
let cpt2, cpt2d = fresh_it () in let cpt2, cpt2d = fresh_it () in
let x = var_from_name map x in let x = var_from_name map x in
let t = x.pat_ty in let _t = x.pat_ty in
(match e1.Minils.w_ty, e2.Minils.w_ty with (match e1.Minils.w_ty, e2.Minils.w_ty with
| Tarray (t1, n1), Tarray (t2, n2) -> | Tarray (t1, n1), Tarray (t2, n2) ->
let e1 = translate_extvalue_to_exp map e1 in let e1 = translate_extvalue_to_exp map e1 in
@ -391,7 +390,7 @@ and translate_act map pat
| Minils.Evarpat x, Minils.Eapp ({ Minils.a_op = Minils.Eselect_trunc }, e1::idx, _) -> | Minils.Evarpat x, Minils.Eapp ({ Minils.a_op = Minils.Eselect_trunc }, e1::idx, _) ->
let x = var_from_name map x in let x = var_from_name map x in
let bounds = Mls_utils.bounds_list e1.Minils.w_ty in let _bounds = Mls_utils.bounds_list e1.Minils.w_ty in
let e1 = translate_extvalue map e1 in let e1 = translate_extvalue map e1 in
let idx = List.map (translate_extvalue_to_exp map) idx in let idx = List.map (translate_extvalue_to_exp map) idx in
let w = ext_value_of_trunc_idx_list e1 idx in let w = ext_value_of_trunc_idx_list e1 idx in
@ -459,7 +458,7 @@ let rec translate_eq map call_context
(v, si, j, s) = (v, si, j, s) =
let { Minils.e_desc = desc; Minils.e_loc = loc } = e in let { Minils.e_desc = desc; Minils.e_loc = loc } = e in
match (pat, desc) with match (pat, desc) with
| pat, Minils.Ewhen (e,_,_) -> | _pat, Minils.Ewhen (e,_,_) ->
translate_eq map call_context {eq with Minils.eq_rhs = e} (v, si, j, s) translate_eq map call_context {eq with Minils.eq_rhs = e} (v, si, j, s)
(* TODO Efby and Eifthenelse should be dealt with in translate_act, no ? *) (* TODO Efby and Eifthenelse should be dealt with in translate_act, no ? *)
| Minils.Evarpat n, Minils.Efby (opt_c, e) -> | Minils.Evarpat n, Minils.Efby (opt_c, e) ->
@ -485,7 +484,7 @@ let rec translate_eq map call_context
let action = mk_ifthenelse cond true_act false_act in let action = mk_ifthenelse cond true_act false_act in
v, si, j, (control map ck action) :: s v, si, j, (control map ck action) :: s
| pat, Minils.Eapp({ Minils.a_op = | _pat, Minils.Eapp({ Minils.a_op =
Minils.Efun ({ qual = Module "Iostream"; name = "printf" | "fprintf" } as q)}, Minils.Efun ({ qual = Module "Iostream"; name = "printf" | "fprintf" } as q)},
args, _) -> args, _) ->
let action = Aop (q, List.map (translate_extvalue_to_exp map) args) in let action = Aop (q, List.map (translate_extvalue_to_exp map) args) in
@ -784,7 +783,7 @@ let program { Minils.p_modname = p_modname; Minils.p_opened = p_o; Minils.p_desc
| Minils.Pnode n when not (Itfusion.is_anon_node n.Minils.n_name) -> | Minils.Pnode n when not (Itfusion.is_anon_node n.Minils.n_name) ->
Pclass (translate_node n) :: acc Pclass (translate_node n) :: acc
(* dont't translate anonymous nodes, they will be inlined *) (* dont't translate anonymous nodes, they will be inlined *)
| Minils.Pnode n -> acc | Minils.Pnode _ -> acc
| Minils.Ptype t -> Ptype (translate_ty_def t) :: acc | Minils.Ptype t -> Ptype (translate_ty_def t) :: acc
| Minils.Pconst c -> Pconst (translate_const_def c) :: acc | Minils.Pconst c -> Pconst (translate_const_def c) :: acc
in in

@ -29,9 +29,6 @@
open Compiler_utils open Compiler_utils
open Compiler_options open Compiler_options
open Obc
open Minils
open Misc
(** Definition of a target. A target starts either from (** Definition of a target. A target starts either from
dataflow code (ie Minils) or sequential code (ie Obc), dataflow code (ie Minils) or sequential code (ie Obc),

@ -37,14 +37,12 @@
*) *)
open Misc
open Idents open Idents
open Names open Names
open Minils open Minils
open Global_printer open Global_printer
open Mls_printer open Mls_printer
open Signature open Signature
open Types
open Clocks open Clocks
open Location open Location
open Format open Format
@ -179,7 +177,7 @@ let typing_eq h ({ eq_lhs = pat; eq_rhs = e; eq_loc = loc } as eq) =
Ck ck, ck Ck ck, ck
| Ewhen (e,c,n) -> | Ewhen (e,c,n) ->
let ck_n = ck_of_name h n in let ck_n = ck_of_name h n in
let base = expect (skeleton ck_n e.e_ty) e in let _base = expect (skeleton ck_n e.e_ty) e in
let base_ck = if stateful e then ck_n else Con (ck_n, c, n) in let base_ck = if stateful e then ck_n else Con (ck_n, c, n) in
skeleton (Con (ck_n, c, n)) e.e_ty, base_ck skeleton (Con (ck_n, c, n)) e.e_ty, base_ck
| Emerge (x, c_e_list) -> | Emerge (x, c_e_list) ->
@ -201,7 +199,7 @@ let typing_eq h ({ eq_lhs = pat; eq_rhs = e; eq_loc = loc } as eq) =
typing_app h base_ck pat op (pargs@args) typing_app h base_ck pat op (pargs@args)
| Imapi -> (* clocking the node with the extra i input on [ck_r] *) | Imapi -> (* clocking the node with the extra i input on [ck_r] *)
let il (* stubs i as 0 *) = let il (* stubs i as 0 *) =
List.map (fun x -> mk_extvalue ~ty:Initial.tint ~linearity:Linearity.Ltop List.map (fun _ -> mk_extvalue ~ty:Initial.tint ~linearity:Linearity.Ltop
~clock:base_ck (Wconst (Initial.mk_static_int 0))) nl ~clock:base_ck (Wconst (Initial.mk_static_int 0))) nl
in in
typing_app h base_ck pat op (pargs@args@il) typing_app h base_ck pat op (pargs@args@il)
@ -212,7 +210,7 @@ let typing_eq h ({ eq_lhs = pat; eq_rhs = e; eq_loc = loc } as eq) =
ct ct
| Ifoldi -> (* clocking the node with the extra i and last in/out constraints *) | Ifoldi -> (* clocking the node with the extra i and last in/out constraints *)
let il (* stubs i as 0 *) = let il (* stubs i as 0 *) =
List.map (fun x -> mk_extvalue ~ty:Initial.tint ~linearity:Linearity.Ltop List.map (fun _ -> mk_extvalue ~ty:Initial.tint ~linearity:Linearity.Ltop
~clock:base_ck (Wconst (Initial.mk_static_int 0))) nl ~clock:base_ck (Wconst (Initial.mk_static_int 0))) nl
in in
let rec insert_i args = match args with let rec insert_i args = match args with
@ -303,4 +301,3 @@ let program p =
| _ -> pd | _ -> pd
in in
{ p with p_desc = List.map program_desc p.p_desc; } { p with p_desc = List.map program_desc p.p_desc; }

@ -34,7 +34,6 @@ open Minils
open Linearity open Linearity
open Interference_graph open Interference_graph
open Containers open Containers
open Printf
let print_interference_graphs = false let print_interference_graphs = false
let verbose_mode = false let verbose_mode = false
@ -421,7 +420,7 @@ let init_interference_graph () =
TyEnv.add_element ty (mk_node iv) env TyEnv.add_element ty (mk_node iv) env
in in
(** Adds a node for the variable and all fields of a variable. *) (** Adds a node for the variable and all fields of a variable. *)
let rec add_ivar env iv ty = let add_ivar env iv ty =
let ivars = all_ivars [] iv None ty in let ivars = all_ivars [] iv None ty in
List.fold_left add_tyenv env ivars List.fold_left add_tyenv env ivars
in in
@ -440,7 +439,7 @@ let init_interference_graph () =
the list. If force is true, then interference is added the list. If force is true, then interference is added
whatever the variables are, without checking if interference whatever the variables are, without checking if interference
is real. *) is real. *)
let rec add_interferences_from_list force vars = let add_interferences_from_list force vars =
let add_interference ivx ivy = let add_interference ivx ivy =
if force or should_interfere (ivx, ivy) then if force or should_interfere (ivx, ivy) then
add_interference_link_from_ivar ivx ivy add_interference_link_from_ivar ivx ivy
@ -629,10 +628,10 @@ let add_init_return_eq f =
(** a_1,..,a_p = __init__ *) (** a_1,..,a_p = __init__ *)
let eq_init = mk_equation false (pat_from_dec_list f.n_input) let eq_init = mk_equation false (pat_from_dec_list f.n_input)
(mk_extvalue_exp Cbase Initial.tint Ltop (Wconst (Initial.mk_static_int 0))) in (mk_extvalue_exp Cbase Initial.tint ~linearity:Ltop (Wconst (Initial.mk_static_int 0))) in
(** __return__ = o_1,..,o_q, mem_1, ..., mem_k *) (** __return__ = o_1,..,o_q, mem_1, ..., mem_k *)
let eq_return = mk_equation false (Etuplepat []) let eq_return = mk_equation false (Etuplepat [])
(mk_exp Cbase Tinvalid Ltop (tuple_from_dec_and_mem_list f.n_output)) in (mk_exp Cbase Tinvalid ~linearity:Ltop (tuple_from_dec_and_mem_list f.n_output)) in
(eq_init::f.n_equs)@[eq_return] (eq_init::f.n_equs)@[eq_return]
(** Coalesce Imem x and Ivar x *) (** Coalesce Imem x and Ivar x *)

@ -33,7 +33,6 @@ open Location
open Names open Names
open Idents open Idents
open Signature open Signature
open Static
open Types open Types
open Linearity open Linearity
open Clocks open Clocks
@ -71,7 +70,7 @@ and extvalue_desc =
| Wconst of static_exp (*no tuple*) | Wconst of static_exp (*no tuple*)
| Wvar of var_ident | Wvar of var_ident
| Wfield of extvalue * field_name | Wfield of extvalue * field_name
| Wwhen of extvalue * constructor_name * var_ident (** extvalue when Constructor(ident) *) | Wwhen of extvalue * constructor_name * var_ident (** {!extvalue} [when Constructor(ident)] *)
| Wreinit of extvalue * extvalue | Wreinit of extvalue * extvalue
and exp = { and exp = {
@ -85,17 +84,17 @@ and exp = {
and edesc = and edesc =
| Eextvalue of extvalue | Eextvalue of extvalue
| Efby of static_exp option * extvalue | Efby of static_exp option * extvalue
(** static_exp fby extvalue *) (** {!static_exp} [fby] {!extvalue} *)
| Eapp of app * extvalue list * var_ident option | Eapp of app * extvalue list * var_ident option
(** app ~args=(extvalue,extvalue...) reset ~r=ident *) (** [app ~args=(]{!extvalue}[,extvalue...) reset ~r=ident] *)
| Ewhen of exp * constructor_name * var_ident (** e when C(c) *) | Ewhen of exp * constructor_name * var_ident (** [e when C(c)] *)
| Emerge of var_ident * (constructor_name * extvalue) list | Emerge of var_ident * (constructor_name * extvalue) list
(** merge ident (Constructor -> extvalue)+ *) (** [merge ident (Constructor -> ]{!extvalue}[)+] *)
| Estruct of (field_name * extvalue) list | Estruct of (field_name * extvalue) list
(** { field=extvalue; ... } *) (** [{ field=extvalue; ... }] *)
| Eiterator of iterator_type * app * static_exp list | Eiterator of iterator_type * app * static_exp list
* extvalue list * extvalue list * var_ident option * extvalue list * extvalue list * var_ident option
(** map f <<n>> <(extvalue)> (extvalue) reset ident *) (** [map f <<n>> <(extvalue)> (extvalue) reset ident] *)
and app = { a_op: op; and app = { a_op: op;
a_params: static_exp list; a_params: static_exp list;
@ -106,19 +105,19 @@ and app = { a_op: op;
and be delicate about optimizations, !be careful! *) and be delicate about optimizations, !be careful! *)
and op = and op =
| Eequal (** arg1 = arg2 *) | Eequal (** [arg1 = arg2] *)
| Efun of fun_name (** "Stateless" longname <<a_params>> (args) reset r *) | Efun of fun_name (** "Stateless" [longname <<a_params>> (args) reset r] *)
| Enode of fun_name (** "Stateful" longname <<a_params>> (args) reset r *) | Enode of fun_name (** "Stateful" [longname <<a_params>> (args) reset r] *)
| Eifthenelse (** if arg1 then arg2 else arg3 *) | Eifthenelse (** [if arg1 then arg2 else arg3] *)
| Efield_update (** { arg1 with a_param1 = arg2 } *) | Efield_update (** [{ arg1 with a_param1 = arg2 }] *)
| Earray (** [ args ] *) | Earray (** [[ args ]] *)
| Earray_fill (** [arg1^a_param1^..^a_paramn] *) | Earray_fill (** [[arg1^a_param1^..^a_paramn]] *)
| Eselect (** arg1[a_params] *) | Eselect (** [arg1[a_params]] *)
| Eselect_slice (** arg1[a_param1..a_param2] *) | Eselect_slice (** [arg1[a_param1..a_param2]] *)
| Eselect_dyn (** arg1.[arg3...] default arg2 *) | Eselect_dyn (** [arg1.[arg3...] default arg2] *)
| Eselect_trunc (** arg1[>arg_2 ...<]*) | Eselect_trunc (** [arg1[>arg_2 ...<]]*)
| Eupdate (** [ arg1 with arg3..arg_n = arg2 ] *) | Eupdate (** [[ arg1 with arg3..arg_n = arg2 ]] *)
| Econcat (** arg1@@arg2 *) | Econcat (** [arg1\@\@arg2] *)
type pat = type pat =
| Etuplepat of pat list | Etuplepat of pat list
@ -264,4 +263,3 @@ let mk_const_dec id ty e loc =
let mk_app ?(params=[]) ?(unsafe=false) ?(id=None) ?(inlined=false) op = let mk_app ?(params=[]) ?(unsafe=false) ?(id=None) ?(inlined=false) op =
{ a_op = op; a_params = params; a_unsafe = unsafe; { a_op = op; a_params = params; a_unsafe = unsafe;
a_id = id; a_inlined = inlined } a_id = id; a_inlined = inlined }

@ -28,12 +28,7 @@
(***********************************************************************) (***********************************************************************)
open Misc open Misc
open Names open Names
open Signature
open Idents
open Types
open Linearity open Linearity
open Clocks
open Static
open Format open Format
open Global_printer open Global_printer
open Pp_tools open Pp_tools
@ -225,7 +220,7 @@ and print_eqs ff = function
let print_open_module ff name = fprintf ff "open %s@." (modul_to_string name) let print_open_module ff name = fprintf ff "open %s@." (modul_to_string name)
let rec print_type_dec ff { t_name = name; t_desc = tdesc } = let print_type_dec ff { t_name = name; t_desc = tdesc } =
let print_type_desc ff = function let print_type_desc ff = function
| Type_abs -> () | Type_abs -> ()
| Type_alias ty -> fprintf ff " =@ %a" print_type ty | Type_alias ty -> fprintf ff " =@ %a" print_type ty

@ -33,10 +33,8 @@ open Location
open Names open Names
open Idents open Idents
open Signature open Signature
open Static
open Types open Types
open Clocks open Clocks
open Misc
(** Error Kind *) (** Error Kind *)
type err_kind = | Enot_static_exp type err_kind = | Enot_static_exp
@ -48,7 +46,7 @@ let err_message exp ?(loc=exp.e_loc) = function
print_exp exp; print_exp exp;
raise Errors.Error raise Errors.Error
let rec static_exp_of_exp e = let static_exp_of_exp e =
match e.e_desc with match e.e_desc with
| Eextvalue w -> (match w.w_desc with | Eextvalue w -> (match w.w_desc with
| Wconst se -> se | Wconst se -> se
@ -215,7 +213,7 @@ end
let node_memory_vars n = let node_memory_vars n =
let rec eq funs acc ({ eq_lhs = pat; eq_rhs = e } as equ) = let rec eq funs acc ({ eq_lhs = pat; eq_rhs = e } as equ) =
match pat, e.e_desc with match pat, e.e_desc with
| Evarpat x, Ewhen(e,_,_) -> eq funs acc {equ with eq_rhs = e} | Evarpat _, Ewhen(e,_,_) -> eq funs acc {equ with eq_rhs = e}
| Evarpat x, Efby(_, _) -> | Evarpat x, Efby(_, _) ->
let acc = (x, e.e_ty) :: acc in let acc = (x, e.e_ty) :: acc in
equ, acc equ, acc

@ -166,9 +166,6 @@ module Printer =
fprintf ff "%s@ " sep; fprintf ff "%s@ " sep;
print_list ff print sep l print_list ff print sep l
let print_string ff s =
fprintf ff "%s" s
let print_name ff n = let print_name ff n =
fprintf ff "%s" n fprintf ff "%s" n
@ -432,7 +429,7 @@ module Printer =
fprintf ff "%s_triang : Triang(constraint(%s),controllables,phantom_vars);@," fprintf ff "%s_triang : Triang(constraint(%s),controllables,phantom_vars);@,"
name name; name name;
let states = let states =
match !Compiler_options.nosink with match !Compiler_options.nosink with
true -> states true -> states
@ -465,4 +462,3 @@ module Printer =
let print dir p_l = let print dir p_l =
List.iter (print_processus dir) p_l List.iter (print_processus dir) p_l
end end

@ -27,7 +27,6 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Names open Names
open Idents
open Types open Types
open Misc open Misc
open Location open Location

@ -27,18 +27,12 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Misc
open Names open Names
open Idents open Idents
open Signature
open Minils open Minils
open Mls_utils open Mls_utils
open Mls_printer
open Global_printer
open Types open Types
open Clocks open Clocks
open Pp_tools
open Mls_compare
(* (*
Help tomato by inlining extended values. Help tomato by inlining extended values.

@ -27,26 +27,20 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Idents open Idents
open Signature
open Minils open Minils
open Mls_mapfold open Mls_mapfold
open Mls_utils open Mls_utils
(** Adds an extra equation for outputs that are also memories. (** Adds an extra equation for outputs that are also memories. For instance, if
For instance, if o is an output, then: o is an output, then:
o = v fby e
becomes
mem_o = v fby e;
o = mem_o
We also need to add one copy if two (or more) registers are defined by each other, eg: [ o = v fby e ] becomes [ mem_o = v fby e; o = mem_o; ]
x = v fby y;
y = v fby x; We also need to add one copy if two (or more) registers are defined by each
becomes other, eg:
mem_x = v fby y;
x = mem_x; [ x = v fby y; y = v fby x; ] becomes [ mem_x = v fby y; x = mem_x; y = v
y = v fby x fby x; ] *)
*)
let normalize_outputs = ref true let normalize_outputs = ref true

@ -29,11 +29,8 @@
(* scheduling of equations *) (* scheduling of equations *)
open Misc
open Minils
open Mls_utils open Mls_utils
open Sgraph open Sgraph
open Dep
(* possible overlapping between clocks *) (* possible overlapping between clocks *)
let join ck1 ck2 = let join ck1 ck2 =

@ -31,7 +31,6 @@
open Idents open Idents
open Minils open Minils
open Mls_utils open Mls_utils
open Misc
open Sgraph open Sgraph
(** In order to put together equations with the same control structure, we have to take into (** In order to put together equations with the same control structure, we have to take into

@ -28,12 +28,10 @@
(***********************************************************************) (***********************************************************************)
open Misc open Misc
open Names
open Idents open Idents
open Signature open Signature
open Minils open Minils
open Mls_utils open Mls_utils
open Mls_printer
open Global_printer open Global_printer
open Types open Types
open Clocks open Clocks
@ -312,8 +310,8 @@ and extvalue is_input w class_id_list =
(* Regroup classes from a minimization environment *) (* Regroup classes from a minimization environment *)
(*******************************************************************) (*******************************************************************)
let rec compute_classes tenv = let compute_classes tenv =
let rec add_eq_repr _ repr cenv = let add_eq_repr _ repr cenv =
let repr_list = try IntMap.find repr.er_class cenv with Not_found -> [] in let repr_list = try IntMap.find repr.er_class cenv with Not_found -> [] in
IntMap.add repr.er_class (repr :: repr_list) cenv in IntMap.add repr.er_class (repr :: repr_list) cenv in
PatMap.fold add_eq_repr tenv IntMap.empty PatMap.fold add_eq_repr tenv IntMap.empty
@ -375,15 +373,15 @@ let construct_mapping (_, cenv) =
IntMap.fold construct_mapping_eq_repr cenv Env.empty IntMap.fold construct_mapping_eq_repr cenv Env.empty
let rec reconstruct ((tenv, cenv) as env) mapping = let rec reconstruct ((_tenv, cenv) as _env) mapping =
let reconstruct_class id eq_repr_list eq_list = let reconstruct_class _id eq_repr_list eq_list =
assert (List.length eq_repr_list > 0); assert (List.length eq_repr_list > 0);
let repr = List.hd eq_repr_list in let repr = List.hd eq_repr_list in
let e = let e =
let children = let _children =
Misc.take (List.length repr.er_children - repr.er_when_count) repr.er_children in Misc.take (List.length repr.er_children - repr.er_when_count) repr.er_children in
let ed = reconstruct_exp_desc mapping repr.er_head.e_desc repr.er_children in let ed = reconstruct_exp_desc mapping repr.er_head.e_desc repr.er_children in
@ -433,7 +431,7 @@ and reconstruct_exp_desc mapping headd children =
| Ewhen _ -> assert false (* no Ewhen in exprs *) | Ewhen _ -> assert false (* no Ewhen in exprs *)
| Emerge (x_ref, clause_list) -> | Emerge (_x_ref, clause_list) ->
let x_ref, children = List.hd children, List.tl children in let x_ref, children = List.hd children, List.tl children in
Emerge (reconstruct_class_ref mapping x_ref, Emerge (reconstruct_class_ref mapping x_ref,
reconstruct_clauses clause_list children) reconstruct_clauses clause_list children)
@ -534,7 +532,7 @@ module EqClasses = Map.Make(
(if unsafe e2 then -1 else list_compare compare_children cr_list1 cr_list2)) (if unsafe e2 then -1 else list_compare compare_children cr_list1 cr_list2))
end) end)
let rec path_environment tenv = let path_environment tenv =
let enrich_env pat { er_class = id } env = let enrich_env pat { er_class = id } env =
let rec enrich pat path env = match pat with let rec enrich pat path env = match pat with
| Evarpat x -> Env.add x (id, path) env | Evarpat x -> Env.add x (id, path) env
@ -576,11 +574,11 @@ let compute_new_class (tenv : tom_env) =
in in
let classes = PatMap.fold add_eq_repr tenv EqClasses.empty in let _classes = PatMap.fold add_eq_repr tenv EqClasses.empty in
(get_id (), tenv) (get_id (), tenv)
let rec separate_classes tenv = let separate_classes tenv =
let rec fix (id, tenv) = let rec fix (id, tenv) =
let new_id, tenv = compute_new_class tenv in let new_id, tenv = compute_new_class tenv in
debug_do (fun () -> Format.printf "New tenv %d:\n%a@." id debug_tenv tenv) (); debug_do (fun () -> Format.printf "New tenv %d:\n%a@." id debug_tenv tenv) ();
@ -639,7 +637,7 @@ let update_node nd =
ignore (Modules.replace_value nd.n_name sign) ignore (Modules.replace_value nd.n_name sign)
let node nd = let node nd =
debug_do (fun () -> Format.eprintf "Minimizing %a@." print_qualname nd.n_name); debug_do (fun () -> Format.eprintf "Minimizing %a@." print_qualname nd.n_name) ();
Idents.enter_node nd.n_name; Idents.enter_node nd.n_name;
(* Initial environment *) (* Initial environment *)
@ -649,7 +647,7 @@ let node nd =
| None -> [] | None -> []
| Some c -> c.c_controllables in | Some c -> c.c_controllables in
let inputs = nd.n_input @ controllables in let inputs = nd.n_input @ controllables in
let is_input id = let is_input id =
List.exists (fun vd -> ident_compare vd.v_ident id = 0) inputs in List.exists (fun vd -> ident_compare vd.v_ident id = 0) inputs in
List.fold_left (add_equation is_input) PatMap.empty nd.n_equs in List.fold_left (add_equation is_input) PatMap.empty nd.n_equs in

@ -46,6 +46,8 @@ let ocamlfind_after_rules () =
flag ["ocaml"; "infer_interface"; "syntax_"^syntax] & S[A"-syntax"; A syntax]; flag ["ocaml"; "infer_interface"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
end (find_syntaxes ()); end (find_syntaxes ());
flag ["ocaml"; "doc"; "thread"] & S[A"-I"; A"+threads"];
(* Use both ml and mli files to build documentation: *) (* Use both ml and mli files to build documentation: *)
rule "ocaml: ml & mli -> odoc" rule "ocaml: ml & mli -> odoc"
~insert:`top ~insert:`top

@ -29,7 +29,6 @@
open Format open Format
open List open List
open Modules
open Names open Names
let print_list ff print sep l = Pp_tools.print_list_r print "" sep "" ff l let print_list ff print sep l = Pp_tools.print_list_r print "" sep "" ff l
@ -38,7 +37,7 @@ let print_list ff print sep l = Pp_tools.print_list_r print "" sep "" ff l
Copied verbatim from the old C backend. *) Copied verbatim from the old C backend. *)
let cname_of_name name = let cname_of_name name =
let buf = Buffer.create (String.length name) in let buf = Buffer.create (String.length name) in
let rec convert c = let convert c =
match c with match c with
| 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' -> | 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' ->
Buffer.add_char buf c Buffer.add_char buf c
@ -91,7 +90,7 @@ and cexpr =
| Cbop of string * cexpr * cexpr (** Binary operator. *) | Cbop of string * cexpr * cexpr (** Binary operator. *)
| Cfun_call of string * cexpr list (** Function call with its parameters. *) | Cfun_call of string * cexpr list (** Function call with its parameters. *)
| Caddrof of cexpr (** Take the address of an expression. *) | Caddrof of cexpr (** Take the address of an expression. *)
| Cstructlit of string * cexpr list (** Structure literal "{ f1, f2, ... }".*) | Cstructlit of string * cexpr list (** Structure literal [{ f1, f2, ... }].*)
| Carraylit of cexpr list (** Array literal [\[e1, e2, ...\]]. *) | Carraylit of cexpr list (** Array literal [\[e1, e2, ...\]]. *)
| Cconst of cconst (** Constants. *) | Cconst of cconst (** Constants. *)
| Cvar of string (** A local variable. *) | Cvar of string (** A local variable. *)

@ -635,7 +635,7 @@ let global_name = ref "";;
(** {2 step() and reset() functions generation *) (** {2 step() and reset() functions generation} *)
let qn_append q suffix = let qn_append q suffix =
{ qual = q.qual; name = q.name ^ suffix } { qual = q.qual; name = q.name ^ suffix }

@ -27,20 +27,15 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Format
open List open List
open Misc
open Names open Names
open Idents open Idents
open Obc open Obc
open Obc_utils open Obc_utils
open Types open Types
open Modules
open Signature open Signature
open C open C
open Cgen open Cgen
open Location
open Format
open Compiler_utils open Compiler_utils
(** {1 Main C function generation} *) (** {1 Main C function generation} *)
@ -102,7 +97,7 @@ let assert_node_res cd =
Cif (Cuop ("!", Cfield (Cvar (fst out), local_qn outn)), Cif (Cuop ("!", Cfield (Cvar (fst out), local_qn outn)),
[Csexpr (Cfun_call ("fprintf", [Csexpr (Cfun_call ("fprintf",
[Cvar "stderr"; [Cvar "stderr";
Cconst (Cstrlit ("Node \"" Cconst (Cstrlit ("Node \""
^ (Names.fullname cd.cd_name) ^ (Names.fullname cd.cd_name)
^ "\" failed at step" ^ ^ "\" failed at step" ^
" %d.\n")); " %d.\n"));
@ -248,17 +243,17 @@ let main_def_of_class_def cd =
:: ep))], :: ep))],
match nbuf_opt with match nbuf_opt with
| None -> [] | None -> []
| Some _ -> [(varn, Cty_arr (20, Cty_char))]) | Some _ -> [(varn, Cty_arr (20, Cty_char))])
end end
| Tprod _ | Tinvalid -> failwith("write_lhs_of_ty: untranslatable type") | Tprod _ | Tinvalid -> failwith("write_lhs_of_ty: untranslatable type")
in in
let stepm = find_step_method cd in let stepm = find_step_method cd in
let (scanf_calls, scanf_decls) = let (scanf_calls, scanf_decls) =
let read_lhs_of_ty_for_vd vd = let read_lhs_of_ty_for_vd vd =
read_lhs_of_ty (Cvar (Idents.name vd.v_ident)) vd.v_type in read_lhs_of_ty (Cvar (Idents.name vd.v_ident)) vd.v_type in
split (map read_lhs_of_ty_for_vd stepm.m_inputs) in split (map read_lhs_of_ty_for_vd stepm.m_inputs) in
let (printf_calls, printf_decls) = let (printf_calls, printf_decls) =
let write_lhs_of_ty_for_vd vd = let write_lhs_of_ty_for_vd vd =
let (stm, vars) = let (stm, vars) =

@ -29,13 +29,9 @@
(* Unroll loops *) (* Unroll loops *)
open Format
open List
open Modules
open Names
open C open C
let rec unroll id start stop body = let unroll id start stop body =
let rec aux i l = let rec aux i l =
let rec exp e = match e with let rec exp e = match e with
| Cuop (s, e) -> Cuop (s, exp e) | Cuop (s, e) -> Cuop (s, exp e)
@ -77,7 +73,7 @@ let rec unroll id start stop body =
aux start [] aux start []
let rec static_eval e = match e with let static_eval e = match e with
| Cconst (Ccint i) -> Some i | Cconst (Ccint i) -> Some i
| _ -> None | _ -> None

@ -31,11 +31,8 @@
(* TODO could optimize for loops ? *) (* TODO could optimize for loops ? *)
open Idents
open Misc
open Obc open Obc
open Obc_utils open Obc_utils
open Clocks
open Signature open Signature
open Obc_mapfold open Obc_mapfold
@ -58,7 +55,7 @@ let appears_in_exp, appears_in_lhs =
let used_vars e = let used_vars e =
let add x acc = if List.mem x acc then acc else x::acc in let add x acc = if List.mem x acc then acc else x::acc in
let lhsdesc funs acc ld = match ld with let lhsdesc _funs acc ld = match ld with
| Lvar y -> ld, add y acc | Lvar y -> ld, add y acc
| Lmem y -> ld, add y acc | Lmem y -> ld, add y acc
| _ -> raise Errors.Fallback | _ -> raise Errors.Fallback

@ -130,7 +130,7 @@ type program = classe list
(** [jname_of_name name] translates the string [name] to a valid Java identifier. *) (** [jname_of_name name] translates the string [name] to a valid Java identifier. *)
let jname_of_name name = let jname_of_name name =
let buf = Buffer.create (String.length name) in let buf = Buffer.create (String.length name) in
let rec convert c = let convert c =
match c with match c with
| 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' -> | 'A'..'Z' | 'a'..'z' | '0'..'9' | '_' ->
Buffer.add_char buf c Buffer.add_char buf c
@ -142,7 +142,7 @@ let jname_of_name name =
Buffer.contents buf Buffer.contents buf
let rec default_value ty = match ty with let default_value ty = match ty with
| Tclass _ -> Snull | Tclass _ -> Snull
| Tgeneric _ -> Snull | Tgeneric _ -> Snull
| Tbool -> Sbool true | Tbool -> Sbool true

@ -56,14 +56,14 @@ let program p =
let exp_current_arg = Earray_elem(exp_args, exp_argnb) in let exp_current_arg = Earray_elem(exp_args, exp_argnb) in
*) *)
let body = let body =
let vd_main, e_main, q_main, ty_main = let vd_main, e_main, q_main, _ty_main =
let q_main = Obc2java14.qualname_to_package_classe q_main in (*java qual*) let q_main = Obc2java14.qualname_to_package_classe q_main in (*java qual*)
let id = Idents.gen_var "java_main" "main" in let id = Idents.gen_var "java_main" "main" in
mk_var_dec id false (Tclass q_main), Evar id, q_main, ty_main mk_var_dec id false (Tclass q_main), Evar id, q_main, ty_main
in in
let acts = let acts =
let out = Eclass(Names.qualname_of_string "java.lang.System.out") in let out = Eclass(Names.qualname_of_string "java.lang.System.out") in
let jarrays = Eclass(Names.qualname_of_string "java.util.Arrays") in let _jarrays = Eclass(Names.qualname_of_string "java.util.Arrays") in
let jint = Eclass(Names.qualname_of_string "Integer") in let jint = Eclass(Names.qualname_of_string "Integer") in
let jfloat = Eclass(Names.qualname_of_string "Float") in let jfloat = Eclass(Names.qualname_of_string "Float") in
let jbool = Eclass(Names.qualname_of_string "Boolean") in let jbool = Eclass(Names.qualname_of_string "Boolean") in
@ -98,15 +98,7 @@ let program p =
mk_block [Aassgn(pat_step, Evar id_step_dnb)]); mk_block [Aassgn(pat_step, Evar id_step_dnb)]);
in in
let ret = Emethod_call(e_main, "step", []) in let ret = Emethod_call(e_main, "step", []) in
let print_ret = match ty_main with let main_for_loop _ =
| Types.Tarray (Types.Tarray _, _) -> Emethod_call(jarrays, "deepToString", [ret])
| Types.Tarray _ -> Emethod_call(jarrays, "toString", [ret])
| t when t = Initial.tint -> Emethod_call(jint, "toString", [ret])
| t when t = Initial.tfloat -> Emethod_call(jfloat, "toString", [ret])
| t when t = Initial.tbool -> Emethod_call(jbool, "toString", [ret])
| _ -> Emethod_call(ret, "toString", [])
in
let main_for_loop i =
(* [Aexp (Emethod_call(out, "printf", *) (* [Aexp (Emethod_call(out, "printf", *)
(* [Sstring "%d => %s\\n"; Evar i; print_ret]))] *) (* [Sstring "%d => %s\\n"; Evar i; print_ret]))] *)
[Aexp ret] [Aexp ret]

@ -100,7 +100,7 @@ let program p =
let jminus = pervasives_qn "-" in let jminus = pervasives_qn "-" in
(* num args to give to the main *) (* num args to give to the main *)
let rec num_args = List.length ty_main_args in let num_args = List.length ty_main_args in
(* parse arguments to give to the main *) (* parse arguments to give to the main *)
let rec parse_args t_l i = match t_l with let rec parse_args t_l i = match t_l with
@ -140,7 +140,7 @@ let program p =
else [Aexp (Emethod_call(out, "printf", [Sstring "%d => \n"; Evar i]))] else [Aexp (Emethod_call(out, "printf", [Sstring "%d => \n"; Evar i]))]
| _ -> | _ ->
if !Compiler_options.hepts_simulation if !Compiler_options.hepts_simulation
then then
[Aexp (Emethod_call(out, "printf", [Aexp (Emethod_call(out, "printf",
[Sstring "%s\n"; [Sstring "%s\n";
Emethod_call(java_pervasives, Emethod_call(java_pervasives,

@ -32,7 +32,6 @@
open Java open Java
open Pp_tools open Pp_tools
open Format open Format
open Misc
let print_ident ff id = Format.fprintf ff "%s" (jname_of_name (Idents.name id)) let print_ident ff id = Format.fprintf ff "%s" (jname_of_name (Idents.name id))
@ -295,4 +294,3 @@ let output_classe base_dir c =
let output_program dir (p:Java.program) = let output_program dir (p:Java.program) =
List.iter (output_classe dir) p List.iter (output_classe dir) p

@ -41,7 +41,6 @@
open Format open Format
open Misc open Misc
open Names open Names
open Modules
open Signature open Signature
open Obc open Obc
open Obc_utils open Obc_utils
@ -86,7 +85,7 @@ let fresh_nfor s_l body =
(* current module is not translated to keep track, (* current module is not translated to keep track,
there is no issue since printed without the qualifier *) there is no issue since printed without the qualifier *)
let rec translate_modul m = m (*match m with let translate_modul m = m (*match m with
| Pervasives | Pervasives
| LocalModule -> m | LocalModule -> m
| _ when m = g_env.current_mod -> m | _ when m = g_env.current_mod -> m
@ -189,7 +188,7 @@ let rec static_exp param_env se = match se.Types.se_desc with
| Types.Sarray se_l -> | Types.Sarray se_l ->
Enew_array (ty param_env se.Types.se_ty, List.map (static_exp param_env) se_l) Enew_array (ty param_env se.Types.se_ty, List.map (static_exp param_env) se_l)
| Types.Srecord f_e_l -> | Types.Srecord f_e_l ->
let ty_name = let ty_name =
match se.Types.se_ty with match se.Types.se_ty with
| Types.Tid ty_name -> qualname_to_package_classe ty_name | Types.Tid ty_name -> qualname_to_package_classe ty_name
| _ -> Misc.internal_error "Obc2java" | _ -> Misc.internal_error "Obc2java"
@ -220,7 +219,7 @@ and boxed_ty param_env t = match Modules.unalias_type t with
Tarray (t, s_l) Tarray (t, s_l)
| Types.Tinvalid -> Misc.internal_error "obc2java invalid type" | Types.Tinvalid -> Misc.internal_error "obc2java invalid type"
and tuple_ty param_env ty_l = and tuple_ty _param_env ty_l =
let ln = ty_l |> List.length |> Pervasives.string_of_int in let ln = ty_l |> List.length |> Pervasives.string_of_int in
Tclass (java_pervasive_class ("Tuple"^ln)) Tclass (java_pervasive_class ("Tuple"^ln))
@ -319,7 +318,7 @@ let obj_ref param_env o = match o with
let jop_of_op param_env op_name e_l = let jop_of_op param_env op_name e_l =
match op_name with match op_name with
| { qual = Module "Iostream"; name = "printf" } -> | { qual = Module "Iostream"; name = "printf" } ->
Emethod_call (Eclass(Names.qualname_of_string "java.lang.System.out"), Emethod_call (Eclass(Names.qualname_of_string "java.lang.System.out"),
"printf", "printf",
(exp_list param_env e_l)) (exp_list param_env e_l))
| _ -> | _ ->
@ -371,7 +370,7 @@ let rec act_list param_env act_l acts =
let _, _else = List.find (fun (c,_) -> c = Initial.pfalse) c_b_l in let _, _else = List.find (fun (c,_) -> c = Initial.pfalse) c_b_l in
(Aifelse (exp param_env e, block param_env _then, block param_env _else)) :: acts) (Aifelse (exp param_env e, block param_env _then, block param_env _else)) :: acts)
| Obc.Acase (e, c_b_l) -> | Obc.Acase (e, c_b_l) ->
let _c_b (c,b) = let _c_b (c,b) =
Senum (translate_constructor_name c), Senum (translate_constructor_name c),
block param_env b in block param_env b in
let acase = Aswitch (exp param_env e, List.map _c_b c_b_l) in let acase = Aswitch (exp param_env e, List.map _c_b c_b_l) in
@ -426,7 +425,7 @@ let class_def_list classes cd_l =
let class_name = qualname_to_package_classe cd.cd_name in let class_name = qualname_to_package_classe cd.cd_name in
(* [param_env] is an env mapping local param name to ident *) (* [param_env] is an env mapping local param name to ident *)
(* [params] : fields to stock the static parameters, arguments of the constructors *) (* [params] : fields to stock the static parameters, arguments of the constructors *)
let fields_params, vds_params, exps_params, param_env = let fields_params, vds_params, _exps_params, param_env =
let v, env = sig_params_to_vds cd.cd_params in let v, env = sig_params_to_vds cd.cd_params in
let f = vds_to_fields ~protection:Pprotected v in let f = vds_to_fields ~protection:Pprotected v in
let e = vds_to_exps v in let e = vds_to_exps v in
@ -550,18 +549,18 @@ let type_dec_list classes td_l =
mk_field jty field mk_field jty field
in in
let f_l = let f_l =
List.sort List.sort
(fun f1 f2 -> (fun f1 f2 ->
compare (f1.Signature.f_name.name) (f2.Signature.f_name.name)) compare (f1.Signature.f_name.name) (f2.Signature.f_name.name))
f_l in f_l in
let fields = List.map mk_field_jfield f_l in let fields = List.map mk_field_jfield f_l in
let cons_params = List.map (fun f -> mk_var_dec f.f_ident false f.f_type) fields in let cons_params = List.map (fun f -> mk_var_dec f.f_ident false f.f_type) fields in
let cons_body = let cons_body =
List.map List.map
(fun f -> Aassgn ((Pthis f.f_ident),(Evar f.f_ident))) (fun f -> Aassgn ((Pthis f.f_ident),(Evar f.f_ident)))
fields in fields in
let cons = let cons =
mk_methode mk_methode
~args:cons_params ~args:cons_params
(mk_block cons_body) (mk_block cons_body)
classe_name.name in classe_name.name in
@ -602,6 +601,3 @@ let program p =
let classes = type_dec_list classes ts in let classes = type_dec_list classes ts in
let p = class_def_list classes ns in let p = class_def_list classes ns in
get_classes()@p get_classes()@p

@ -86,7 +86,7 @@ let fresh_nfor s_l body =
(* current module is not translated to keep track, (* current module is not translated to keep track,
there is no issue since printed without the qualifier *) there is no issue since printed without the qualifier *)
let rec translate_modul m = m (*match m with let translate_modul m = m (*match m with
| Pervasives | Pervasives
| LocalModule -> m | LocalModule -> m
| _ when m = g_env.current_mod -> m | _ when m = g_env.current_mod -> m
@ -189,7 +189,7 @@ let rec static_exp param_env se = match se.Types.se_desc with
| Types.Sarray se_l -> | Types.Sarray se_l ->
Enew_array (ty param_env se.Types.se_ty, List.map (static_exp param_env) se_l) Enew_array (ty param_env se.Types.se_ty, List.map (static_exp param_env) se_l)
| Types.Srecord f_e_l -> | Types.Srecord f_e_l ->
let ty_name = let ty_name =
match se.Types.se_ty with match se.Types.se_ty with
| Types.Tid ty_name -> qualname_to_package_classe ty_name | Types.Tid ty_name -> qualname_to_package_classe ty_name
| _ -> Misc.internal_error "Obc2java14" | _ -> Misc.internal_error "Obc2java14"
@ -208,7 +208,7 @@ and boxed_ty param_env t = match Modules.unalias_type t with
| Types.Tid t when t = Initial.pbool -> Tclass (Names.local_qn "Boolean") | Types.Tid t when t = Initial.pbool -> Tclass (Names.local_qn "Boolean")
| Types.Tid t when t = Initial.pint -> Tclass (Names.local_qn "Integer") | Types.Tid t when t = Initial.pint -> Tclass (Names.local_qn "Integer")
| Types.Tid t when t = Initial.pfloat -> Tclass (Names.local_qn "Float") | Types.Tid t when t = Initial.pfloat -> Tclass (Names.local_qn "Float")
| Types.Tid t -> | Types.Tid t ->
begin try begin try
let ty = find_type t in let ty = find_type t in
begin match ty with begin match ty with
@ -228,7 +228,7 @@ and boxed_ty param_env t = match Modules.unalias_type t with
Tarray (t, s_l) Tarray (t, s_l)
| Types.Tinvalid -> Misc.internal_error "obc2java invalid type" | Types.Tinvalid -> Misc.internal_error "obc2java invalid type"
and tuple_ty param_env ty_l = and tuple_ty _param_env ty_l =
let ln = ty_l |> List.length |> Pervasives.string_of_int in let ln = ty_l |> List.length |> Pervasives.string_of_int in
Tclass (java_pervasive_class ("Tuple"^ln)) Tclass (java_pervasive_class ("Tuple"^ln))
@ -335,7 +335,7 @@ let obj_ref param_env o = match o with
let jop_of_op param_env op_name e_l = let jop_of_op param_env op_name e_l =
match op_name with match op_name with
| { qual = Module "Iostream"; name = "printf" } -> | { qual = Module "Iostream"; name = "printf" } ->
Emethod_call (Eclass(Names.qualname_of_string "java.lang.System.out"), Emethod_call (Eclass(Names.qualname_of_string "java.lang.System.out"),
"print", "print",
(exp_list param_env e_l)) (exp_list param_env e_l))
| _ -> | _ ->
@ -371,8 +371,8 @@ let rec act_list param_env act_l acts =
let _, _else = List.find (fun (c,_) -> c = Initial.pfalse) c_b_l in let _, _else = List.find (fun (c,_) -> c = Initial.pfalse) c_b_l in
(Aifelse (exp param_env e, block param_env _then, block param_env _else)) :: acts) (Aifelse (exp param_env e, block param_env _then, block param_env _else)) :: acts)
| Obc.Acase (e, c_b_l) -> | Obc.Acase (e, c_b_l) ->
let _c_b (c,b) = let _c_b (c,b) =
let type_name = let type_name =
match e.e_ty with match e.e_ty with
Types.Tid n -> qualname_to_package_classe n Types.Tid n -> qualname_to_package_classe n
| _ -> failwith("act_list: translating case") in | _ -> failwith("act_list: translating case") in
@ -431,7 +431,7 @@ let class_def_list classes cd_l =
let class_name = qualname_to_package_classe cd.cd_name in let class_name = qualname_to_package_classe cd.cd_name in
(* [param_env] is an env mapping local param name to ident *) (* [param_env] is an env mapping local param name to ident *)
(* [params] : fields to stock the static parameters, arguments of the constructors *) (* [params] : fields to stock the static parameters, arguments of the constructors *)
let fields_params, vds_params, exps_params, param_env = let fields_params, vds_params, _exps_params, param_env =
let v, env = sig_params_to_vds cd.cd_params in let v, env = sig_params_to_vds cd.cd_params in
let f = vds_to_fields ~protection:Pprotected v in let f = vds_to_fields ~protection:Pprotected v in
let e = vds_to_exps v in let e = vds_to_exps v in
@ -514,7 +514,7 @@ let class_def_list classes cd_l =
in in
let ostep = find_step_method cd in let ostep = find_step_method cd in
let vd_output = var_dec_list param_env ostep.m_outputs in let vd_output = var_dec_list param_env ostep.m_outputs in
let output_fields = let output_fields =
List.map (fun vd -> mk_field vd.vd_type vd.vd_ident) vd_output in List.map (fun vd -> mk_field vd.vd_type vd.vd_ident) vd_output in
let fields = fields @ output_fields in let fields = fields @ output_fields in
let build_output_methods i f = let build_output_methods i f =
@ -550,7 +550,7 @@ let type_dec_list classes td_l =
let mk_constr_field (acc_fields,i) c = let mk_constr_field (acc_fields,i) c =
let init_value = Sint i in let init_value = Sint i in
let c = translate_constructor_name_2 c classe_name in let c = translate_constructor_name_2 c classe_name in
let field = let field =
mk_field ~static:true ~final:true ~value:(Some init_value) mk_field ~static:true ~final:true ~value:(Some init_value)
Tint (Idents.ident_of_name c.name) in Tint (Idents.ident_of_name c.name) in
(field::acc_fields),(i+1) in (field::acc_fields),(i+1) in
@ -566,18 +566,18 @@ let type_dec_list classes td_l =
mk_field jty field mk_field jty field
in in
let f_l = let f_l =
List.sort List.sort
(fun f1 f2 -> (fun f1 f2 ->
compare (f1.Signature.f_name.name) (f2.Signature.f_name.name)) compare (f1.Signature.f_name.name) (f2.Signature.f_name.name))
f_l in f_l in
let fields = List.map mk_field_jfield f_l in let fields = List.map mk_field_jfield f_l in
let cons_params = List.map (fun f -> mk_var_dec f.f_ident false f.f_type) fields in let cons_params = List.map (fun f -> mk_var_dec f.f_ident false f.f_type) fields in
let cons_body = let cons_body =
List.map List.map
(fun f -> Aassgn ((Pthis f.f_ident),(Evar f.f_ident))) (fun f -> Aassgn ((Pthis f.f_ident),(Evar f.f_ident)))
fields in fields in
let cons = let cons =
mk_methode mk_methode
~args:cons_params ~args:cons_params
(mk_block cons_body) (mk_block cons_body)
classe_name.name in classe_name.name in
@ -618,6 +618,3 @@ let program p =
let classes = type_dec_list classes ts in let classes = type_dec_list classes ts in
let p = class_def_list classes ns in let p = class_def_list classes ns in
get_classes()@p get_classes()@p

@ -26,8 +26,6 @@
(* along with Heptagon. If not, see <http://www.gnu.org/licenses/> *) (* along with Heptagon. If not, see <http://www.gnu.org/licenses/> *)
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Misc
open Location
open Compiler_utils open Compiler_utils
open Compiler_options open Compiler_options

@ -31,7 +31,6 @@
(** See the manual for the semantics of the language *) (** See the manual for the semantics of the language *)
open Misc
open Names open Names
open Idents open Idents
open Types open Types

@ -29,8 +29,6 @@
open Obc open Obc
open Format open Format
open Pp_tools open Pp_tools
open Types
open Idents
open Names open Names
open Global_printer open Global_printer
@ -235,4 +233,3 @@ let print oc p =
let ff = formatter_of_out_channel oc in let ff = formatter_of_out_channel oc in
fprintf ff "@[-- Code generated by the MiniLucid Compiler@."; fprintf ff "@[-- Code generated by the MiniLucid Compiler@.";
fprintf ff "@[<v>"; print_prog ff p; fprintf ff "@]@]@." fprintf ff "@[<v>"; print_prog ff p; fprintf ff "@]@]@."

@ -30,7 +30,6 @@
open Names open Names
open Idents open Idents
open Location open Location
open Misc
open Types open Types
open Linearity open Linearity
open Obc open Obc
@ -293,6 +292,6 @@ let rec ext_value_of_pattern patt =
| Larray (p, e) -> Warray (ext_value_of_pattern p, e) in | Larray (p, e) -> Warray (ext_value_of_pattern p, e) in
mk_ext_value ~loc:patt.pat_loc patt.pat_ty desc mk_ext_value ~loc:patt.pat_loc patt.pat_ty desc
let rec exp_of_pattern patt = let exp_of_pattern patt =
let w = ext_value_of_pattern patt in let w = ext_value_of_pattern patt in
mk_exp w.w_ty (Eextvalue w) mk_exp w.w_ty (Eextvalue w)

@ -47,7 +47,6 @@
*) *)
open Misc
open Obc open Obc
open Obc_utils open Obc_utils
open Obc_mapfold open Obc_mapfold
@ -95,5 +94,3 @@ let act funs () a = match a with
let program p = let program p =
let p, _ = program_it { defaults with act = act } () p in let p, _ = program_it { defaults with act = act } () p in
p p

@ -29,7 +29,6 @@
(** Temporary hack to unroll for loops *) (** Temporary hack to unroll for loops *)
open Misc
open Obc open Obc
open Types open Types
open Obc_utils open Obc_utils
@ -72,5 +71,3 @@ let act funs () a =
let program p = let program p =
let p, _ = program_it { defaults with act = act } () p in let p, _ = program_it { defaults with act = act } () p in
p p

@ -77,8 +77,8 @@ let env = [("DATE", date); ("STDLIB", stdlib)]
environment defined above. *) environment defined above. *)
let filter = let filter =
object object
inherit Ast.map as super inherit Ast.map
method expr e = match e with method! expr e = match e with
| <:expr< $str:s$ >> when List.mem_assoc s env -> | <:expr< $str:s$ >> when List.mem_assoc s env ->
let repl = try Sys.getenv s with Not_found -> List.assoc s env in let repl = try Sys.getenv s with Not_found -> List.assoc s env in
<:expr@here< $str:repl$ >> <:expr@here< $str:repl$ >>

@ -27,8 +27,6 @@
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Unix
let current_module = ref "" let current_module = ref ""
let timings = ref [] let timings = ref []
let compilation_start = ref 0. let compilation_start = ref 0.
@ -76,7 +74,7 @@ let report_statistics () =
let display (name, time) = let display (name, time) =
print_string name; print_string name;
for i = 1 to max_size - String.length name do for _i = 1 to max_size - String.length name do
print_string " " print_string " "
done; done;
@ -84,7 +82,7 @@ let report_statistics () =
in in
let print_sep () = let print_sep () =
for i = 1 to max_size + 22 + String.length big_space do for _i = 1 to max_size + 22 + String.length big_space do
print_string "#" print_string "#"
done; done;
Printf.printf "\n" Printf.printf "\n"
@ -101,7 +99,7 @@ let report_statistics () =
print_sep (); print_sep ();
Printf.printf "TOTAL"; Printf.printf "TOTAL";
for i = 1 to max_size - 5 do for _i = 1 to max_size - 5 do
print_string " " print_string " "
done; done;
let percent = List.fold_left (+) 0 (List.map compute_percent (List.map snd !timings)) in let percent = List.fold_left (+) 0 (List.map compute_percent (List.map snd !timings)) in

@ -61,9 +61,9 @@ let comment ?(sep=separateur) s =
let do_pass d f p pp = let do_pass d f p pp =
comment (d ^ " ...\n"); comment (d ^ " ...\n");
let start = Unix.gettimeofday () in let _start = Unix.gettimeofday () in
let r = Compiler_timings.time_pass d f p in let r = Compiler_timings.time_pass d f p in
let stop = Unix.gettimeofday () in let _stop = Unix.gettimeofday () in
pp r; pp r;
comment ~sep:"*** " (d ^ " done."); comment ~sep:"*** " (d ^ " done.");
r r
@ -138,4 +138,3 @@ let print_header_info ff cbeg cend =
cend cend
let errmsg = "Options are:" let errmsg = "Options are:"

@ -44,7 +44,7 @@ module Make (Read:READ) =
struct struct
let build eqs = let build eqs =
(* associate a graph node for each name declaration *) (* associate a graph node for each name declaration *)
let rec nametograph g var_list is_antidep n_to_graph = let nametograph g var_list is_antidep n_to_graph =
let add_node env x = let add_node env x =
if Env.mem x env then if Env.mem x env then
let l = Env.find x env in let l = Env.find x env in
@ -54,7 +54,7 @@ struct
in in
List.fold_left add_node n_to_graph var_list in List.fold_left add_node n_to_graph var_list in
let rec nametograph_env g var_list node_env = let nametograph_env g var_list node_env =
List.fold_left (fun env x -> Env.add x g env) node_env var_list in List.fold_left (fun env x -> Env.add x g env) node_env var_list in
let rec init_graph eqs g_list n_to_graph lin_map node_env = let rec init_graph eqs g_list n_to_graph lin_map node_env =
@ -99,4 +99,3 @@ struct
make_graph g_list names_to_graph lin_map; make_graph g_list names_to_graph lin_map;
g_list, node_env g_list, node_env
end end

@ -26,7 +26,6 @@
(* along with Heptagon. If not, see <http://www.gnu.org/licenses/> *) (* along with Heptagon. If not, see <http://www.gnu.org/licenses/> *)
(* *) (* *)
(***********************************************************************) (***********************************************************************)
open Types
exception Bad_format exception Bad_format

@ -64,7 +64,7 @@ module Dsatur = struct
G.fold_succ_e color g v ColorSet.empty G.fold_succ_e color g v ColorSet.empty
(** Returns the smallest value not in the list of colors. *) (** Returns the smallest value not in the list of colors. *)
let rec find_min_available_color interf_colors = let find_min_available_color interf_colors =
let rec aux i = let rec aux i =
if not (ColorSet.mem i interf_colors) then i else aux (i+1) if not (ColorSet.mem i interf_colors) then i else aux (i+1)
in in

@ -99,7 +99,7 @@ let rec split_last = function
(** [split_nlasts l] returns l without its last n elements and (** [split_nlasts l] returns l without its last n elements and
the last n elements of l. *) the last n elements of l. *)
let rec split_nlast n l = let split_nlast n l =
let rec aux l = match l with let rec aux l = match l with
| [] -> [], [], 0 | [] -> [], [], 0
| a::l -> | a::l ->
@ -133,8 +133,8 @@ let drop n l =
l l
let rec nth_of_list n l = match n, l with let rec nth_of_list n l = match n, l with
| 1, h::t -> h | 1, h::_ -> h
| n, h::t -> nth_of_list (n-1) t | n, _::t -> nth_of_list (n-1) t
| _ -> raise List_too_short | _ -> raise List_too_short
@ -190,7 +190,7 @@ let rec list_diff l dl = match l with
let l = list_diff l dl in let l = list_diff l dl in
if List.mem x dl then l else x::l if List.mem x dl then l else x::l
(** { 3 Compiler iterators } *) (** {3 Compiler iterators} *)
(** Mapfold *) (* TODO optim : in a lot of places we don't need the List.rev *) (** Mapfold *) (* TODO optim : in a lot of places we don't need the List.rev *)
let mapfold f acc l = let mapfold f acc l =

@ -9,7 +9,7 @@
open Format open Format
let rec print_list print lp sep rp ff = function let print_list print lp sep rp ff = function
| [] -> () | [] -> ()
| x::l -> | x::l ->
fprintf ff "%s%a" lp print x; fprintf ff "%s%a" lp print x;
@ -17,7 +17,7 @@ let rec print_list print lp sep rp ff = function
fprintf ff "%s" rp fprintf ff "%s" rp
let rec print_list_r print lp sep rp ff = function let print_list_r print lp sep rp ff = function
| [] -> () | [] -> ()
| x :: l -> | x :: l ->
fprintf ff "%s%a" lp print x; fprintf ff "%s%a" lp print x;
@ -25,7 +25,7 @@ let rec print_list_r print lp sep rp ff = function
fprintf ff "%s" rp fprintf ff "%s" rp
let rec print_list_l print lp sep rp ff = function let print_list_l print lp sep rp ff = function
| [] -> () | [] -> ()
| x :: l -> | x :: l ->
fprintf ff "%s%a" lp print x; fprintf ff "%s%a" lp print x;
@ -54,16 +54,3 @@ let print_record print_field ff record =
let print_type_params ff pl = let print_type_params ff pl =
fprintf ff "@[%a@]" fprintf ff "@[%a@]"
(print_list_r (fun ff s -> fprintf ff "'%s" s) "("","") ") pl (print_list_r (fun ff s -> fprintf ff "'%s" s) "("","") ") pl
let print_set iter print_element ff set =
fprintf ff "@[{@ ";
iter (fun e -> fprintf ff "%a@ " print_element e) set;
fprintf ff "}@]"
let print_map iter print_key print_element ff map =
fprintf ff "@[<hv 2>[@ ";
iter (fun k x -> fprintf ff "| %a -> %a@ " print_key k print_element x) map;
fprintf ff "]@]"

@ -98,7 +98,7 @@ let cycle g_list =
(* store nodes in a stack *) (* store nodes in a stack *)
let s = Stack.create () in let s = Stack.create () in
(* flush the connected component *) (* flush the connected component *)
let rec flush index = let rec flush _index =
if Stack.is_empty s then [] if Stack.is_empty s then []
else let v = Stack.pop s in else let v = Stack.pop s in
v.g_containt :: flush v.g_tag in v.g_containt :: flush v.g_tag in
@ -164,4 +164,3 @@ let print_node print g =
g.g_depends_on; g.g_depends_on;
printf "@]" printf "@]"
*) *)

Loading…
Cancel
Save