diff --git a/src/astTab.ml b/src/astTab.ml index 3a1144733c03ceef1b9a7a59c1dadd4d765806c1..69de1778267d2534339657f4f528b73b0d11ce15 100644 --- a/src/astTab.ml +++ b/src/astTab.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 26/02/2015 (at 11:20) by Erwan Jahier> *) +(* Time-stamp: <modified the 08/07/2015 (at 17:52) by Erwan Jahier> *) (** Table des infos sources : une couche au dessus de AstV6 pour mieux @@ -98,7 +98,7 @@ let (pack_body_env: t -> Lv6Id.pack_name -> AstTabSymbol.t) = try (Hashtbl.find this.st_pack_mng_tab p).pm_body_stab with Not_found -> - print_string ("*** Can not find package '" ^ + print_string ("*** Error: can not find package '" ^ (Lv6Id.pack_name_to_string p) ^ "' in the following packages: "); Hashtbl.iter (fun pn pm -> print_string ("\n***\t '"^(Lv6Id.pack_name_to_string pn)^ "'")) diff --git a/src/compile.ml b/src/compile.ml index 6bd2f14d1140af80bcad595475d6505834e48f47..0b220216c1021c348341ecb6a2335971378ec145 100644 --- a/src/compile.ml +++ b/src/compile.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 03/03/2015 (at 14:30) by Erwan Jahier> *) +(* Time-stamp: <modified the 08/07/2015 (at 17:53) by Erwan Jahier> *) open Lxm open Lv6errors @@ -258,7 +258,7 @@ let (get_source_list : Lv6MainArgs.t -> string list -> AstV6.pack_or_model list) let name = try Filename.chop_extension (Filename.basename first_file) with _ -> - print_string ("*** '"^first_file^"': bad file name.\n"); exit 1 + print_string ("*** Error: '"^first_file^"' is a bad file name.\n"); exit 1 in let pi = AstV6.give_pack_this_name (Lv6Id.pack_name_of_string name) unpacked_merged in let p = NSPack (Lxm.flagit pi (Lxm.dummy name)) in diff --git a/src/genOcamlGlue.ml b/src/genOcamlGlue.ml index d9987d744d9613b2a0f07ad632e582e24eafe13f..241b4f28299401d4f96eee49053fc86e47ade351 100644 --- a/src/genOcamlGlue.ml +++ b/src/genOcamlGlue.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 18/06/2015 (at 15:10) by Erwan Jahier> *) +(* Time-stamp: <modified the 08/07/2015 (at 17:53) by Erwan Jahier> *) (* generate ocaml glue code that makes it possible to call lus2lic from ocaml with the current set of arguments (with Lus2licRun.make). @@ -11,7 +11,7 @@ let (f: string array -> Lv6MainArgs.t -> unit) = let file = List.hd opt.infiles in try (Filename.chop_extension (Filename.basename file))^ ".ml" with _ -> - print_string ("*** '"^file^"': bad file name.\n"); exit 2 + print_string ("*** Error: '"^file^"'is a bad file name.\n"); exit 2 in let cma_file = (Filename.chop_extension outfile) ^".cma" in let remove_me = ["-exec"; "-ocaml";"-o";opt.outfile] in diff --git a/src/lic2soc.ml b/src/lic2soc.ml index 82bf69ae5bc9025e7c4b91f875644b240d5e99c4..b3bafe4a9d2ab17a982c60a744ad74573fcae3fb 100644 --- a/src/lic2soc.ml +++ b/src/lic2soc.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 08/04/2015 (at 14:36) by Erwan Jahier> *) +(** Time-stamp: <modified the 10/07/2015 (at 14:09) by Erwan Jahier> *) (* XXX ce module est mal écrit. A reprendre. (R1) *) @@ -50,7 +50,9 @@ let rec lic_to_data_type: (Lic.type_ -> Data.t) = Data.Struct(id, List.map trans_field fl) ) | Lic.Array_type_eff(ty,i) -> Data.Array(lic_to_data_type ty,i) - | Lic.Abstract_type_eff (id, t) -> Data.Alias(Lv6Id.string_of_long id,lic_to_data_type t) + | Lic.Abstract_type_eff (id, t) -> + Data.Alias(Lv6Id.string_of_long id,lic_to_data_type t) + | Lic.TypeVar Lic.Any -> Data.Alpha 0 | Lic.TypeVar Lic.AnyNum -> (* For some reasons, L2lRmPoly did not manage to resolve all the overloeding. @@ -534,8 +536,8 @@ let rec (actions_of_expression_acc: Lxm.t -> Soc.tbl -> in let (clk:Lic.clock) = On((cc_long, clk_id, clk_type),clkclk) in let ctx, actions, _, mems, deps = acc in - let ctx, actions2, inputs, mems2, deps2 = - actions_of_expression cc_flg.src soc_tbl ctx clk lpl ve + let ctx, actions2, inputs, mems2, deps2 = + actions_of_expression cc_flg.src soc_tbl ctx clk lpl ve in let mems = mems@mems2 in let deps = ActionsDeps.concat deps deps2 in @@ -703,6 +705,7 @@ let rec f: (LicPrg.t -> Lic.node_key -> Soc.key * Soc.tbl) = fun prog mnk -> let rec (process_node : Lic.node_key -> Soc.tbl -> Soc.key * Soc.tbl) = fun nk soc_tbl -> + info ("Lic2soc.process_node "^(Lic.string_of_node_key nk)^"\n"); let node = match LicPrg.find_node prog nk with | None -> @@ -796,7 +799,7 @@ let rec f: (LicPrg.t -> Lic.node_key -> Soc.key * Soc.tbl) = (** Produit des soc de noeuds. *) and (soc_of_node: LicPrg.t -> Lic.node_exp -> Soc.tbl -> (ctx * Soc.t * Soc.tbl) option) = fun licprg node soc_tbl -> - info "Lic2soc.soc_of_node...\n"; + info ("Lic2soc.soc_of_node..."^(Lic.string_of_node_key node.node_key_eff)^"\n"); let io_list = node.Lic.inlist_eff @ node.Lic.outlist_eff in let io_type = List.map (fun vi -> lic_to_data_type vi.var_type_eff) io_list in let soc_key = make_soc_key_of_node_key node.Lic.node_key_eff None io_type in @@ -816,15 +819,15 @@ let rec f: (LicPrg.t -> Lic.node_key -> Soc.key * Soc.tbl) = in (* Construction des dépendances entre les expressions *) info "Lic2soc.soc_of_node: computing dependencies...\n"; - let all_deps = - ActionsDeps.build_data_deps_from_actions lic_to_data_type deps actions + let all_deps = + ActionsDeps.build_data_deps_from_actions lic_to_data_type deps actions in Verbose.exe ~flag:dbg (fun () -> print_string (ActionsDeps.to_string all_deps); flush stdout); info "SortActions.f: sorting actions...\n"; let gaol = SortActions.f actions all_deps lxm in info "Lic2soc.soc_of_node: actions sorted. \n"; - let (locals: Soc.var list) = + let (locals: Soc.var list) = match node.Lic.loclist_eff with | None -> [] | Some l -> List.map (lic_to_soc_var) l @@ -843,6 +846,7 @@ let rec f: (LicPrg.t -> Lic.node_key -> Soc.key * Soc.tbl) = in let (soc_of_metaop: Lic.node_key -> Soc.tbl -> (ctx * Soc.t * Soc.tbl) option) = fun nk soc_tbl -> + info "Lic2soc.soc_of_metaop...\n"; match snd (fst nk), List.sort compare (snd nk) with | ("map"|"red"|"fill"|"fillred"|"fold"),[ ConstStaticArgLic(_,Int_const_eff(c)); NodeStaticArgLic(_,iter_node)] diff --git a/src/lv6MainArgs.ml b/src/lv6MainArgs.ml index 2e752082f8fc3fdb8f8be706f80862366b53e969..0b0bee6dfbc2f0ed40d4d41fe6bcaa8f5b75b14c 100644 --- a/src/lv6MainArgs.ml +++ b/src/lv6MainArgs.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 29/05/2015 (at 17:28) by Erwan Jahier> *) +(* Time-stamp: <modified the 09/07/2015 (at 16:43) by Erwan Jahier> *) (* Le manager d'argument adapté de celui de lutin, plus joli N.B. solution un peu batarde : les options sont stockées, comme avant, dans Global, @@ -333,20 +333,20 @@ let mkoptab (opt:t) : unit = ( mkopt opt ["-lv4"; "--lustre-v4"] (Arg.Unit (fun _ -> set_v4_options opt)) - ["Use Lustre V4 syntax (automatically impose '-ei -ee -esa')"] + ["generate Lustre V4 code (automatically impose '-ei -ee -esa')"] ; mkopt opt ~doc_level:Dev ["-kcg"; "--generate-scade-lustre"] (Arg.Unit (fun _ -> - opt.expand_arrays <- true; (* XXX remove me ! *) - global_opt.kcg <- true + opt.expand_arrays <- true; (* XXX remove me ! *) + global_opt.kcg <- true )) - [" Generate lustre code that is compatible with the lustre of scade"] + [" Generate Lustre code that is compatible with the lustre of scade"] ; mkopt opt ["-ec"; "--expanded-code"] (Arg.Unit (fun _ -> set_ec_options opt)) - ["Generate ec (actually just an alias for '-en -lv4 --no-prefix')"] + ["Generate ec programs (actually just an alias for '-en -lv4 --no-prefix')"] ; mkopt opt ~doc_level:Advanced ["-np"; "--no-prefix"] diff --git a/src/main.ml b/src/main.ml index 1ad41422b8ac59b6a6f0a0355e2a4ffa6bfe19f6..f37d8dfcfb33d854e4af7550a1a3c68b8a2b8656 100644 --- a/src/main.ml +++ b/src/main.ml @@ -1,4 +1,4 @@ -(* Time-stamp: <modified the 18/06/2015 (at 15:08) by Erwan Jahier> *) +(* Time-stamp: <modified the 08/07/2015 (at 17:55) by Erwan Jahier> *) open Verbose open AstV6 @@ -27,7 +27,7 @@ let find_a_node opt = let name = try Filename.chop_extension (Filename.basename first_file) with _ -> - print_string ("*** '"^first_file^"': bad file name.\n"); exit 1 + print_string ("*** Error: '"^first_file^"' is a bad file name.\n"); exit 1 in name diff --git a/test/lus2lic.sum b/test/lus2lic.sum index d234d7be80f02d05902bf1b6def592e814d79fae..9cf28b381e93d310873a5abc303c8d345eb02e19 100644 --- a/test/lus2lic.sum +++ b/test/lus2lic.sum @@ -1,5 +1,5 @@ ==> lus2lic0.sum <== -Test Run By jahier on Tue Jul 7 14:33:09 +Test Run By jahier on Fri Jul 10 14:09:55 Native configuration is x86_64-unknown-linux-gnu === lus2lic0 tests === @@ -64,7 +64,7 @@ XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/lecte XFAIL: Test bad programs (assert): test_lus2lic_no_node should_fail/assert/s.lus ==> lus2lic1.sum <== -Test Run By jahier on Tue Jul 7 14:33:13 +Test Run By jahier on Fri Jul 10 14:09:53 Native configuration is x86_64-unknown-linux-gnu === lus2lic1 tests === @@ -99,7 +99,6 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c Gyroscope.lus {} PASS: ./lus2lic {-2c Gyroscope2.lus -n Gyroscope2} PASS: gcc -o Gyroscope2.exec Gyroscope2_Gyroscope2.c Gyroscope2_Gyroscope2_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c Gyroscope2.lus {} -PASS: ./lus2lic {-2c Int.lus -n Int} PASS: ./lus2lic {-2c aa.lus -n aa} PASS: gcc -o aa.exec aa_aa.c aa_aa_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c aa.lus {} @@ -304,7 +303,6 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c long_et_stupide_nom PASS: ./lus2lic {-2c lucky.lus -n lucky} PASS: gcc -o lucky.exec lucky_lucky.c lucky_lucky_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c lucky.lus {} -PASS: ./lus2lic {-2c lustre.lus -n lustre} PASS: ./lus2lic {-2c lustre_test1_ok.lus -n lustre_test1_ok} PASS: gcc -o lustre_test1_ok.exec lustre_test1_ok_lustre_test1_ok.c lustre_test1_ok_lustre_test1_ok_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c lustre_test1_ok.lus {} @@ -367,8 +365,6 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c mm22.lus {} PASS: ./lus2lic {-2c mm3.lus -n mm3} PASS: gcc -o mm3.exec mm3_mm3.c mm3_mm3_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c mm3.lus {} -PASS: ./lus2lic {-2c model.lus -n model} -PASS: ./lus2lic {-2c model2.lus -n model2} PASS: ./lus2lic {-2c modelInst.lus -n modelInst} PASS: ./lus2lic {-2c modes3x2_v2.lus -n modes3x2_v2} PASS: gcc -o modes3x2_v2.exec modes3x2_v2_modes3x2_v2.c modes3x2_v2_modes3x2_v2_loop.c @@ -400,7 +396,7 @@ PASS: gcc -o multipar.exec multipar_multipar.c multipar_multipar_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c multipar.lus {} ==> lus2lic2.sum <== -Test Run By jahier on Tue Jul 7 14:33:15 +Test Run By jahier on Fri Jul 10 14:10:43 Native configuration is x86_64-unknown-linux-gnu === lus2lic2 tests === @@ -477,7 +473,7 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c nc9.lus {} PASS: ./lus2lic {-2c nested.lus -n nested} PASS: gcc -o nested.exec nested_nested.c nested_nested_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c nested.lus {} -PASS: ./lus2lic {-2c newpacks.lus -n newpacks} +FAIL: Generate c code : ./lus2lic {-2c newpacks.lus -n newpacks} PASS: ./lus2lic {-2c noAlarm.lus -n noAlarm} PASS: gcc -o noAlarm.exec noAlarm_noAlarm.c noAlarm_noAlarm_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c noAlarm.lus {} @@ -517,11 +513,11 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c over3.lus {} PASS: ./lus2lic {-2c overload.lus -n overload} PASS: gcc -o overload.exec overload_overload.c overload_overload_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c overload.lus {} -PASS: ./lus2lic {-2c p.lus -n p} +FAIL: Generate c code : ./lus2lic {-2c p.lus -n p} PASS: ./lus2lic {-2c pack1.lus -n pack1} PASS: ./lus2lic {-2c packageTableau.lus -n packageTableau} PASS: ./lus2lic {-2c packed_cst.lus -n packed_cst} -PASS: ./lus2lic {-2c packs.lus -n packs} +FAIL: Generate c code : ./lus2lic {-2c packs.lus -n packs} PASS: ./lus2lic {-2c param_node.lus -n param_node} PASS: gcc -o param_node.exec param_node_param_node.c param_node_param_node_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c param_node.lus {} @@ -537,7 +533,7 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c param_node4.lus {} PASS: ./lus2lic {-2c param_struct.lus -n param_struct} PASS: gcc -o param_struct.exec param_struct_param_struct.c param_struct_param_struct_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c param_struct.lus {} -PASS: ./lus2lic {-2c pilote-1.0.lus -n pilote-1.0} +FAIL: Generate c code : ./lus2lic --expand-nodes {-2c pilote.lus -n pilote} PASS: ./lus2lic {-2c pipeline.lus -n pipeline} PASS: gcc -o pipeline.exec pipeline_pipeline.c pipeline_pipeline_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c pipeline.lus {} @@ -585,7 +581,7 @@ PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c rediter.lus {} PASS: ./lus2lic {-2c redoptest.lus -n redoptest} PASS: gcc -o redoptest.exec redoptest_redoptest.c redoptest_redoptest_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c redoptest.lus {} -PASS: ./lus2lic {-2c remplissage-1.0.lus -n remplissage-1.0} +PASS: ./lus2lic {-2c remplissage.lus -n remplissage} PASS: ./lus2lic {-2c rs.lus -n rs} PASS: gcc -o rs.exec rs_rs.c rs_rs_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c rs.lus {} @@ -636,6 +632,7 @@ PASS: gcc -o testCA.exec testCA_testCA.c testCA_testCA_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c testCA.lus {} PASS: ./lus2lic {-2c testCapt.lus -n testCapt} PASS: ./lus2lic {-2c testPilote.lus -n testPilote} +FAIL: Generate c code : ./lus2lic {-2c test_Int.lus -n test_Int} PASS: ./lus2lic {-2c test_arrow.lus -n test_arrow} PASS: gcc -o test_arrow.exec test_arrow_test_arrow.c test_arrow_test_arrow_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c test_arrow.lus {} @@ -656,12 +653,14 @@ PASS: ./lus2lic {-2c test_enum.lus -n test_enum} PASS: gcc -o test_enum.exec test_enum_test_enum.c test_enum_test_enum_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c test_enum.lus {} PASS: ./lus2lic {-2c test_extern.lus -n test_extern} +PASS: ./lus2lic {-2c test_lustre.lus -n test_lustre} PASS: ./lus2lic {-2c test_map.lus -n test_map} PASS: gcc -o test_map.exec test_map_test_map.c test_map_test_map_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c test_map.lus {} PASS: ./lus2lic {-2c test_merge.lus -n test_merge} PASS: gcc -o test_merge.exec test_merge_test_merge.c test_merge_test_merge_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c test_merge.lus {} +PASS: ./lus2lic {-2c test_model.lus -n test_model} PASS: ./lus2lic {-2c test_node_expand.lus -n test_node_expand} PASS: gcc -o test_node_expand.exec test_node_expand_test_node_expand.c test_node_expand_test_node_expand_loop.c FAIL: Try to compare lus2lic -exec and -2c: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c test_node_expand.lus {} @@ -734,7 +733,7 @@ PASS: gcc -o zzz2.exec zzz2_zzz2.c zzz2_zzz2_loop.c PASS: /home/jahier/lus2lic/test/../utils/compare_exec_and_2c zzz2.lus {} ==> lus2lic3.sum <== -Test Run By jahier on Tue Jul 7 14:33:17 +Test Run By jahier on Fri Jul 10 14:09:57 Native configuration is x86_64-unknown-linux-gnu === lus2lic3 tests === @@ -778,9 +777,6 @@ PASS: ./lus2lic {-o Gyroscope2.lic Gyroscope2.lus} PASS: ./lus2lic {-ec -o Gyroscope2.ec Gyroscope2.lus} PASS: ./myec2c {-o Gyroscope2.c Gyroscope2.ec} FAIL: Try to compare lus2lic -exec and ecexe: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node Gyroscope2.lus {} -PASS: ./lus2lic {-o Int.lic Int.lus} -PASS: ./lus2lic {-ec -o Int.ec Int.lus} -PASS: ./myec2c {-o Int.c Int.ec} PASS: ./lus2lic {-o aa.lic aa.lus} PASS: ./lus2lic {-ec -o aa.ec aa.lus} PASS: ./myec2c {-o aa.c aa.ec} @@ -972,6 +968,9 @@ PASS: ./lus2lic {-o cst.lic cst.lus} PASS: ./lus2lic {-ec -o cst.ec cst.lus} PASS: ./myec2c {-o cst.c cst.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node cst.lus {} +FAIL: without any option: ./lus2lic {-o dadic_x5_a.lic dadic_x5_a.lus} +FAIL: without any option: ./lus2lic {-o dadic_x5_b.lic dadic_x5_b.lus} +FAIL: without any option: ./lus2lic {-o dadic_x5_c.lic dadic_x5_c.lus} PASS: ./lus2lic {-o deSimone.lic deSimone.lus} PASS: ./lus2lic {-ec -o deSimone.ec deSimone.lus} PASS: ./myec2c {-o deSimone.c deSimone.ec} @@ -1090,9 +1089,6 @@ PASS: ./lus2lic {-o lucky.lic lucky.lus} PASS: ./lus2lic {-ec -o lucky.ec lucky.lus} PASS: ./myec2c {-o lucky.c lucky.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node lucky.lus {} -PASS: ./lus2lic {-o lustre.lic lustre.lus} -PASS: ./lus2lic {-ec -o lustre.ec lustre.lus} -PASS: ./myec2c {-o lustre.c lustre.ec} PASS: ./lus2lic {-o lustre_test1_ok.lic lustre_test1_ok.lus} PASS: ./lus2lic {-ec -o lustre_test1_ok.ec lustre_test1_ok.lus} PASS: ./myec2c {-o lustre_test1_ok.c lustre_test1_ok.ec} @@ -1178,12 +1174,6 @@ PASS: ./lus2lic {-o mm3.lic mm3.lus} PASS: ./lus2lic {-ec -o mm3.ec mm3.lus} PASS: ./myec2c {-o mm3.c mm3.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node mm3.lus {} -PASS: ./lus2lic {-o model.lic model.lus} -PASS: ./lus2lic {-ec -o model.ec model.lus} -PASS: ./myec2c {-o model.c model.ec} -PASS: ./lus2lic {-o model2.lic model2.lus} -PASS: ./lus2lic {-ec -o model2.ec model2.lus} -PASS: ./myec2c {-o model2.c model2.ec} PASS: ./lus2lic {-o modelInst.lic modelInst.lus} PASS: ./lus2lic {-ec -o modelInst.ec modelInst.lus} PASS: ./myec2c {-o modelInst.c modelInst.ec} @@ -1245,7 +1235,7 @@ PASS: ./myec2c {-o multipar.c multipar.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node multipar.lus {} ==> lus2lic4.sum <== -Test Run By jahier on Tue Jul 7 14:33:11 +Test Run By jahier on Fri Jul 10 14:09:53 Native configuration is x86_64-unknown-linux-gnu === lus2lic4 tests === @@ -1434,9 +1424,9 @@ PASS: ./lus2lic {-o param_struct.lic param_struct.lus} PASS: ./lus2lic {-ec -o param_struct.ec param_struct.lus} PASS: ./myec2c {-o param_struct.c param_struct.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node param_struct.lus {} -PASS: ./lus2lic {-o pilote-1.0.lic pilote-1.0.lus} -PASS: ./lus2lic {-ec -o pilote-1.0.ec pilote-1.0.lus} -PASS: ./myec2c {-o pilote-1.0.c pilote-1.0.ec} +PASS: ./lus2lic {-o pilote.lic pilote.lus} +PASS: ./lus2lic {-ec -o pilote.ec pilote.lus} +PASS: ./myec2c {-o pilote.c pilote.ec} PASS: ./lus2lic {-o pipeline.lic pipeline.lus} PASS: ./lus2lic {-ec -o pipeline.ec pipeline.lus} PASS: ./myec2c {-o pipeline.c pipeline.ec} @@ -1504,9 +1494,9 @@ PASS: ./lus2lic {-o redoptest.lic redoptest.lus} PASS: ./lus2lic {-ec -o redoptest.ec redoptest.lus} PASS: ./myec2c {-o redoptest.c redoptest.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node redoptest.lus {} -PASS: ./lus2lic {-o remplissage-1.0.lic remplissage-1.0.lus} -PASS: ./lus2lic {-ec -o remplissage-1.0.ec remplissage-1.0.lus} -PASS: ./myec2c {-o remplissage-1.0.c remplissage-1.0.ec} +PASS: ./lus2lic {-o remplissage.lic remplissage.lus} +PASS: ./lus2lic {-ec -o remplissage.ec remplissage.lus} +PASS: ./myec2c {-o remplissage.c remplissage.ec} PASS: ./lus2lic {-o rs.lic rs.lus} PASS: ./lus2lic {-ec -o rs.ec rs.lus} PASS: ./myec2c {-o rs.c rs.ec} @@ -1582,6 +1572,9 @@ PASS: ./myec2c {-o testCapt.c testCapt.ec} PASS: ./lus2lic {-o testPilote.lic testPilote.lus} PASS: ./lus2lic {-ec -o testPilote.ec testPilote.lus} PASS: ./myec2c {-o testPilote.c testPilote.ec} +PASS: ./lus2lic {-o test_Int.lic test_Int.lus} +PASS: ./lus2lic {-ec -o test_Int.ec test_Int.lus} +PASS: ./myec2c {-o test_Int.c test_Int.ec} PASS: ./lus2lic {-o test_arrow.lic test_arrow.lus} PASS: ./lus2lic {-ec -o test_arrow.ec test_arrow.lus} PASS: ./myec2c {-o test_arrow.c test_arrow.ec} @@ -1611,12 +1604,19 @@ PASS: ./myec2c {-o test_enum.c test_enum.ec} PASS: ./lus2lic {-o test_extern.lic test_extern.lus} PASS: ./lus2lic {-ec -o test_extern.ec test_extern.lus} PASS: ./myec2c {-o test_extern.c test_extern.ec} +PASS: ./lus2lic {-o test_lustre.lic test_lustre.lus} +PASS: ./lus2lic {-ec -o test_lustre.ec test_lustre.lus} +PASS: ./myec2c {-o test_lustre.c test_lustre.ec} PASS: ./lus2lic {-o test_map.lic test_map.lus} PASS: ./lus2lic {-ec -o test_map.ec test_map.lus} PASS: ./myec2c {-o test_map.c test_map.ec} PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node test_map.lus {} PASS: ./lus2lic {-o test_merge.lic test_merge.lus} PASS: ./lus2lic {-ec -o test_merge.ec test_merge.lus} +PASS: ./lus2lic {-o test_model.lic test_model.lus} +PASS: ./lus2lic {-ec -o test_model.ec test_model.lus} +PASS: ./myec2c {-o test_model.c test_model.ec} +FAIL: without any option: ./lus2lic {-o test_model2.lic test_model2.lus} PASS: ./lus2lic {-o test_node_expand.lic test_node_expand.lus} PASS: ./lus2lic {-ec -o test_node_expand.ec test_node_expand.lus} PASS: ./myec2c {-o test_node_expand.c test_node_expand.ec} @@ -1723,37 +1723,37 @@ PASS: /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node zzz2.lus {} === lus2lic1 Summary === -# of expected passes 319 +# of expected passes 315 # of unexpected failures 5 ==> lus2lic2.sum <== === lus2lic2 Summary === -# of expected passes 319 -# of unexpected failures 3 +# of expected passes 317 +# of unexpected failures 8 ==> lus2lic3.sum <== === lus2lic3 Summary === -# of expected passes 491 -# of unexpected failures 8 +# of expected passes 479 +# of unexpected failures 11 ==> lus2lic4.sum <== === lus2lic4 Summary === -# of expected passes 453 -# of unexpected failures 4 +# of expected passes 462 +# of unexpected failures 5 =============================== -# Total number of failures: 20 -lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 1 seconds -lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 21 seconds -lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 48 seconds -lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 17 seconds -lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 51 seconds +# Total number of failures: 29 +lus2lic0.log:testcase ./lus2lic.tests/test0.exp completed in 0 seconds +lus2lic1.log:testcase ./lus2lic.tests/test1.exp completed in 17 seconds +lus2lic2.log:testcase ./lus2lic.tests/test2.exp completed in 50 seconds +lus2lic3.log:testcase ./lus2lic.tests/test3.exp completed in 15 seconds +lus2lic4.log:testcase ./lus2lic.tests/test4.exp completed in 48 seconds * Ref time: * Quick time (-j 4): -0.04user 0.02system 0:54.36elapsed 0%CPU (0avgtext+0avgdata 5040maxresident)k -64inputs+0outputs (0major+5554minor)pagefaults 0swaps +0.05user 0.02system 1:40.88elapsed 0%CPU (0avgtext+0avgdata 5032maxresident)k +0inputs+0outputs (0major+5545minor)pagefaults 0swaps diff --git a/test/should_work/Condact.lus b/test/should_work/Condact.lus index 2d9a362583605badecda7fe5ba111e42f93245f8..f6a4698b51a8131d45457cb9ba971c8a0f4eee3d 100644 --- a/test/should_work/Condact.lus +++ b/test/should_work/Condact.lus @@ -9,9 +9,9 @@ ------------------------------------- package Util - provides node carre(e: int) returns (s: int); + provides function carre(e: int) returns (s: int); body - node carre(e: int) returns (s: int); + function carre(e: int) returns (s: int); let s = e*e; tel @@ -39,7 +39,7 @@ end -package Main +package Condact uses TestCondact; provides node Condact(c: bool; d: t2; x: t1) returns (y: t2); diff --git a/test/should_work/model.lus b/test/should_work/model.lus deleted file mode 100644 index 1a054a3f4a5e41f0bfd86f04963c9013f5836ef4..0000000000000000000000000000000000000000 --- a/test/should_work/model.lus +++ /dev/null @@ -1,28 +0,0 @@ - -model m -needs - type elementType; - node _isEqualTo_(e1 : elementType; e2 : elementType) returns (x : bool); -provides - node est_egal(e1 : elementType; e2 : elementType) returns (x : bool); -body - - -node est_egal = _isEqualTo_; - -end - - -package u -provides - node egal(i1:int; i2:int) returns (o:bool); -body - node egal(i1:int; i2:int) returns (o:bool); - let - o = (i1 = i2); - tel - -end - - -package p = m(elementType=int, _isEqualTo_=u::egal); diff --git a/test/should_work/modelInst.lus b/test/should_work/modelInst.lus index 49ee39f5dac21f9519e43922d7d9672e87531253..89c3c4ee75e77febc820fa1be04b19794ab708bf 100644 --- a/test/should_work/modelInst.lus +++ b/test/should_work/modelInst.lus @@ -23,16 +23,16 @@ package Pint = m1( t=int ); package Pbool = m1( t=bool ); package Preal = m1( t=real ); -package main +package modelInst uses Pint; - provides node main(i: int; ray : real) returns (oint: int; obool: bool; oreal: real); + provides node modelInst(i: int; ray : real) returns (oint: int; obool: bool; oreal: real); body const pi = 3.14159; -node main(i: int; ray : real) returns (oint: int; obool: bool; oreal: real); +node modelInst(i: int; ray : real) returns (oint: int; obool: bool; oreal: real); let oint = Pint::n(0, i); obool = Pbool::n(true, i < 50); diff --git a/test/should_work/newpacks.lus b/test/should_work/newpacks.lus index f5f99be4e18fb78b6352e8c9d791af4a0baadf1c..6716f27e4f3e04341e5c6168041257f0d1266494 100644 --- a/test/should_work/newpacks.lus +++ b/test/should_work/newpacks.lus @@ -52,10 +52,10 @@ end --------------------------- -- le package principal -------------------------- -package mainPack +package newpacks uses inter; provides - node preced(in: inter::selType) returns (out: inter::selType); + node newpacks(in: inter::selType) returns (out: inter::selType); body type T = int^N; @@ -63,7 +63,7 @@ body N : int = -2 * inter::n; -- node preced(in: bool) returns (out: bool); - node preced(in: inter::selType) returns (out: inter::selType); + node newpacks(in: inter::selType) returns (out: inter::selType); var out2 : inter::selType; let out, out2 = inter::preced( in ); diff --git a/test/should_work/p.lus b/test/should_work/p.lus index f321c5de8c09594c485f6f708518a8a60e9d8cb6..180ec113140f75582310a4f37117b68a9cd39249 100644 --- a/test/should_work/p.lus +++ b/test/should_work/p.lus @@ -58,10 +58,10 @@ end --------------------------- -- le package principal -------------------------- -package mainPack +package p uses inter; provides - node preced(in: inter::selType) returns (out: inter::selType); + node p(in: inter::selType) returns (out: inter::selType); body type T = int^N; @@ -69,7 +69,7 @@ body N : int = -2 * inter::n; -- node preced(in: bool) returns (out: bool); - node preced(in: inter::selType) returns (out: inter::selType); + node p(in: inter::selType) returns (out: inter::selType); var out2 : inter::selType; let out, out2 = inter::preced( in ); diff --git a/test/should_work/packageTableau.lus b/test/should_work/packageTableau.lus index d51d779793448de7a42f8cac773f2e51c035ca4e..2234068874f3260d1ccff13136570ee4bcfd92ec 100644 --- a/test/should_work/packageTableau.lus +++ b/test/should_work/packageTableau.lus @@ -1,4 +1,4 @@ -model packageTableau +model packageTableauModel needs type elementType; const size : int; -- on doit supposer que size>0; @@ -375,24 +375,23 @@ let res = i > j; tel end ---package intArray is packageTableau(int, 10, equals, gt); --package intArray is packageTableau(int, 10, Lustre::eq, Lustre::igt); --package intArray is packageTableau(int, 10, =, Lustre::igt); package intArray = - packageTableau( + packageTableauModel( elementType=int, size=10, _isEqualTo_=Lustre::eq, _isGreaterThan_=util::igt); -package main +package packageTableau uses intArray;--, intArray2, intArray3; - provides node main(a : int^10) returns (tri : int^10; pos_min, min, pos_max, max: int); + provides node packageTableau(a : int^10) returns (tri : int^10; pos_min, min, pos_max, max: int); body -node main(a : int^10) returns ( tri : int^10; +node packageTableau(a : int^10) returns ( tri : int^10; pos_min, min, pos_max, diff --git a/test/should_work/packed_cst.lus b/test/should_work/packed_cst.lus index 8bb5206529ef90dee30f1e082caed9743229b7e2..18e59da0cbf90f52628f0ebc335294f34bb6930f 100644 --- a/test/should_work/packed_cst.lus +++ b/test/should_work/packed_cst.lus @@ -1,15 +1,15 @@ -package cst +package packed_cst provides - node cst(x:int) returns (y:int); + function packed_cst(x:int) returns (y:int); body const i : int =1 ; const j : int =1 ; const k : int =1 ; - node cst(x:int) returns (y:int); + function packed_cst(x:int) returns (y:int); var z,t: int; let z = i+j; diff --git a/test/should_work/packs.lus b/test/should_work/packs.lus index 411a8fe1aa8e71ce6792540ee8cc180b1a25352d..077eda798dfc956895f3dc5f8693d4f50f9c7439 100644 --- a/test/should_work/packs.lus +++ b/test/should_work/packs.lus @@ -48,8 +48,11 @@ end -- le package principal -------------------------- -package mainPack +package packs uses inter; +provides + node packs(in: selType) returns (out: selType); + body type couleurs = enum { bleu, rose, jaune }; @@ -59,7 +62,7 @@ body N : int = -2 * inter::n; -- node preced(in: bool) returns (out: bool); - node preced(in: selType) returns (out: selType); + node packs(in: selType) returns (out: selType); var out2 : inter::selType; let out, out2 = inter::preced( in ); diff --git a/test/should_work/pilote-1.0.lus b/test/should_work/pilote.lus similarity index 99% rename from test/should_work/pilote-1.0.lus rename to test/should_work/pilote.lus index 1a81d5caf3ddfa0a86dc9629495479e245978686..6e4665790566c713bcd2888f8abe4a6532d4e274 100644 --- a/test/should_work/pilote-1.0.lus +++ b/test/should_work/pilote.lus @@ -1,3 +1,4 @@ +-- nonreg: --expand-nodes -- 22 jan 2009 package util @@ -268,11 +269,12 @@ tel end -package pilote + +package pilote uses util; provides -node system(in : bool) returns (v : bool; +node pilote(in : bool) returns (v : bool; dataBoiteCP_IN, dataBoiteCP_OUT : int; piloteData, readData : int; getMem : bool; @@ -288,7 +290,7 @@ node system(in : bool) returns (v : bool; body -node system (in : bool) +node pilote (in : bool) returns (v : bool; dataBoiteCP_IN, dataBoiteCP_OUT : int; piloteData, readData : int; @@ -337,7 +339,7 @@ let (semMemTakeP, putMem, dataBoiteCP_GET, piloteData, localErasedDataFromPilote, erasePiloteEvent, copyPiloteEvent, localCopiedDataFromPilote) - = pilote(Hpilote, semMemAutP, dataBoiteCP_OUT); + = pilote2(Hpilote, semMemAutP, dataBoiteCP_OUT); (semMemGive, readData, localErasedDataFromMem, localCopiedDataFromMem, eraseMemEvent, copyMemEvent) = mem(getMem, putMem, piloteData); @@ -591,7 +593,7 @@ let tel -node pilote(Hpilote, semAutP : bool; +node pilote2(Hpilote, semAutP : bool; dataBoiteCP : int) returns (semMemTakeP, putMemP, dataGET : bool; piloteData : int; diff --git a/test/should_work/polymorphic_pack.lus b/test/should_work/polymorphic_pack.lus index a4c1d24da0d57790aac51779457fbacdf36a0795..8efbf02c3c58db18d4f9e49c032f61c2d57b5d1a 100644 --- a/test/should_work/polymorphic_pack.lus +++ b/test/should_work/polymorphic_pack.lus @@ -4,14 +4,14 @@ needs type t; node n(x,y:t) returns (z:t); provides - node map2(x, y: t^size) returns (z:t^size); + node polymorphic_pack(x, y: t^size) returns (z:t^size); body - node map2(x, y: t^size) returns (z:t^size); + node polymorphic_pack(x, y: t^size) returns (z:t^size); let z = map<<n, size>>(x, y); tel end -package p = iter(size=3, t=int, n=+); +package polymorphic_pack = iter(size=3, t=int, n=Lustre::iplus); \ No newline at end of file diff --git a/test/should_work/remplissage-1.0.lus b/test/should_work/remplissage.lus similarity index 97% rename from test/should_work/remplissage-1.0.lus rename to test/should_work/remplissage.lus index 9b41bfdcbdd0842b923ae5e8e8bd03b8f45026a0..483cbbb95670d68b2b7076acbb6e80d8794aba37 100644 --- a/test/should_work/remplissage-1.0.lus +++ b/test/should_work/remplissage.lus @@ -1,8 +1,8 @@ -package util +package remplissage provides -node observer(dataBoiteCP_IN, +node remplissage(dataBoiteCP_IN, localDataFromRead, localErasedDataFromBoiteCP, localCopyedDataFromBoiteCP, @@ -25,7 +25,7 @@ body type accChangeTab = {numEvent : int; cpt : int; indice : int}; -node change_tab2(tabIn : int^10; +function change_tab2(tabIn : int^10; indiceIn : int; num_event : int) returns (tabOut : int^10); @@ -37,7 +37,7 @@ tel -node change_elt2(accIn : accChangeTab; +function change_elt2(accIn : accChangeTab; --num_event : int; --cptOut : int; --indiceIn : int; @@ -71,7 +71,7 @@ type accObserver = {nbCopy : int^10; indice : int}; -node observer(dataBoiteCP_IN, +node remplissage(dataBoiteCP_IN, localDataFromRead, localErasedDataFromBoiteCP, localCopyedDataFromBoiteCP, @@ -189,7 +189,7 @@ let tel -node Niter(accIn : accObserver; +function Niter(accIn : accObserver; --{tabIn : int^10; -- indice : int; --}; diff --git a/test/should_work/testBoite.lus b/test/should_work/testBoite.lus index 38feb2c7674433b261f31f986dc659938b1ee6e0..beb50ee170002625f25dcb2f1dff30570a499b1b 100644 --- a/test/should_work/testBoite.lus +++ b/test/should_work/testBoite.lus @@ -1,10 +1,10 @@ -package boite +package testBoite provides -node boite(dataGET, +node testBoite(dataGET, dataPUT : bool; dataIN : int when dataPUT) --returns (dataOUT : int when dataGET); @@ -19,7 +19,7 @@ returns (--localData_clock : bool; body -node boite(dataGET, +node testBoite(dataGET, dataPUT : bool; dataIN : int when dataPUT) returns (dataOUT : int when dataGET); diff --git a/test/should_work/Int.lus b/test/should_work/test_Int.lus similarity index 61% rename from test/should_work/Int.lus rename to test/should_work/test_Int.lus index fdc9b4dc49bf546ecc59c39fcbac3b55d0a05724..1095a9b5e988bfa837451a36c1a2ded95fe2e17e 100644 --- a/test/should_work/Int.lus +++ b/test/should_work/test_Int.lus @@ -1,18 +1,18 @@ -model Int +model IntM needs const n:int; provides - type Int; - const zero: Int ; - function incr (x: Int) returns (incr: Int); - function add (x,y: Int) returns (sum: Int); + type t; + const zero: t ; + function incr (x: t) returns (incr: t); + function add (x,y: t) returns (sum: t); -- function fulladd(ci, x, y: bool) returns (s, co: bool); body - type Int = bool^n; + type t = bool^n; const zero = false^n; - function incr (x: Int) returns (incr: Int); + function incr (x: t) returns (incr: t); var co: bool; let (co, incr) = fillred<<fulladd,n>>(true,x,zero); @@ -24,7 +24,7 @@ model Int co = (ci and x) or (x and y) or (y and ci); tel - function add (x,y: Int) returns (sum: Int); + function add (x,y: t) returns (sum: t); var co: bool; let (co, sum) = fillred<<fulladd,n>>(false,x,y); @@ -36,14 +36,13 @@ end -- instances ----------------------- -package Int8 is Int(n=8); +package Int8 is IntM(n=8); -package mainPack -uses Int8; +package test_Int uses Int8; provides - node Nat(evt, reset: bool) returns (nat: Int8::Int); + node test_Int(evt, reset: bool) returns (nat: Int8::t); body - node Nat(evt, reset: bool) returns (nat: Int8::Int); + node test_Int(evt, reset: bool) returns (nat: Int8::t); let nat = if true -> reset then Int8::zero else if evt then Int8::incr(pre(nat)) diff --git a/test/should_work/test_clash.lus b/test/should_work/test_clash.lus index e66094afccd426d7294b2e74007142b92aea5142..7a1ac072f79c22e013fb787dbc5eb7f77de937d9 100644 --- a/test/should_work/test_clash.lus +++ b/test/should_work/test_clash.lus @@ -1,22 +1,22 @@ -- -package test +package test_clash provides const c : bool; type t ; - node toto(x: bool) returns (y: bool); + function test_clash(x: bool) returns (y: bool); body const c = true; type t = bool; - node toto(x: bool) returns (y: bool); + function test_clash(x: bool) returns (y: bool); let y = tutu(x) and c; tel - node tutu(x: t) returns (y: t); + function tutu(x: t) returns (y: t); let y = x; tel diff --git a/test/should_work/lustre.lus b/test/should_work/test_lustre.lus similarity index 91% rename from test/should_work/lustre.lus rename to test/should_work/test_lustre.lus index 7ba864038f67b5245e8d7e9dda0770a233615c79..e3ec7bec00703ca3cb37043c65b1a56ba3f6c819 100644 --- a/test/should_work/lustre.lus +++ b/test/should_work/test_lustre.lus @@ -51,3 +51,11 @@ body end +package test_lustre + provides + function test_lustre(x: real) returns (z: real); +body + function test_lustre(x: real) returns (z: real); let z = Lustre::Ruminus(x); tel + +end + diff --git a/test/should_work/test_model.lus b/test/should_work/test_model.lus new file mode 100644 index 0000000000000000000000000000000000000000..3cad6f1eef97f8e539a9fef979c2864cb0f0c0ed --- /dev/null +++ b/test/should_work/test_model.lus @@ -0,0 +1,36 @@ + +model m +needs + type elementType; + function _isEqualTo_(e1 : elementType; e2 : elementType) returns (x : bool); +provides + function est_egal(e1 : elementType; e2 : elementType) returns (x : bool); +body + + +function est_egal = _isEqualTo_; + +end + + +package u +provides + function egal(i1:int; i2:int) returns (o:bool); +body + function egal(i1:int; i2:int) returns (o:bool); + let + o = (i1 = i2); + tel + +end + + +package p = m(elementType=int, _isEqualTo_=u::egal); + +package test_model +provides + function test_model (e1,e2:int) returns (x:bool); + body + function test_model (e1,e2:int) returns (x:bool) = p::est_egal; + + end diff --git a/test/should_work/model2.lus b/test/should_work/test_model2.lus similarity index 75% rename from test/should_work/model2.lus rename to test/should_work/test_model2.lus index 82350efadc972c1e11bcfe4fb741816f698f3e36..27d6f71cd4093fb671d3a5ffd5ff7f7f800fa957 100644 --- a/test/should_work/model2.lus +++ b/test/should_work/test_model2.lus @@ -28,4 +28,12 @@ end package p = m(elementType=int, elementTypeBis=int, _isEqualTo_ = u::egal); -package p2 = m(elementType=int, elementTypeBis=int, _isEqualTo_= Lustre::eq); \ No newline at end of file +package p2 = m(elementType=int, elementTypeBis=int, _isEqualTo_= Lustre::eq); + +package test_model2 +provides + function test_model2 (e1,e2:int) returns (x:bool); + body + function test_model2 (e1,e2:int) returns (x:bool) = p2::est_egal; + + end diff --git a/test/site.exp b/test/site.exp index 7d6d8fa954b8f0828ec637be5940a6c5d6955038..8b8421c403cd541df53b5aa034ef92d2c2c83d12 100644 --- a/test/site.exp +++ b/test/site.exp @@ -1,4 +1,4 @@ -# Time-stamp: <modified the 01/07/2015 (at 14:24) by Erwan Jahier> +# Time-stamp: <modified the 08/07/2015 (at 17:52) by Erwan Jahier> # # (nonreg-)test harness main file @@ -24,7 +24,7 @@ proc should_work { test_name command_line args } { send_user "starting $command_line\n" } # Running the program. - eval spawn $command_line {*}$args + eval spawn $command_line {*}$args set pid [exp_pid] puts "PID: $pid ($command_line $args)" expect { diff --git a/utils/lustre.el b/utils/lustre.el index 71460910104779436fdd950805be85694fc735be..8692a03736816575ce6de5962da0d1e67a7624e8 100644 --- a/utils/lustre.el +++ b/utils/lustre.el @@ -217,7 +217,7 @@ (ids-in-btw (pref suf) (concat pref sep (ids-before suf)))) `( ; identifiers - (,(ids-in-btw "\\([(;^]\\|\\<var\\|const\\>\\)" ":") . ,var) + (,(ids-in-btw "\\([(;^]\\|\\<var\\|const\\|package\\|model\\|provides\\|body\\|uses\\>\\)" ":") . ,var) ;; NB: needed in some cases, such as long lists of formal arguments...: (,(ids-before ":") . ,var) @@ -227,6 +227,7 @@ (regexp-opt '("/" "*" "#" "=" "+" "-" "*" "<" ">")) "\\|" (regexp-opt '("node" "const" "function" "include" "let" "returns" "tel" "type" "var" "if" "with" + "package" "model" "body" "uses" "provides" "then" "else" "and" "or" "xor" "assert" "with" "struct" "pre" "not" "when" "current") 'words)) 0 ,kw t)