Skip to content
Snippets Groups Projects
Commit f944d93d authored by Erwan Jahier's avatar Erwan Jahier
Browse files

Soc2c : avoid multiple soc typedef definition in the C code.

Indeed, Soc with memory can be used several times; hence we mark the
set of visited soc while printing the soc typedef.

 of expected passes		1052 -> 1073
 of unexpected failures	346 -> 325
parent 2ad0babd
No related branches found
No related tags found
No related merge requests found
(* Time-stamp: <modified the 05/06/2014 (at 11:26) by Erwan Jahier> *)
(* Time-stamp: <modified the 06/06/2014 (at 09:43) by Erwan Jahier> *)
(* let put (os: out_channel) (fmt:('a, unit, string, unit) format4) : 'a = *)
......@@ -213,8 +213,8 @@ let (type_to_format_string : Data.t -> string) =
| Real-> "%g"
| Extern s -> assert false
| Enum (s, sl) -> "%d"
| Struct (sid,_) -> assert false
| Array (ty, sz) -> assert false
| Struct (sid,_) -> "%s"
| Array (ty, sz) -> "%s"
| Alpha nb -> assert false
(****************************************************************************)
......@@ -271,23 +271,30 @@ let (typedef_of_soc : Soc.t -> string) =
let str = Printf.sprintf "%s} %s;\n\n" str ctx_name_type in
str
module KeySet = Set.Make(struct type t = Soc.key let compare = compare end)
let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) =
fun licprg soc_tbl main_soc ->
(* We need to print the ctx typedef a good order
(w.r.t. typedef dependancies). To do that, we traverse
the tree of soc instances which root is the main soc. *)
let rec (soc_with_mem : string -> Soc.t -> string) =
fun acc soc ->
let acc = (typedef_of_soc soc) ^ acc in
List.fold_left
(fun acc (iname, sk) ->
let soc = SocUtils.find_no_exc sk soc_tbl in
soc_with_mem acc soc
)
acc soc.instances
let visited = KeySet.empty in
(* Soc with memory can be used several times; hence we mark via this
set the ones that have already been visited. *)
let rec (soc_with_mem : string * KeySet.t -> Soc.t -> string* KeySet.t) =
fun (acc,visited) soc ->
if KeySet.mem soc.key visited then (acc,visited) else
let visited = KeySet.add soc.key visited in
let acc = (typedef_of_soc soc) ^ acc in
List.fold_left
(fun (acc,visited) (iname, sk) ->
let soc = SocUtils.find_no_exc sk soc_tbl in
soc_with_mem (acc,visited) soc
)
(acc,visited) soc.instances
in
let soc_ctx_typedef_with =
if is_memory_less main_soc then "" else soc_with_mem "" main_soc
if is_memory_less main_soc then "" else fst (soc_with_mem ("",visited) main_soc)
in
(* Then we still have to print memoryless soc that can not appear
as a soc instance *)
......@@ -481,6 +488,7 @@ int main(){
++s;
");
let inputs,outputs = soc.profile in
(* XXX do something for arrays and struct ! *)
List.iter (fun (id,t) ->
let t = Data.type_to_string t in
let str = Printf.sprintf " ctx->%s = _get_%s(\"%s\");\n" id t id in
......
Test Run By jahier on Thu Jun 5 11:32:09 2014
Test Run By jahier on Fri Jun 6 09:44:19 2014
Native configuration is i686-pc-linux-gnu
=== lus2lic tests ===
......@@ -70,7 +70,7 @@ PASS: ./lus2lic {-ec -o /tmp/dep.ec should_work/dep.lus}
PASS: ./myec2c {-o /tmp/dep.c /tmp/dep.ec}
PASS: ../utils/test_lus2lic_no_node should_work/dep.lus
PASS: ./lus2lic {-2c should_work/dep.lus -n dep}
FAIL: Check that the generated C code compiles : gcc dep_dep.c dep_dep_loop.c
PASS: gcc dep_dep.c dep_dep_loop.c
PASS: ./lus2lic {-o /tmp/ELMU.lic should_work/ELMU.lus}
PASS: ./lus2lic {-ec -o /tmp/ELMU.ec should_work/ELMU.lus}
PASS: ./myec2c {-o /tmp/ELMU.c /tmp/ELMU.ec}
......@@ -234,7 +234,7 @@ PASS: ./lus2lic {-o /tmp/mm1.lic should_work/mm1.lus}
PASS: ./lus2lic {-ec -o /tmp/mm1.ec should_work/mm1.lus}
PASS: ./myec2c {-o /tmp/mm1.c /tmp/mm1.ec}
PASS: ../utils/test_lus2lic_no_node should_work/mm1.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/mm1.lus -n mm1}
PASS: ./lus2lic {-2c should_work/mm1.lus -n mm1}
FAIL: Check that the generated C code compiles : gcc mm1_mm1.c mm1_mm1_loop.c
PASS: ./lus2lic {-o /tmp/predef03.lic should_work/predef03.lus}
PASS: ./lus2lic {-ec -o /tmp/predef03.ec should_work/predef03.lus}
......@@ -275,7 +275,7 @@ PASS: ./lus2lic {-o /tmp/test_node_expand2.lic should_work/test_node_expand2.lus
PASS: ./lus2lic {-ec -o /tmp/test_node_expand2.ec should_work/test_node_expand2.lus}
PASS: ./myec2c {-o /tmp/test_node_expand2.c /tmp/test_node_expand2.ec}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/test_node_expand2.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/test_node_expand2.lus -n test_node_expand2}
PASS: ./lus2lic {-2c should_work/test_node_expand2.lus -n test_node_expand2}
FAIL: Check that the generated C code compiles : gcc test_node_expand2_test_node_expand2.c test_node_expand2_test_node_expand2_loop.c
PASS: ./lus2lic {-o /tmp/test.lic should_work/test.lus}
PASS: ./lus2lic {-ec -o /tmp/test.ec should_work/test.lus}
......@@ -341,7 +341,7 @@ PASS: ./lus2lic {-ec -o /tmp/double_delay.ec should_work/double_delay.lus}
PASS: ./myec2c {-o /tmp/double_delay.c /tmp/double_delay.ec}
PASS: ../utils/test_lus2lic_no_node should_work/double_delay.lus
PASS: ./lus2lic {-2c should_work/double_delay.lus -n double_delay}
FAIL: Check that the generated C code compiles : gcc double_delay_double_delay.c double_delay_double_delay_loop.c
PASS: gcc double_delay_double_delay.c double_delay_double_delay_loop.c
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}
......@@ -351,7 +351,7 @@ PASS: ./lus2lic {-o /tmp/struct_with.lic should_work/struct_with.lus}
PASS: ./lus2lic {-ec -o /tmp/struct_with.ec should_work/struct_with.lus}
PASS: ./myec2c {-o /tmp/struct_with.c /tmp/struct_with.ec}
PASS: ../utils/test_lus2lic_no_node should_work/struct_with.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/struct_with.lus -n struct_with}
PASS: ./lus2lic {-2c should_work/struct_with.lus -n struct_with}
FAIL: Check that the generated C code compiles : gcc struct_with_struct_with.c struct_with_struct_with_loop.c
PASS: ./lus2lic {-o /tmp/test_node_expand.lic should_work/test_node_expand.lus}
PASS: ./lus2lic {-ec -o /tmp/test_node_expand.ec should_work/test_node_expand.lus}
......@@ -363,7 +363,7 @@ PASS: ./lus2lic {-o /tmp/mm22.lic should_work/mm22.lus}
PASS: ./lus2lic {-ec -o /tmp/mm22.ec should_work/mm22.lus}
PASS: ./myec2c {-o /tmp/mm22.c /tmp/mm22.ec}
PASS: ../utils/test_lus2lic_no_node should_work/mm22.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/mm22.lus -n mm22}
PASS: ./lus2lic {-2c should_work/mm22.lus -n mm22}
FAIL: Check that the generated C code compiles : gcc mm22_mm22.c mm22_mm22_loop.c
PASS: ./lus2lic {-o /tmp/is_stable.lic should_work/is_stable.lus}
PASS: ./lus2lic {-ec -o /tmp/is_stable.ec should_work/is_stable.lus}
......@@ -397,7 +397,7 @@ PASS: ./lus2lic {-o /tmp/zzz2.lic should_work/zzz2.lus}
PASS: ./lus2lic {-ec -o /tmp/zzz2.ec should_work/zzz2.lus}
PASS: ./myec2c {-o /tmp/zzz2.c /tmp/zzz2.ec}
PASS: ../utils/test_lus2lic_no_node should_work/zzz2.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/zzz2.lus -n zzz2}
PASS: ./lus2lic {-2c should_work/zzz2.lus -n zzz2}
FAIL: Check that the generated C code compiles : gcc zzz2_zzz2.c zzz2_zzz2_loop.c
PASS: ./lus2lic {-o /tmp/polymorphic_pack.lic should_work/polymorphic_pack.lus}
PASS: ./lus2lic {-ec -o /tmp/polymorphic_pack.ec should_work/polymorphic_pack.lus}
......@@ -502,7 +502,7 @@ PASS: ./lus2lic {-ec -o /tmp/sincos.ec should_work/sincos.lus}
PASS: ./myec2c {-o /tmp/sincos.c /tmp/sincos.ec}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/sincos.lus
PASS: ./lus2lic {-2c should_work/sincos.lus -n sincos}
FAIL: Check that the generated C code compiles : gcc sincos_sincos.c sincos_sincos_loop.c
PASS: gcc sincos_sincos.c sincos_sincos_loop.c
PASS: ./lus2lic {-o /tmp/newpacks.lic should_work/newpacks.lus}
PASS: ./lus2lic {-ec -o /tmp/newpacks.ec should_work/newpacks.lus}
PASS: ./myec2c {-o /tmp/newpacks.c /tmp/newpacks.ec}
......@@ -512,7 +512,7 @@ PASS: ./lus2lic {-o /tmp/morel5.lic should_work/morel5.lus}
PASS: ./lus2lic {-ec -o /tmp/morel5.ec should_work/morel5.lus}
PASS: ./myec2c {-o /tmp/morel5.c /tmp/morel5.ec}
PASS: ../utils/test_lus2lic_no_node should_work/morel5.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/morel5.lus -n morel5}
PASS: ./lus2lic {-2c should_work/morel5.lus -n morel5}
FAIL: Check that the generated C code compiles : gcc morel5_morel5.c morel5_morel5_loop.c
PASS: ./lus2lic {-o /tmp/bred.lic should_work/bred.lus}
PASS: ./lus2lic {-ec -o /tmp/bred.ec should_work/bred.lus}
......@@ -624,7 +624,7 @@ PASS: ./lus2lic {-ec -o /tmp/integrator.ec should_work/integrator.lus}
PASS: ./myec2c {-o /tmp/integrator.c /tmp/integrator.ec}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/integrator.lus
PASS: ./lus2lic {-2c should_work/integrator.lus -n integrator}
FAIL: Check that the generated C code compiles : gcc integrator_integrator.c integrator_integrator_loop.c
PASS: gcc integrator_integrator.c integrator_integrator_loop.c
PASS: ./lus2lic {-o /tmp/nc4.lic should_work/nc4.lus}
PASS: ./lus2lic {-ec -o /tmp/nc4.ec should_work/nc4.lus}
PASS: ./myec2c {-o /tmp/nc4.c /tmp/nc4.ec}
......@@ -635,7 +635,7 @@ PASS: ./lus2lic {-o /tmp/mm3.lic should_work/mm3.lus}
PASS: ./lus2lic {-ec -o /tmp/mm3.ec should_work/mm3.lus}
PASS: ./myec2c {-o /tmp/mm3.c /tmp/mm3.ec}
PASS: ../utils/test_lus2lic_no_node should_work/mm3.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/mm3.lus -n mm3}
PASS: ./lus2lic {-2c should_work/mm3.lus -n mm3}
FAIL: Check that the generated C code compiles : gcc mm3_mm3.c mm3_mm3_loop.c
PASS: ./lus2lic {-o /tmp/over2.lic should_work/over2.lus}
PASS: ./lus2lic {-ec -o /tmp/over2.ec should_work/over2.lus}
......@@ -653,7 +653,7 @@ PASS: ./lus2lic {-o /tmp/complex.lic should_work/complex.lus}
PASS: ./lus2lic {-ec -o /tmp/complex.ec should_work/complex.lus}
PASS: ./myec2c {-o /tmp/complex.c /tmp/complex.ec}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/complex.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/complex.lus -n complex}
PASS: ./lus2lic {-2c should_work/complex.lus -n complex}
FAIL: Check that the generated C code compiles : gcc complex_complex.c complex_complex_loop.c
PASS: ./lus2lic {-o /tmp/initial.lic should_work/initial.lus}
PASS: ./lus2lic {-ec -o /tmp/initial.ec should_work/initial.lus}
......@@ -726,7 +726,7 @@ PASS: ./lus2lic {-o /tmp/test_const.lic should_work/test_const.lus}
PASS: ./lus2lic {-ec -o /tmp/test_const.ec should_work/test_const.lus}
PASS: ./myec2c {-o /tmp/test_const.c /tmp/test_const.ec}
PASS: ../utils/test_lus2lic_no_node should_work/test_const.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/test_const.lus -n test_const}
PASS: ./lus2lic {-2c should_work/test_const.lus -n test_const}
FAIL: Check that the generated C code compiles : gcc test_const_test_const.c test_const_test_const_loop.c
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}
......@@ -894,7 +894,7 @@ PASS: ./lus2lic {-o /tmp/type_decl.lic should_work/type_decl.lus}
PASS: ./lus2lic {-ec -o /tmp/type_decl.ec should_work/type_decl.lus}
PASS: ./myec2c {-o /tmp/type_decl.c /tmp/type_decl.ec}
PASS: ../utils/test_lus2lic_no_node should_work/type_decl.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/type_decl.lus -n type_decl}
PASS: ./lus2lic {-2c should_work/type_decl.lus -n type_decl}
FAIL: Check that the generated C code compiles : gcc type_decl_type_decl.c type_decl_type_decl_loop.c
PASS: ./lus2lic {-o /tmp/import1.lic should_work/import1.lus}
PASS: ./lus2lic {-ec -o /tmp/import1.ec should_work/import1.lus}
......@@ -935,7 +935,7 @@ PASS: ./lus2lic {-o /tmp/contractForElementSelectionInArray.lic should_work/cont
PASS: ./lus2lic {-ec -o /tmp/contractForElementSelectionInArray.ec should_work/contractForElementSelectionInArray.lus}
PASS: ./myec2c {-o /tmp/contractForElementSelectionInArray.c /tmp/contractForElementSelectionInArray.ec}
PASS: ../utils/test_lus2lic_no_node should_work/contractForElementSelectionInArray.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/contractForElementSelectionInArray.lus -n contractForElementSelectionInArray}
PASS: ./lus2lic {-2c should_work/contractForElementSelectionInArray.lus -n contractForElementSelectionInArray}
FAIL: Check that the generated C code compiles : gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_loop.c
PASS: ./lus2lic {-o /tmp/iterFibo.lic should_work/iterFibo.lus}
PASS: ./lus2lic {-ec -o /tmp/iterFibo.ec should_work/iterFibo.lus}
......@@ -1023,7 +1023,7 @@ PASS: ./lus2lic {-o /tmp/struct0.lic should_work/struct0.lus}
PASS: ./lus2lic {-ec -o /tmp/struct0.ec should_work/struct0.lus}
PASS: ./myec2c {-o /tmp/struct0.c /tmp/struct0.ec}
PASS: ../utils/test_lus2lic_no_node should_work/struct0.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/struct0.lus -n struct0}
PASS: ./lus2lic {-2c should_work/struct0.lus -n struct0}
FAIL: Check that the generated C code compiles : gcc struct0_struct0.c struct0_struct0_loop.c
PASS: ./lus2lic {-o /tmp/filliter.lic should_work/filliter.lus}
PASS: ./lus2lic {-ec -o /tmp/filliter.ec should_work/filliter.lus}
......@@ -1081,7 +1081,7 @@ PASS: ./lus2lic {-o /tmp/dependeur_struct.lic should_work/dependeur_struct.lus}
PASS: ./lus2lic {-ec -o /tmp/dependeur_struct.ec should_work/dependeur_struct.lus}
PASS: ./myec2c {-o /tmp/dependeur_struct.c /tmp/dependeur_struct.ec}
PASS: ../utils/test_lus2lic_no_node should_work/dependeur_struct.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/dependeur_struct.lus -n dependeur_struct}
PASS: ./lus2lic {-2c should_work/dependeur_struct.lus -n dependeur_struct}
FAIL: Check that the generated C code compiles : gcc dependeur_struct_dependeur_struct.c dependeur_struct_dependeur_struct_loop.c
PASS: ./lus2lic {-o /tmp/minmax4_bis.lic should_work/minmax4_bis.lus}
PASS: ./lus2lic {-ec -o /tmp/minmax4_bis.ec should_work/minmax4_bis.lus}
......@@ -1093,7 +1093,7 @@ PASS: ./lus2lic {-o /tmp/test_struct.lic should_work/test_struct.lus}
PASS: ./lus2lic {-ec -o /tmp/test_struct.ec should_work/test_struct.lus}
PASS: ./myec2c {-o /tmp/test_struct.c /tmp/test_struct.ec}
PASS: ../utils/test_lus2lic_no_node should_work/test_struct.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/test_struct.lus -n test_struct}
PASS: ./lus2lic {-2c should_work/test_struct.lus -n test_struct}
FAIL: Check that the generated C code compiles : gcc test_struct_test_struct.c test_struct_test_struct_loop.c
PASS: ./lus2lic {-o /tmp/uu.lic should_work/uu.lus}
PASS: ./lus2lic {-ec -o /tmp/uu.ec should_work/uu.lus}
......@@ -1147,7 +1147,7 @@ PASS: ./lus2lic {-o /tmp/hanane.lic should_work/hanane.lus}
PASS: ./lus2lic {-ec -o /tmp/hanane.ec should_work/hanane.lus}
PASS: ./myec2c {-o /tmp/hanane.c /tmp/hanane.ec}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/hanane.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/hanane.lus -n hanane}
PASS: ./lus2lic {-2c should_work/hanane.lus -n hanane}
FAIL: Check that the generated C code compiles : gcc hanane_hanane.c hanane_hanane_loop.c
PASS: ./lus2lic {-o /tmp/lustre.lic should_work/lustre.lus}
PASS: ./lus2lic {-ec -o /tmp/lustre.ec should_work/lustre.lus}
......@@ -1187,7 +1187,7 @@ PASS: ./lus2lic {-o /tmp/zzz.lic should_work/zzz.lus}
PASS: ./lus2lic {-ec -o /tmp/zzz.ec should_work/zzz.lus}
PASS: ./myec2c {-o /tmp/zzz.c /tmp/zzz.ec}
PASS: ../utils/test_lus2lic_no_node should_work/zzz.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/zzz.lus -n zzz}
PASS: ./lus2lic {-2c should_work/zzz.lus -n zzz}
FAIL: Check that the generated C code compiles : gcc zzz_zzz.c zzz_zzz_loop.c
PASS: ./lus2lic {-o /tmp/STABLE.lic should_work/STABLE.lus}
PASS: ./lus2lic {-ec -o /tmp/STABLE.ec should_work/STABLE.lus}
......@@ -1379,7 +1379,7 @@ PASS: ./lus2lic {-o /tmp/simple.lic should_work/simple.lus}
PASS: ./lus2lic {-ec -o /tmp/simple.ec should_work/simple.lus}
PASS: ./myec2c {-o /tmp/simple.c /tmp/simple.ec}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/simple.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/simple.lus -n simple}
PASS: ./lus2lic {-2c should_work/simple.lus -n simple}
FAIL: Check that the generated C code compiles : gcc simple_simple.c simple_simple_loop.c
PASS: ./lus2lic {-o /tmp/func_with_body.lic should_work/func_with_body.lus}
PASS: ./lus2lic {-ec -o /tmp/func_with_body.ec should_work/func_with_body.lus}
......@@ -1468,9 +1468,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman
=== lus2lic Summary ===
# of expected passes 1052
# of unexpected failures 346
# of expected passes 1073
# of unexpected failures 325
# of unexpected successes 21
# of expected failures 37
testcase ./lus2lic.tests/non-reg.exp completed in 120 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 118 seconds
testcase ./lus2lic.tests/progression.exp completed in 0 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 120 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 118 seconds
testcase ./lus2lic.tests/progression.exp completed in 0 seconds
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment