diff --git a/src/actionsDeps.ml b/src/actionsDeps.ml index ba4f8e98cd6bd2daab92f5f65352c15ce462a086..81eed47d0ce918169da40bd89fbbe62d42b1e6cf 100644 --- a/src/actionsDeps.ml +++ b/src/actionsDeps.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 20/05/2014 (at 16:08) by Erwan Jahier> *) +(** Time-stamp: <modified the 09/07/2014 (at 16:07) by Erwan Jahier> *) let dbg = (Verbose.get_flag "deps") @@ -173,7 +173,6 @@ let (get_var2actions_tbl : action list -> var2actions_tbl) = [actions_of_vars input_vars al] trouve toutes les actions de [al] qui ont besoin d'être effectuées avant de pouvoir se servir de [input_vars] comme entrée d'une autre action. - TODO: gérer les dépendances entre des filtres plus complexes, comme par ex., l'utilisation d'un champ d'une structure nécessite @@ -187,7 +186,7 @@ let rec (actions_of_vars: Soc.var_expr list -> var2actions_tbl -> action list) = try Actions.elements (var2actions var tbl) with Not_found -> [] in - let vars = List.flatten (List.map get_parents vars) in + let vars = List.flatten (List.map get_parents vars) in let vars = List.fold_left (fun acc x -> if List.mem x acc then acc else x::acc) [] vars in List.flatten (List.map find_deps vars) @@ -284,7 +283,7 @@ let rec (visit : t -> color_table -> action -> color_table) = | Grey -> raise (DependencyCycle (n, grey_actions color_t)) | Black -> color_t with - (* The node [nt] is white *) + (* The node [nt] is white *) Not_found -> visit succ_t color_t nt ) (MapAction.find n succ_t) diff --git a/src/actionsDeps.mli b/src/actionsDeps.mli index da90f5c91ec4c46fb32b3b73381478a830f7845a..d150ef286b571707fc23ed5ea9ec41ac1d8ce844 100644 --- a/src/actionsDeps.mli +++ b/src/actionsDeps.mli @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 11/12/2013 (at 17:49) by Erwan Jahier> *) +(** Time-stamp: <modified the 09/07/2014 (at 15:49) by Erwan Jahier> *) (** Compute dependencies between actions *) @@ -37,7 +37,7 @@ val string_of_action_simple: action -> string Construit des dépendances entre les actions en reliant les entrées et les sorties de ces actions. - Lic2soc.lic_to_soc_type is passed inn argument to break a mutuel dep loop + Lic2soc.lic_to_soc_type is passed in argument to break a dep loop *) val build_data_deps_from_actions: (Lic.type_ -> Data.t) -> t -> action list -> t diff --git a/src/astTabSymbol.ml b/src/astTabSymbol.ml index 39315216126c8b129ef3f5397182086bc193f36e..679d87edd6daec5d75bc3ddad9e1c8a4d37a79c4 100644 --- a/src/astTabSymbol.ml +++ b/src/astTabSymbol.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 11/04/2013 (at 15:28) by Erwan Jahier> *) +(* Time-stamp: <modified the 09/07/2014 (at 17:18) by Erwan Jahier> *) (** Sous-module pour AstTab @@ -58,8 +58,7 @@ let find_node (this: t) (id: Ident.t) lxm = if Lxm.line lxm = 0 && Lxm.cend lxm = 0 then (* A hack to print a nicer error msg when the node asked in the command-line is not found in the input files*) - raise (Global_error("Can not find node " ^ (Ident.to_string id)^ - " in " ^ (Lxm.file lxm))) + raise (Global_error("Can not find node " ^ (Ident.to_string id))) else let all_nodes = Hashtbl.fold (fun n _ acc -> (Ident.to_string n)::acc) this.st_nodes [] diff --git a/test/lus2lic.sum b/test/lus2lic.sum index 4a560434a1088ab4799f32775dd83b57e69c3e2b..512c70cc44270444d1ba090f795827bce636de62 100644 --- a/test/lus2lic.sum +++ b/test/lus2lic.sum @@ -1,4 +1,4 @@ -Test Run By jahier on Wed Jul 9 12:54:34 2014 +Test Run By jahier on Wed Jul 9 17:22:16 2014 Native configuration is i686-pc-linux-gnu === lus2lic tests === @@ -396,7 +396,8 @@ PASS: ./lus2lic {-o /tmp/modes3x2_v2.lic should_work/modes3x2_v2.lus} PASS: ./lus2lic {-ec -o /tmp/modes3x2_v2.ec should_work/modes3x2_v2.lus} PASS: ./myec2c {-o /tmp/modes3x2_v2.c /tmp/modes3x2_v2.ec} FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/modes3x2_v2.lus -FAIL: Generate c code : ./lus2lic {-2c should_work/modes3x2_v2.lus -n modes3x2_v2} +PASS: ./lus2lic {-2c should_work/modes3x2_v2.lus -n modes3x2_v2} +PASS: gcc modes3x2_v2_modes3x2_v2.c modes3x2_v2_modes3x2_v2_ext.c modes3x2_v2_modes3x2_v2_loop.c PASS: ./lus2lic {-o /tmp/X6.lic should_work/X6.lus} PASS: ./lus2lic {-ec -o /tmp/X6.ec should_work/X6.lus} PASS: ./myec2c {-o /tmp/X6.c /tmp/X6.ec} @@ -759,7 +760,8 @@ PASS: ./lus2lic {-o /tmp/when_tuple.lic should_work/when_tuple.lus} PASS: ./lus2lic {-ec -o /tmp/when_tuple.ec should_work/when_tuple.lus} PASS: ./myec2c {-o /tmp/when_tuple.c /tmp/when_tuple.ec} FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/when_tuple.lus -FAIL: Generate c code : ./lus2lic {-2c should_work/when_tuple.lus -n when_tuple} +PASS: ./lus2lic {-2c should_work/when_tuple.lus -n when_tuple} +FAIL: Check that the generated C code compiles : gcc when_tuple_when_tuple.c when_tuple_when_tuple_ext.c when_tuple_when_tuple_loop.c PASS: ./lus2lic {-o /tmp/carV2.lic should_work/carV2.lus} PASS: ./lus2lic {-ec -o /tmp/carV2.ec should_work/carV2.lus} PASS: ./myec2c {-o /tmp/carV2.c /tmp/carV2.ec} @@ -1507,9 +1509,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman === lus2lic Summary === -# of expected passes 1336 -# of unexpected failures 101 +# of expected passes 1339 +# of unexpected failures 100 # of unexpected successes 21 # of expected failures 37 -testcase ./lus2lic.tests/non-reg.exp completed in 131 seconds +testcase ./lus2lic.tests/non-reg.exp completed in 148 seconds testcase ./lus2lic.tests/progression.exp completed in 0 seconds diff --git a/test/lus2lic.time b/test/lus2lic.time index c9657f639cce96aa6204a8c91cdd1c199e3969ac..cf033f23173466d83916d8fb5635d0c79ed2d6c2 100644 --- a/test/lus2lic.time +++ b/test/lus2lic.time @@ -1,2 +1,2 @@ -testcase ./lus2lic.tests/non-reg.exp completed in 131 seconds +testcase ./lus2lic.tests/non-reg.exp completed in 148 seconds testcase ./lus2lic.tests/progression.exp completed in 0 seconds diff --git a/test/should_work/modes3x2_v2.lus b/test/should_work/modes3x2_v2.lus index 3d45b71091236775dfc40de0dc8f228648e03821..ece1d6bea848ea8d1737574559af36fdf69c2c8b 100644 --- a/test/should_work/modes3x2_v2.lus +++ b/test/should_work/modes3x2_v2.lus @@ -63,7 +63,7 @@ let else (0 -> pre z); tel -node modes3x2_V2(x:data; on_off, toggle: bool) returns (res: data); +node modes3x2_v2(x:data; on_off, toggle: bool) returns (res: data); var y, z : data; sby : bool; diff --git a/test/should_work/when_tuple.lus b/test/should_work/when_tuple.lus index a871c07f63ad457bbb1db6f770066dd90bb3d470..e355b9470537573875ee3cab753bd9b1e469f2ee 100644 --- a/test/should_work/when_tuple.lus +++ b/test/should_work/when_tuple.lus @@ -1,5 +1,5 @@ -node clock(a, b, c: bool) returns (x: bool when a; y: bool when a); +node when_tuple(a, b, c: bool) returns (x: bool when a; y: bool when a); let -- XXX should we accept that ? diff --git a/todo.org b/todo.org index 634b5ee16418024c94b5cd2d6705e13f862e03f5..c49a16d9ee14cbbf375472bfd502c5f9b7300f5c 100644 --- a/todo.org +++ b/todo.org @@ -42,24 +42,36 @@ oops: lus2lic internal error depuis le 2eme commit du 18-06-2014 * lus2lic -2C -** TODO Ca plante si un identificateur lustre se nomme double... - - State "TODO" from "" [2014-06-13 Fri 16:59] ** TODO lic2c : le jour ou on genere du code C, y'a peut-etre des trucs a recuperer - State "TODO" from "" [2012-12-10 Mon 14:32] chez Cedric Pasteur qui a une implementation pour optimiser la maj des tableaux http://www.di.ens.fr/~pouzet/bib/lctes12.pdf -** TODO lic2c : les programmes qui ne passent pas les tests +** TODO lic2c : Ca plante si un identificateur lustre se nomme double... + - State "TODO" from "" [2014-06-13 Fri 16:59] +** TODO lic2c : type externes utilisés en I/O du main pas supporté -19. file:test/should_work/simple.lus lus2lic -2c should_work/simple.lus -n simple + file:test/should_work/simple.lus lus2lic -2c should_work/simple.lus -n simple types externes -20. file:test/should_work/morel.lus lus2lic -2c should_work/morel.lus -n morel -21. file:test/should_work/morel2.lus lus2lic -2c should_work/morel2.lus -n morel2 -22. file:test/should_work/morel3.lus lus2lic -2c should_work/morel3.lus -n morel3 -23. file:test/should_work/morel4.lus lus2lic -2c should_work/morel4.lus -n morel4 -24. file:test/should_work/left.lus lus2lic -2c should_work/left.lus -n left - slice en partie gauche + +faire comme pour _assign_EXT_TYPE en s'inspirant de ce que fait ec2c + +** TODO lic2c : slice en partie gauche pas traitée + +1. file:test/should_work/morel.lus lus2lic -2c should_work/morel.lus -n morel +2. file:test/should_work/morel2.lus lus2lic -2c should_work/morel2.lus -n morel2 +3. file:test/should_work/morel3.lus lus2lic -2c should_work/morel3.lus -n morel3 +4. file:test/should_work/morel4.lus lus2lic -2c should_work/morel4.lus -n morel4 +5. file:test/should_work/left.lus lus2lic -2c should_work/left.lus -n left + +** TODO polymorphisme + - State "TODO" from "" [2014-07-09 Wed 17:13] + lus2lic -2c should_work/cond01.lus -n cond01 + +echoue aussi en mode exec. + +Je devrais pourvoir accepter celui la, non ? ** TODO Question : remettre en cause le choix de représentation des Soc.key ? - State "TODO" from "" [2014-06-27 Fri 15:29] @@ -180,6 +192,13 @@ modifer file:~/lus2lic/utils/test_lus2lic_no_node +** TODO pour ceux la ils suffit d'expanser. Comment eviter que les tests echouent ? +- lus2lic -2c should_work/activation2.lus -n activation2 +- lus2lic -2c should_work/activation1.lus -n activation1 +- lus2lic -2c should_work/asservi.lus -n asservi +- lus2lic -2c should_work/speedcontrol.lus -n speedcontrol + + * Divers ** TODO msg d'erreur un peu mauvais sur ce programme @@ -335,6 +354,29 @@ struct et les arrays. ../utils/test_lus2lic_no_node should_work/activation1.lus ../utils/test_lus2lic_no_node should_work/speedcontrol.lus +solution : +l2lSplit: split access of access in left parts. + +indeed, consider the following example: + + z.y.y = z.x.x; + +which is fine. But if we transform it into + + z.y.y = v0.x; + v0 = z.x; + + +we have a cycle !!! + +but what if we split further, it's fine again + + v1 = z.y + v1.y = v0.x; + v0 = z.x; + +-> split more ! + ** TODO Enlever Abstract_type_eff de Lic.type_ ou vérifier partout que c'est correct. - State "TODO" from "" [2012-12-20 Thu 17:26] dans lic.ml, on definit les types compilés ainsi :