From 34d27b98edf8700511cc670c7c1bfed17718db0d Mon Sep 17 00:00:00 2001
From: Erwan Jahier <jahier@imag.fr>
Date: Thu, 29 May 2008 14:45:34 +0200
Subject: [PATCH] Allow  the  use of  "="  instead of  "is"  in  order to 
 instanciate package.

Better  error msg  when instanciating  a  model by  provided a  wrong
number of arguments.
---
 src/TODO                                     | 123 +++++++---------
 src/expandPack.ml                            | 144 ++++++++++---------
 src/parser.mly                               |  12 +-
 src/syntaxTab.ml                             |   4 +-
 src/test/should_work/Pascal/t0.lus           |   7 +-
 src/test/should_work/Pascal/t2.lus           |   1 +
 src/test/should_work/demo/mapiter_lv4.lus    |  45 ------
 src/test/should_work/packEnvTest/Condact.lus |  15 +-
 src/test/test.res.exp                        |  83 ++++++-----
 9 files changed, 200 insertions(+), 234 deletions(-)
 delete mode 100644 src/test/should_work/demo/mapiter_lv4.lus

diff --git a/src/TODO b/src/TODO
index 779c2eb7..511200f0 100644
--- a/src/TODO
+++ b/src/TODO
@@ -1,6 +1,5 @@
 
-*** questions
-
+*** questions externes
 
 * dans le generateur de lic, comment imprimer le nom des packages ?
  - Pack::toto -> pas du vieux lustre (donc pas reentrant)
@@ -15,38 +14,11 @@ pour l'instant, alors que ca marchait chez Youssef.
 * should_work/packEnvTest/packages2.lus : il y a des package +
 le package principal est implicite. Autorise-t'on ce genre de mélange ?
 
-* should_work/NONREG/simple.lus
-	declaration de structure en ligne ???
-
-
-* should_work/demo/alias.lus
-	Quid du module Lustre ???
-
 * enum : avec des parentheses ou des accolades ?
 
-* autorise t'on les trucs du genre:
-   
-        min_4 = min_n<< 4, toto<<2>> >> ;
-
-   ou doit-on ecrire
-
-      toto_2 = toto<<2>>;
-      min_4 = min_n<< 4, toto_2 >> ;
-
-?
-
-* mettre pre, current, when, etc. dans predef ?
-
-* dans le cas des constantes statiquement evaluables j'ai defini
-">" et consort comme étant polymorphes, parce que c'est
-facile en caml. Mais est-ce une bonne idée ?
-
-* le mot cled "struct" est optionel devant une definition de
-structure -> est-ce vraiment une bonne idée ?
-
-* Ident.idref : a remettre dans SyntaxTree ? en tout cas, je devrais
-m'en etre completement debarassé au niveau du compiledData, et ca
-n'est pas le cas pour l'instant...
+* j'ai  defini  ">"  et  consort  comme  étant  polymorphes  (et  pas
+seulement  surchargées),   parce  que  c'est  facile   en  caml  (via
+Pervasive.comare). Mais est-ce une bonne idée ?
 
 * slice_info_eff width = size ? Le commentaire dit 
  	S[i] = A[first + i*step] pour i = 0 .. width
@@ -55,9 +27,6 @@ mais j'ai l'impression que ce devrait etre
 cad 
  	S[i] = A[first + i*step] pour i = 0 .. (size-1)
 
-* verifier que chacun des exemples du repertoire "should_fail" à une
-correspondance dans le manuel, et reciproquement...
-
 * Que fait-on des constantes réelles ?
 
 par exemple, dans test/should_work/NONREG/simple.lus, 
@@ -74,6 +43,38 @@ les operateurs aritmetiques, bof.
 * pour l'evaluation statique de l'egalité, j'ai pas fait pareil...
 -> à discuter (cf predefInfo.ml)
 
+* Evaluer  statiquement  les  iterateurs  quand  c'est  possible  (cf
+  evalConst.ml) ?
+
+* rajouter  la notion  de  variables polymorphes  et sur-chargées  au
+  niveau noeud utilisateur  ? Ce devrait etre peanuts  maintenant que
+  je les ai en interne...
+
+* autoriser les  alias sur  "nor" et "#"  ? (ca complique  les choses
+  pour bien peu...).
+
+* maintenant que je peux definir des trucs du genre
+  x = map<<+;3>>
+  ai-je encore besoin de Lustre::plus et consort ??? 
+
+* au sujet des pragma:
+ ex : %ASSUME:assumeSelectElementOfRank_inArray_%
+ je les ai rajouté (un peu) dans le parseurs
+  -> 3 shift/reduce conflicts !
+  et puis  il faut  que je  les mettre partout  -> changer  une autre
+ regle ? sxIdent ?
+
+
+***********************************************************************************
+***********************************************************************************
+*** questions pour bibi
+
+* essayer de faire qque chose pour les 2 verrues dans predefSemantics
+
+* splitter predefsemantics en predefTyping et PredefEval?
+   les  function   type_error  des  predefSemantics   devraient  être
+   definies ailleurs en ce cas.
+   
 o Lazycompiler.solve_x_idref 
 
  Comment  se faisse  que  je n'ai  pas  besoin de  me  servir de  cet
@@ -90,26 +91,12 @@ lazycompiler.ml:
   Simplify  a  little  bit  a  couple  of  functions  (avoiding  code
   duplication basically). 
 
-* Evaluer  statiquement  les  iterateurs  quand  c'est  possible  (cf
-  evalConst.ml) ?
-
-* rajouter  la notion  de  variables polymorphes  et sur-chargées  au
-  niveau noeud utilisateur  ? Ce devrait etre peanuts  maintenant que
-  je les ai en interne...
-
-* splitter predefsemantics en predefTyping et PredefEval?
-   les  function   type_error  des  predefSemantics   devraient  être
-   definies ailleurs en ce cas.
-   
-
-* autoriser les  alias sur  "nor" et "#"  ? (ca complique  les choses
-  pour bien peu...).
+* mettre pre, current, when, etc. dans predef ?
 
-* essayer de faire qque chose pour les 2 verrues dans predefSemantics
+* Ident.idref : a remettre dans SyntaxTree ? en tout cas, je devrais
+m'en etre completement debarassé au niveau du compiledData, et ca
+n'est pas le cas pour l'instant...
 
-* maintenant que je peux definir des trucs du genre
-  x = map<<+;3>>
-  ai-je encore besoin de Lustre::plus et consort ??? 
 
 ***********************************************************************************
 ***********************************************************************************
@@ -119,9 +106,6 @@ lazycompiler.ml:
 
 *** facile
 
-* ../lus2lic -n consensus_6 should_work/Pascal/t2.lus
-
-* Verifier que les test de map_red couvre les cas tordus.
 
 * "1..2" ne marche pas car le lexer renvoie 
 	"1." ".2" 
@@ -139,8 +123,6 @@ generer les lexemes qui vont bien, 
 
 	tk_real+tk_real -> tk_int+tk_dotdot+tk_int
 
-
-
 * Dans les messages d'erreurs, le numero de colonne est faux à cause des tabulations
 
 * quand  je passe  2 fichiers  en arg  de la  ligne de  commande, sur
@@ -150,29 +132,19 @@ generer les lexemes qui vont bien, 
 
 
 
-
-
-
 *** moins facile
 
 * le clock checking 
 
 * le merge
 
-* les itérateurs
-
-* au sujet pragma:
- ex : %ASSUME:assumeSelectElementOfRank_inArray_%
- je les ai rajouté (un peu) dans le parseurs
-  -> 3 shift/reduce conflicts !
-  et puis  il faut  que je  les mettre partout  -> changer  une autre
- regle ? sxIdent ?
+* Recursion statique
 
+la recursion statique ne marche pas ("with (n=1)" pas pris en compte)
 
-* test/should_work/Pascal/consensus.lus
-
-la recursion statique ne marche pas ("with (n=1)" pas pris en compte
-
+../lus2lic should_work/Pascal/consensus.lus
+../lus2lic should_work/Pascal/t2.lus
+../lus2lic should_work/Pascal/t0.lus 
 
 node consensus<<const n : int>>(T: bool^n) returns (a: bool); 
 let
@@ -183,7 +155,7 @@ tel
 
 
 * evalEq.translate_left_part : faire plus de verification sur les
-index de slice
+index de slice 
 
 * patcher le mode emacs
 	- rajouter modele, package, etc.
@@ -201,6 +173,9 @@ c'est pas fini !)
  du genre "[int,int]" voire meme "[int,real]" qui ne sont plus autorisé, mais à
  qui on pourrait donner du sens via des tableaux et des structures factices
 
+* verifier que chacun des exemples du repertoire "should_fail" à une
+correspondance dans le manuel, et reciproquement...
+
 
 * "extern", "unsafe", and "memoryless" annotations   
 
diff --git a/src/expandPack.ml b/src/expandPack.ml
index 22176024..90ccf26d 100644
--- a/src/expandPack.ml
+++ b/src/expandPack.ml
@@ -1,4 +1,4 @@
-(** Time-stamp: <modified the 27/05/2008 (at 10:06) by Erwan Jahier> *)
+(** Time-stamp: <modified the 29/05/2008 (at 14:17) by Erwan Jahier> *)
 
 open Lxm
 open SyntaxTree
@@ -7,7 +7,7 @@ open Errors
 open SyntaxTabUtils
 
 let (doit:
-      (Ident.t, SyntaxTree.model_info Lxm.srcflagged) Hashtbl.t ->
+       (Ident.t, SyntaxTree.model_info Lxm.srcflagged) Hashtbl.t ->
       (SyntaxTree.pack_info  Lxm.srcflagged) ->
       SyntaxTree.pack_given) =
   fun mtab pdata -> (
@@ -37,75 +37,85 @@ let (doit:
 	  let args = pi.pi_args in
 	  let pars = mi.it.mo_needs in
 	    (*--------------------------------------------------*)
-	    (* la fonction qui traite un couple ... *)
-	  let check_arg p a = (
-	    (* message d'erreur standard *)
-	    let instance_error () = (
-	      let msg = Printf.sprintf
-		"bad pack instance: uncompatible arg passed to %s"
-		(Lxm.details p.src)
+
+	  (* la fonction qui traite un couple ... *)
+	  let (check_arg : static_param srcflagged -> static_arg srcflagged -> unit) =
+	    fun param arg -> 
+	      (* message d'erreur standard *)
+	      let instance_error () = 
+		let msg = Printf.sprintf
+		  "bad argument in package instance: %s" (Lxm.details param.src)
+		in
+		  raise (Compile_error (arg.src, msg)) 
 	      in
-		raise (Compile_error (a.src, msg))
-	    ) in
-	      (* on a soit un ident, à checker plus tard, 
-		 soit une expression de la bonne nature *)
-	      match (p.it) with
-		| StaticParamType s -> (
-		    let te = match (a.it) with
-			StaticArgIdent idr -> 
-			  Lxm.flagit (Named_type_exp idr) a.src
-		      | StaticArgType x -> x
-		      | _ -> instance_error ()
-		    in
-		    let ti = AliasedType (s, te) in
-		    let x = Lxm.flagit (TypeInfo ti) p.src in
-		      newprov := x::!newprov ;
-		      let y = Lxm.flagit ti p.src in
-			put_in_tab "type" ttab s y ;
-			newdefs := (TypeItem s)::!newdefs
-		  ) 
-		| StaticParamConst (s,te) -> (
-		    let ce = match (a.it) with
-		      | StaticArgIdent idr -> 
-			  ParserUtils.leafexp a.src (IDENT_n idr) 
-		      | StaticArgConst x -> x
-		      | _ -> instance_error ()
-		    in
-		    let ci = DefinedConst (s, Some te, ce) in
-		    let x = Lxm.flagit (ConstInfo ci) p.src in
-		      newprov := x::!newprov ;
-		      let y = Lxm.flagit ci p.src in
-			put_in_tab "const" ctab s y ;
-			newdefs := (ConstItem s)::!newdefs
-		  ) 
-		| StaticParamNode (s, inl, outl, has_memory) -> (
-		    let by_pos_op = match (a.it) with
-		      | StaticArgIdent idr -> 
-			  ParserUtils.call_or_predef(Lxm.flagit ((idr,[])) a.src)
-		      | StaticArgNode by_pos_op -> by_pos_op 
-		      | _ -> instance_error () 
-		    in
-		    let sparams = [] in
-		    let ni = {
-		      name = s;
-		      static_params = sparams;
-		      vars = Some (ParserUtils.build_node_var inl outl None);
-		      def = Alias (flagit by_pos_op a.src);
-		      has_mem = has_memory;
-		      is_safe = true;
-		    } 
-		    in
-		    let x = Lxm.flagit (NodeInfo ni) p.src in
-		      newprov := x::!newprov ;
-		      let y = Lxm.flagit ni p.src in
-			put_in_tab "node" otab s y ;
-			newdefs := (NodeItem (s,sparams))::!newdefs
-		  ) 
-	  ) (* check_arg *)
+		(* on a soit un ident, à checker plus tard, soit une
+		   expression de la bonne nature *)
+		match (param.it) with
+		  | StaticParamType s -> (
+		      let te = match (arg.it) with
+			  StaticArgIdent idr -> 
+			    Lxm.flagit (Named_type_exp idr) arg.src
+			| StaticArgType x -> x
+			| _ -> instance_error ()
+		      in
+		      let ti = AliasedType (s, te) in
+		      let x = Lxm.flagit (TypeInfo ti) param.src in
+			newprov := x::!newprov ;
+			let y = Lxm.flagit ti param.src in
+			  put_in_tab "type" ttab s y ;
+			  newdefs := (TypeItem s)::!newdefs
+		    ) 
+		  | StaticParamConst (s,te) -> (
+		      let ce = match (arg.it) with
+			| StaticArgIdent idr -> 
+			    ParserUtils.leafexp arg.src (IDENT_n idr) 
+			| StaticArgConst x -> x
+			| _ -> instance_error ()
+		      in
+		      let ci = DefinedConst (s, Some te, ce) in
+		      let x = Lxm.flagit (ConstInfo ci) param.src in
+			newprov := x::!newprov ;
+			let y = Lxm.flagit ci param.src in
+			  put_in_tab "const" ctab s y ;
+			  newdefs := (ConstItem s)::!newdefs
+		    ) 
+		  | StaticParamNode (s, inl, outl, has_memory) -> (
+		      let by_pos_op = match (arg.it) with
+			| StaticArgIdent idr -> 
+			    ParserUtils.call_or_predef(Lxm.flagit ((idr,[])) arg.src)
+			| StaticArgNode by_pos_op -> by_pos_op 
+			| _ -> instance_error () 
+		      in
+		      let sparams = [] in
+		      let ni = {
+			name = s;
+			static_params = sparams;
+			vars = Some (ParserUtils.build_node_var inl outl None);
+			def = Alias (flagit by_pos_op arg.src);
+			has_mem = has_memory;
+			is_safe = true;
+		      } 
+		      in
+		      let x = Lxm.flagit (NodeInfo ni) param.src in
+			newprov := x::!newprov ;
+			let y = Lxm.flagit ni param.src in
+			  put_in_tab "node" otab s y ;
+			  newdefs := (NodeItem (s,sparams))::!newdefs
+		    ) 
+		      (* check_arg *)
 	  in
+	  let pars_nb = string_of_int (List.length pars)
+	  and args_nb = string_of_int (List.length args) in
 	    try (
 	      (*------------TRAITEMENT---------------------------------*)
-	      assert (List.length pars = List.length args);
+	      if (pars_nb <> args_nb) then
+		raise(Compile_error 
+			(pdata.src, 
+			 ("\n*** " ^pars_nb ^ 
+			    " arguments are expected, but "^args_nb^
+			    " were provided when defining package "^
+			    (Ident.pack_name_to_string pdata.it.pa_name)
+			 )));
 	      List.iter2 check_arg pars args;
 	      (* on fabrique un pack_given valide avec les infos récoltées *)	
 	      let body = {
diff --git a/src/parser.mly b/src/parser.mly
index aee830a2..18a14fbb 100644
--- a/src/parser.mly
+++ b/src/parser.mly
@@ -615,12 +615,17 @@ sxUses:
 	}
 ;
 
+/* */
+sxEq_or_Is:
+|	TK_EQ
+ 	{}
+|	TK_IS
+ 	{}
 /* I don't like by-pos notation, but keep it
 	for backward compatibility
 */
-
 sxPackEq:
-	TK_PACKAGE sxIdent TK_IS sxIdent TK_OPEN_PAR
+	TK_PACKAGE sxIdent sxEq_or_Is sxIdent TK_OPEN_PAR
 		sxStaticArgList
 	TK_CLOSE_PAR TK_SEMICOL
 	{
@@ -1178,7 +1183,8 @@ sxStaticArgList:
 	  - la nature est sans ambiguite const (expressions simples)
 	  - la nature est compile-time (juste un ident, a résoudre)
 	  */
-	    sxStaticArg:
+
+sxStaticArg:
 	  /* nature explicite */
 	| TK_TYPE sxType 
 	    { {src=$1 ; it=StaticArgType $2 } }
diff --git a/src/syntaxTab.ml b/src/syntaxTab.ml
index d5cc6c96..5d631511 100644
--- a/src/syntaxTab.ml
+++ b/src/syntaxTab.ml
@@ -1,4 +1,4 @@
-(** Time-stamp: <modified the 26/05/2008 (at 11:29) by Erwan Jahier> *)
+(** Time-stamp: <modified the 29/05/2008 (at 13:56) by Erwan Jahier> *)
 
 (** 
     Table des infos sources : une couche au dessus de SyntaxTree pour mieux
@@ -302,7 +302,7 @@ init_pack_mng_stabs (this: t) (pname: Ident.pack_name) (pm: pack_mng) = (
     Verbose.printf "   init symbol tables for pack %s\n"
       (Ident.pack_name_to_string pname);
     (* ON COMMENCE PAR TRAITER LE PG_USES *)
-    let treat_uses px = (
+    let treat_uses (px:Ident.pack_name srcflagged) = (
       let pname = px.it in
       let lxm = px.src in
       let pum = 
diff --git a/src/test/should_work/Pascal/t0.lus b/src/test/should_work/Pascal/t0.lus
index 938bc043..f213d459 100644
--- a/src/test/should_work/Pascal/t0.lus
+++ b/src/test/should_work/Pascal/t0.lus
@@ -7,12 +7,11 @@ let
 	mn = if (x <= y) then x else y;
 tel
 
-node min_n<<const n: int>>
-(T : int^n) returns (mn : int);
+node min_n<<const n: int>>(T : int^n) returns (mn : int);
 let
 	mn = with (n = 1) then T[0]
-	     else min(T[0], min_n<<n-1>>(T[1 ..n-1]));
+	     else min(T[0], min_n<<n-1>>(T[1 .. n-1]));
 tel 
 
 node min_4 = min_n<<4>>;
-
+node t0 = min_4;
diff --git a/src/test/should_work/Pascal/t2.lus b/src/test/should_work/Pascal/t2.lus
index 3920f79e..307043da 100644
--- a/src/test/should_work/Pascal/t2.lus
+++ b/src/test/should_work/Pascal/t2.lus
@@ -42,6 +42,7 @@ let
 	c = fold_left << bool,bool,6, Lustre::and >>(true, X);
 tel
 
+node t2 = consensus_6;
 -- Voire même :
 
 node consensus_6_bis = fold_left  << bool,bool,6, Lustre::and >> ;
diff --git a/src/test/should_work/demo/mapiter_lv4.lus b/src/test/should_work/demo/mapiter_lv4.lus
deleted file mode 100644
index a415d6ee..00000000
--- a/src/test/should_work/demo/mapiter_lv4.lus
+++ /dev/null
@@ -1,45 +0,0 @@
--------------------------------------------- 
--- File `mapiter_lv4.lus' generated by 
--- the lustre-v6 compiler version 0.17
---------------------------------------------
-
--------------------------------------------- 
--- internal type(s) definition(s)  
--------------------------------------------- 
-type T1_ARRAY = int^7;
-type T2_ARRAY = T1_ARRAY^3;
-
---------------------------------------------
--- alias types and constant declarations
---------------------------------------------
-
--------------------------------------------- 
--- operator definition 
--------------------------------------------- 
-node mapiter(
- i_i1 : T2_ARRAY;
- ) returns ( 
- o_s1 : T2_ARRAY;
- );
-let
-   o_s1 = m_m_incr_tab_7_3(i_i1);
-tel
-
-
-----------------------------------------------
--- V6-iterators traduction 
-----------------------------------------------
-
--- node: m_incr_tab_7
------------------------------------- 
-node m_incr_tab_7(i0 : T1_ARRAY) returns (o0 : T1_ARRAY);
-let
-  o0 = incr_tab(i0);
-tel
-
--- node: m_m_incr_tab_7_3
------------------------------------- 
-node m_m_incr_tab_7_3(i0 : T2_ARRAY) returns (o0 : T2_ARRAY);
-let
-  o0 = m_incr_tab_7(i0);
-tel
diff --git a/src/test/should_work/packEnvTest/Condact.lus b/src/test/should_work/packEnvTest/Condact.lus
index d7a69b34..533fb6d6 100644
--- a/src/test/should_work/packEnvTest/Condact.lus
+++ b/src/test/should_work/packEnvTest/Condact.lus
@@ -8,7 +8,7 @@
 -- Generic Package Condact
 ------------------------------------- 
 
-package Main 
+package Util 
    provides node carre(e: int) returns (s: int);
 body
   node carre(e: int) returns (s: int);
@@ -18,13 +18,13 @@ body
 end
 
 
-package TestCondact uses Main;
-  = Condact(int, int, Main::carre);
+package TestCondact  = Condact(int, int, Util::carre);
 
 
 model Condact 
    needs 
-      type t1, t2;
+      type t1; 
+      type t2;
       node n(x: t1) returns (y: t2);
       
    provides node C(c: bool; d: t2; x: t1) returns (y: t2);
@@ -39,3 +39,10 @@ end
 
     
 
+package Main
+uses TestCondact;
+provides 
+  node Condact(c: bool; d: t2; x: t1) returns (y: t2);
+body
+  node Condact = TestCondact::C;
+end
\ No newline at end of file
diff --git a/src/test/test.res.exp b/src/test/test.res.exp
index c259dab4..4a3f52ee 100644
--- a/src/test/test.res.exp
+++ b/src/test/test.res.exp
@@ -6138,6 +6138,7 @@ Opening file should_work/Pascal/t0.lus
 *** SyntaxTab.create pass 2
     init pack t0
        export node min_4
+       export node t0
        export node min
        export node min_n
        export node max
@@ -6158,7 +6159,7 @@ End of Syntax table dump. 
 	Exported types:
 	Exported constants:
 	Exported nodes:
-*** Error in file "should_work/Pascal/t0.lus", line 14, col 39 to 40, token '..': 
+*** Error in file "should_work/Pascal/t0.lus", line 13, col 39 to 40, token '..': 
 *** can't eval constant: array index 1 out of bounds 0..0
 
 
@@ -6196,6 +6197,7 @@ Opening file should_work/Pascal/t2.lus
 *** SyntaxTab.create pass 2
     init pack t2
        export node fold_left
+       export node t2
        export node consensus_6_bis
        export node consensus_6
        export node consensus_bis
@@ -7952,39 +7954,6 @@ let
 tel
 -- end of node mapiter__mapiter
 
-----------------------------------------------------------------------
-====> ../lus2lic -vl 3 --compile-all-items should_work/demo/mapiter_lv4.lus
-Opening file should_work/demo/mapiter_lv4.lus
-*** SyntaxTab.create pass 1
-*** SyntaxTab.create pass 2
-    init pack mapiter_lv4
-       export type T1_ARRAY
-       export type T2_ARRAY
-       export node mapiter
-       export node m_m_incr_tab_7_3
-       export node m_incr_tab_7
-*** SyntaxTab.create pass 3
-   init symbol tables for pack mapiter_lv4
-*** SyntaxTab.create done
-*** « Syntax table dump:
- 	 - Package or model list:
-		mapiter_lv4 (pack) 
-		
-	 - Raw model table: 
-	 - Raw Package table: mapiter_lv4 
-	 - Package manager table: mapiter_lv4 
-End of Syntax table dump. »
--- MAIN NODE: "mapiter_lv4__mapiter_lv4"
-*** Dump the exported items of the packages.
- * package mapiter_lv4
-	Exported types:
-type mapiter_lv4__T1_ARRAY = int^7;
-type mapiter_lv4__T2_ARRAY = int^7^3;
-	Exported constants:
-	Exported nodes:
-*** Error in file "should_work/demo/mapiter_lv4.lus", line 37, col 8 to 15, token 'incr_tab': unknown node (incr_tab)
-
-
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/demo/mappredef.lus
 Opening file should_work/demo/mappredef.lus
@@ -13180,7 +13149,51 @@ tel
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/packEnvTest/Condact.lus
 Opening file should_work/packEnvTest/Condact.lus
-*** Error in file "should_work/packEnvTest/Condact.lus", line 22, col 3 to 3, token '=': syntax error
+*** SyntaxTab.create pass 1
+*** SyntaxTab.create pass 2
+    init pack Main
+       export node Condact
+    init pack TestCondact
+       export node C
+       export type t1
+       export type t2
+       export node n
+    init pack Util
+       export node carre
+*** SyntaxTab.create pass 3
+   init symbol tables for pack Main
+   init symbol tables for pack TestCondact
+   init symbol tables for pack Util
+*** SyntaxTab.create done
+*** « Syntax table dump:
+ 	 - Package or model list:
+		Util (pack) 
+		TestCondact (pack) 
+		Condact (model) 
+		Main (pack) 
+		
+	 - Raw model table: Condact 
+	 - Raw Package table: Main TestCondact Util 
+	 - Package manager table: Main TestCondact Util 
+End of Syntax table dump. »
+-- MAIN NODE: "Util__Condact"
+*** Dump the exported items of the packages.
+ * package Util
+	Exported types:
+	Exported constants:
+	Exported nodes:
+node Util__carre(e:int) returns (s:int);
+let
+   s = (e * e);
+tel
+-- end of node Util__carre
+ * package TestCondact
+	Exported types:
+type TestCondact__t1 = int;
+type TestCondact__t2 = int;
+	Exported constants:
+	Exported nodes:
+*** Error in file "should_work/packEnvTest/Condact.lus", line 21, col 42 to 52, token 'Util::carre': unknown node (carre)
 
 
 ----------------------------------------------------------------------
-- 
GitLab