diff --git a/src/soc2c.ml b/src/soc2c.ml
index 017d961f198f5b533bc8eee660b7acd4937594e3..fd3a30fecf9ca9c51fd66f89195fe122cd759273 100644
--- a/src/soc2c.ml
+++ b/src/soc2c.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 07/07/2014 (at 11:49) by Erwan Jahier> *)
+(* Time-stamp: <modified the 09/07/2014 (at 12:54) by Erwan Jahier> *)
 
 
 (* let put (os: out_channel) (fmt:('a, unit, string, unit) format4) : 'a = *)
@@ -8,30 +8,6 @@ open Printf
 open Soc2cIdent
 open Data
 
-let rec (type_to_string : Data.t -> string -> string) = 
-  fun v n -> 
-    (* in order to print arrays of arrays type size in the good order, 
-       we accumulate the array size when v of of type array, and
-       we print it otherwise (finish).
-    *)
-    let rec finish acc str =
-      match acc with
-        |[] -> str
-        | s::ts -> Printf.sprintf "%s[%d]" (finish ts str) s 
-    in 
-    let rec aux acc v n =
-      match v with
-        | Bool -> finish acc ("_boolean "^n)
-        | Int -> finish acc ("_integer "^n)
-        | Real-> finish acc ("_real "^n)
-        | Extern s -> finish acc ((id2s s)^" "^n)
-        | Enum  (s, sl) -> finish acc (id2s s ^" "^n)
-        | Struct (sid,_) -> finish acc ((id2s sid)^" "^n)
-        | Array (ty, sz) -> aux (sz::acc) ty n
-        | Alpha nb -> finish acc ("alpha_"^(string_of_int nb)^" "^n) 
-        | Alias(a,_) -> finish acc (a^" "^n)
-    in
-    aux [] v n
 
 let rec (type_to_string2 : Data.t -> string) = 
   fun v -> 
@@ -49,39 +25,6 @@ let rec (type_to_string2 : Data.t -> string) =
     in
     str
 
-(****************************************************************************)
-let rec (lic_type_to_c: Lic.type_  -> string -> string) =
-  fun t n -> 
-    match t with
-      | Lic.Struct_type_eff (name, fl) ->
-        let field_to_c (id,(tf,_opt)) = 
-          Printf.sprintf "\n   %s;" (type_to_string (Lic2soc.lic_to_data_type tf) (id2s id)) 
-        in
-        ((Printf.sprintf "struct { %s\n  }" 
-            (String.concat "" (List.map field_to_c fl)))^ " " ^ n) 
-      | Enum_type_eff (name, l) -> "_integer"^ " " ^ n
-      | _ -> type_to_string (Lic2soc.lic_to_data_type t) n
-
-
-let rec (lic_type_to_c_old: Lic.type_  -> string -> string) =
-  fun t n -> match t with
-    | Bool_type_eff -> "_boolean"^ " " ^ n
-    | Int_type_eff  -> "_integer"^ " " ^ n
-    | Real_type_eff -> "_real"^ " " ^ n
-    | External_type_eff (name) -> (long2s name)^ " " ^ n
-    | Abstract_type_eff (name, t) -> lic_type_to_c t n
-    | Enum_type_eff (name, l) -> "_integer"^ " " ^ n
-    | Array_type_eff (ty, sz) -> 
-      Printf.sprintf "%s %s[%d]" (lic_type_to_c ty "") n sz
-    | Struct_type_eff (name, fl) ->
-      let field_to_c (id,(tf,_opt)) = 
-        Printf.sprintf "  %s %s;\n" (lic_type_to_c tf "")  (id2s id)
-      in
-      (Printf.sprintf "struct %s { %s }" 
-        (long2s name) 
-        (String.concat "" (List.map field_to_c fl)))^ " " ^ n
-    | TypeVar Any -> assert false
-    | (TypeVar AnyNum) -> assert false
 
 
 let (inline_soc : Soc.key -> bool) =
@@ -108,7 +51,7 @@ let (string_of_soc_key : Soc.key -> string) =
   fun (name,_,_) ->  (id2s name)
 
 let string_of_flow_decl (id, t) = 
-  Printf.sprintf "   %s;\n" (type_to_string t (id2s id)) 
+  Printf.sprintf "   %s;\n" (Soc2cUtil.type_to_string t (id2s id)) 
 
 
 let (is_memory_less : Soc.t -> bool) = SocUtils.is_memory_less
@@ -168,8 +111,6 @@ let (gao2c : Soc.tbl -> 'a soc_pp -> Soc.gao -> unit) =
     in
     sp.cput (gao2str gao)
 
-let needs_ext_call = ref false
-
 let (step2c : Soc.tbl -> 'a soc_pp -> Soc.step_method -> unit) =
   fun stbl sp sm -> 
     if inline_soc sp.soc.key then () (* don't generate code if inlined *) else
@@ -182,14 +123,12 @@ let (step2c : Soc.tbl -> 'a soc_pp -> Soc.step_method -> unit) =
       let ctx_decl = if is_memory_less sp.soc then "" else
           Printf.sprintf "%s_type*" (get_ctx_name sp.soc.key)
       in
-      if sm.impl=Extern then needs_ext_call := true
-      else (
+      if sm.impl<>Extern then (
         sp.hput (Printf.sprintf "void %s(%s);\n" sname ctx_decl);
         sp.cput (Printf.sprintf "void %s(%s){\n" sname ctx);
         (match sm.impl with
           | Extern -> ()
-          | Predef ->        
-            sp.cput (SocPredef2c.get_key sp.soc.key)
+          | Predef -> sp.cput (SocPredef2c.get_key sp.soc.key)
           | Gaol(vl, gaol) -> (
             List.iter (fun v -> sp.cput (string_of_flow_decl v)) vl ; 
             sp.cput "\n"; 
@@ -290,7 +229,7 @@ let (typedef_of_soc : Soc.t -> string) =
       (match soc.memory with
         | No_mem -> ""
         | Mem t -> 
-          Printf.sprintf "   /*Memory cell*/\n   %s ;\n" (id2s (type_to_string t "_memory"))
+          Printf.sprintf "   /*Memory cell*/\n   %s ;\n" (id2s (Soc2cUtil.type_to_string t "_memory"))
         | Mem_hidden -> ""
       )
     in
@@ -322,6 +261,11 @@ let  (find_typedep_nf : Lic.type_ -> Lic.item_key list) =
     in
     aux true t
 
+let (is_extern_type: Lic.type_ -> bool) =
+  function 
+    | External_type_eff _ -> true
+    | _  -> false
+
 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
@@ -335,12 +279,12 @@ let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) =
         if KeySet.mem soc.key visited then (acc,visited) else
           let visited = KeySet.add soc.key visited in
           let acc,visited =
-          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
+            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 acc = acc ^ (typedef_of_soc soc) in
           acc,visited
@@ -359,12 +303,13 @@ let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) =
       List.fold_left  memless_soc_to_string "" socs
     in 
     let to_c k t =
-      Printf.sprintf "typedef %s;\n" (lic_type_to_c t (long2s k))
+      Printf.sprintf "typedef %s;\n" (Soc2cUtil.lic_type_to_c t (long2s k))
     in
     let rec (typedef_to_string : Lic.item_key -> Lic.type_ -> string * ItemKeySet.t -> 
              string * ItemKeySet.t) =
       fun k t acc ->
         (* topological sort according to type dep *)
+        if is_extern_type t then acc else
         if ItemKeySet.mem k (snd acc) then acc else
           let type_list = find_typedep_nf t in
           let acc = List.fold_left 
@@ -372,7 +317,7 @@ let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) =
               match LicPrg.find_type licprg k with
                 | Some t -> typedef_to_string k t acc
                 | None -> acc (* occurs ? *)
-              ) 
+            ) 
             acc type_list 
           in
           ((fst acc)^(to_c k t), ItemKeySet.add k (snd acc))
@@ -383,7 +328,8 @@ let (typedef : LicPrg.t -> Soc.tbl -> Soc.t -> string) =
     ^"// Memoryless soc ctx typedef \n"^soc_ctx_typedef_without
     ^"// Memoryfull soc ctx typedef \n"^soc_ctx_typedef_with
     
-    
+
+
 
 (****************************************************************************)
 let rec (const_to_c: Lic.const -> string) =
@@ -410,10 +356,11 @@ let rec (const_to_c: Lic.const -> string) =
     )
     | Tuple_const_eff   cl -> assert false
 
-
 let (constdef : LicPrg.t -> string) = 
   fun licprg -> 
-    let to_c k c =
+    let to_c k = function
+    | Lic.Extern_const_eff _ -> ""
+    | c  -> 
       Printf.sprintf "#define %s %s\n"
 (*       Printf.sprintf "const %s = %s;\n" *)
         (long2s k)
@@ -421,6 +368,7 @@ let (constdef : LicPrg.t -> string) =
     in
     LicPrg.fold_consts (fun k t acc -> acc ^ (to_c k t)) licprg  "\n// Constant definitions \n"
 
+
 (****************************************************************************)
 
 let (gen_memoryless_ctx : Soc.tbl -> string) =
@@ -592,11 +540,13 @@ let (f : Lv6MainArgs.t -> Soc.key -> Soc.tbl -> LicPrg.t -> unit) =
   fun args msoc stbl licprg -> 
     let socs = Soc.SocMap.bindings stbl in
     let socs = snd (List.split socs) in 
-        (* XXX que fait-on pour les soc predef ? *)
-        (*     let _, socs = List.partition is_predef socs in *)
+    (* XXX que fait-on pour les soc predef ? *)
+    (*     let _, socs = List.partition is_predef socs in *)
     let base = string_of_soc_key msoc in
     let hfile = base ^  ".h" in
     let cfile = base ^ ".c" in
+    let ext_cfile = Printf.sprintf "%s_ext.c" base in
+    let ext_hfile = Printf.sprintf "%s_ext.h" base in
     let loopfile = base^"_loop.c" in
     let occ = open_out cfile in
     let och = open_out hfile in
@@ -605,9 +555,13 @@ let (f : Lv6MainArgs.t -> Soc.key -> Soc.tbl -> LicPrg.t -> unit) =
     let putc s =  output_string occ s ; flush occ in
     let puth s =  output_string och s ; flush och  in
     let main_soc = Soc.SocMap.find msoc stbl in
+    (* Generate ext files if necessary  *)
+    let needs_cfile, needs_hfile = 
+      Soc2cExtern.gen_files main_soc stbl licprg ext_cfile ext_hfile hfile
+    in
+
     Lv6util.entete occ "/*" "*/" ;
     Lv6util.entete och "/*" "*/";
-
     gen_loop_file main_soc ocl stbl;
     
     output_string och "
@@ -629,19 +583,21 @@ typedef float _float;
 
 ";
 
+    if needs_hfile then puth (Printf.sprintf "#include \"%s\"\n" ext_hfile);
     puth (Printf.sprintf "#ifndef _%s_LUS2LIC_H_HILE\n" base);
     puth (Printf.sprintf "#define _%s_LUS2LIC_H_HILE\n" base);
 
     putc (Printf.sprintf "#include \"%s\"\n" hfile);
     puth (typedef licprg stbl main_soc );
     putc (constdef licprg);
+    putc (Soc2cExtern.cpy_declaration licprg);
+    putc (Soc2cExtern.const_declaration licprg);
     puth "/////////////////////////////////////////////////\n";
     puth "//// Static allocation of memoryless soc ctx\n";
     List.iter (soc2c 1 och occ stbl) socs;
     puth "/////////////////////////////////////////////////\n";
     putc "//// Defining step functions\n";
     List.iter (soc2c 2 och occ stbl) socs;
-    if !needs_ext_call then (puth (Printf.sprintf "#include \"%s_ext.h\"\n" base));
     puth "#endif\n";
     flush occ; close_out occ;
     flush och; close_out och;
@@ -649,7 +605,10 @@ typedef float _float;
     Printf.printf "%s has been generated.\n" loopfile;
     Printf.printf "%s has been generated.\n" hfile; 
     Printf.printf "%s has been generated.\n" cfile;
-    let base = (string_of_soc_key main_soc.key) in
-    let loopfile = base^"_loop.c" in
-    Printf.printf "you can compile those files doing, e.g.,\n  gcc %s %s\n"  cfile loopfile;
+
+    if needs_cfile then 
+      Printf.printf "you can compile those files doing, e.g.,\n  gcc %s %s %s\n"  
+        cfile ext_cfile loopfile
+    else 
+      Printf.printf "you can compile those files doing, e.g.,\n  gcc %s %s\n"  cfile loopfile;
     flush stdout
diff --git a/src/soc2cExtern.ml b/src/soc2cExtern.ml
new file mode 100644
index 0000000000000000000000000000000000000000..5265b29d4e80aecb9152829d2b005f17be3db0e4
--- /dev/null
+++ b/src/soc2cExtern.ml
@@ -0,0 +1,144 @@
+(* Time-stamp: <modified the 09/07/2014 (at 12:17) by Erwan Jahier> *)
+
+open Soc2cIdent
+
+let (is_extern_type: Lic.type_ -> bool) =
+  function 
+    | Lic.External_type_eff _ -> true
+    | _ -> false
+
+let (is_extern_const: Lic.const -> bool) =
+  function 
+    | Lic.Extern_const_eff _ -> true
+    | _  -> false
+
+let (type_decl : LicPrg.t -> string) =
+  fun prg -> 
+    let type_to_string k t acc =
+      if is_extern_type t then
+        Printf.sprintf "%s\ntypedef FAKE_TYPE_DEF_2FIX %s;" acc  (long2s k)
+      else acc
+    in
+    let preambule = "\n/* XXX FIXME: The following types must be defined/fixed */" ^
+      "\n#define FAKE_TYPE_DEF_2FIX int" 
+    in
+    (LicPrg.fold_types type_to_string prg preambule)^"\n"
+
+let (cpy_def : LicPrg.t -> string) =
+  fun prg -> 
+    let type_to_string k t acc =
+      match t with
+        | Lic.External_type_eff t -> 
+          Printf.sprintf "%s\nvoid _assign_%s(%s* x,%s y){}" acc (long2s k) (long2s k) (long2s k)
+        | _  -> acc
+    in
+    let preambule = "\n/* XXX FIXME: The following copy functions must be defined/fixed */" in
+    (LicPrg.fold_types type_to_string prg preambule)^"\n"
+
+(* exported *)
+let (cpy_declaration : LicPrg.t -> string) =
+  fun prg -> 
+    let type_to_string k t acc =
+      match t with
+        | Lic.External_type_eff t -> 
+          Printf.sprintf "%s\nextern void _assign_%s(%s*,%s);" acc (long2s k) (long2s k) (long2s k)
+        | _  -> acc
+    in
+    let preambule = "/*  */\n" in
+    (LicPrg.fold_types type_to_string prg preambule)^"\n"
+
+let (cpy_decl : LicPrg.t -> string) =
+  fun prg -> 
+    let type_to_string k t acc =
+      match t with
+        | Lic.External_type_eff t -> 
+          Printf.sprintf "%s\nvoid _assign_%s(%s*,%s);" acc (long2s k) (long2s k) (long2s k)
+        | _  -> acc
+    in
+    let preambule = "/*  */\n" in
+    (LicPrg.fold_types type_to_string prg preambule)^"\n"
+
+
+let (const_def : LicPrg.t -> string) =
+  fun prg -> 
+    let const_to_string k c acc =
+      match c with 
+        | Lic.Extern_const_eff(_,t) -> 
+          let t = Soc2cUtil.lic_type_to_c t (long2s k) in 
+          Printf.sprintf "%s\n%s=FAKE_CONST_DEF_2FIX;" acc t
+        | _ -> acc
+    in
+    let preambule = "\n/* XXX FIXME: The following const def must be defined/fixed */" ^
+      "\n#define FAKE_CONST_DEF_2FIX 1" in
+    (LicPrg.fold_consts const_to_string prg preambule)^"\n"
+
+(* exported *)
+let (const_declaration : LicPrg.t -> string) =
+  fun prg -> 
+    let const_to_string k c acc =
+      match c with 
+        | Lic.Extern_const_eff(_,t) -> 
+          let t = Soc2cUtil.lic_type_to_c t (long2s k) in 
+          Printf.sprintf "%s\nextern %s;" acc t
+        | _ -> acc
+    in
+    let preambule = "/* */\n" in
+    (LicPrg.fold_consts const_to_string prg preambule)^"\n"
+
+open Soc
+
+let (gen_files : Soc.t -> Soc.tbl -> LicPrg.t -> string -> string-> string -> bool * bool) = 
+  fun msoc stbl licprg ext_cfile ext_hfile hfile -> 
+    let extern_steps = SocMap.fold
+      (fun sk soc acc -> 
+        List.fold_left (fun acc sm -> if sm.impl=Extern then (sm,soc)::acc else acc) 
+          acc soc.step
+      )
+      stbl []
+    in
+    let extern_types = LicPrg.fold_types 
+      (fun _ t acc -> match t with External_type_eff et -> et::acc | _ -> acc)
+      licprg []
+    in
+    let extern_consts = LicPrg.fold_consts 
+      (fun _ c acc -> match c with Extern_const_eff(ec,_) -> ec::acc | _ -> acc)
+      licprg []
+    in
+    let needs_cfile = extern_steps <> [] in
+    let needs_hfile = needs_cfile || extern_types<>[] || extern_consts<>[] in
+
+      if not (Sys.file_exists ext_hfile) then (
+        let ext_och = open_out ext_hfile in
+        output_string ext_och (type_decl licprg);
+        output_string ext_och (cpy_decl licprg);
+        List.iter (fun (sm,soc) -> 
+          let sname = Soc2cUtil.step_name soc.key sm.name in
+          if SocUtils.is_memory_less soc then 
+            output_string ext_och (Printf.sprintf "void %s();\n" sname)
+          else
+            let ctx = get_ctx_name soc.key in
+            output_string ext_och (Printf.sprintf "void %s(%s*);\n" sname ctx)
+        ) extern_steps;
+        close_out ext_och;
+        print_string (Printf.sprintf "%s has been generated.\n" ext_hfile);
+        
+      );
+      if not (Sys.file_exists ext_cfile) then (
+        let ext_occ = open_out ext_cfile in
+        output_string ext_occ (Printf.sprintf "#include \"%s\"\n" hfile);
+        output_string ext_occ (cpy_def licprg);
+        output_string ext_occ (const_def licprg);
+        List.iter (fun (sm,soc) -> 
+          let sname = Soc2cUtil.step_name soc.key sm.name in
+          if SocUtils.is_memory_less soc then 
+            output_string ext_occ (Printf.sprintf "void %s(){\n   /* finish me! */\n}\n" sname)
+          else
+            let ctx = get_ctx_name soc.key in
+            output_string ext_occ (
+              Printf.sprintf "void %s(%s* ctx){\n   \\\\ finish me!\n}\n" sname ctx)
+        ) extern_steps;
+        close_out ext_occ;
+        print_string (Printf.sprintf "%s has been generated.\n" ext_cfile);
+      );
+      needs_cfile, needs_hfile
+
diff --git a/src/soc2cExtern.mli b/src/soc2cExtern.mli
new file mode 100644
index 0000000000000000000000000000000000000000..95ff1c9c222e963f5c482f0194668ef48b6d7d62
--- /dev/null
+++ b/src/soc2cExtern.mli
@@ -0,0 +1,24 @@
+(* Time-stamp: <modified the 09/07/2014 (at 11:06) by Erwan Jahier> *)
+
+
+(* [gen_files main_soc licprg cfile hfile] returns a pair of bool that
+   states if an extern C file (LHS) and an extern header file (RHS)
+   are necessary to compile the main soc. 
+
+   A C file is necessary if an extern step exists.
+   A header file in necessary if an extern step, const, or types exists.
+
+   As a side effect, and as its name suggests, this function also
+   generates files, cfile and hfile, if they do not already exist in
+   the current directory.
+
+   nb: In order to ease the non reg tests, I've chosen to define
+   extern types as int, and empty step function that compiles, and to
+   add "XXX" comments where fixes are required. Is it really a good
+   idea ?
+*)
+val gen_files : Soc.t -> Soc.tbl -> LicPrg.t -> string -> string -> string -> bool * bool
+                
+val cpy_declaration : LicPrg.t -> string
+val const_declaration : LicPrg.t -> string
+
diff --git a/src/soc2cUtil.ml b/src/soc2cUtil.ml
index 8a36b0c62a4f0eca2deb9ac91bc1f867b07b5517..ec1ff5c7240a55ed3a3cb2f770d7fafd6f8d6210 100644
--- a/src/soc2cUtil.ml
+++ b/src/soc2cUtil.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 01/07/2014 (at 09:43) by Erwan Jahier> *)
+(* Time-stamp: <modified the 09/07/2014 (at 11:48) by Erwan Jahier> *)
 
 open Soc2cIdent
 
@@ -40,7 +40,7 @@ let rec (gen_assign : Data.t  -> string -> string -> string -> string) =
       | Extern (id) -> 
         (* what should i do for extern types? Ask the user to provide the
            copy function I guess *)
-        Printf.sprintf "  cpy_%s(%s, %s);\n" id vi vo 
+        Printf.sprintf "  _assign_%s(&%s, %s);\n" (id2s id) vi vo 
 
 let (gen_assign_var_expr : Soc.t -> Soc.var_expr -> Soc.var_expr -> string) =
 fun soc vi vo -> 
@@ -128,4 +128,66 @@ let (gen_step_call : Soc.t -> Soc.t -> Soc.var_expr list -> Soc.var_expr list ->
       (si_str ^ str ^ so_str)
 
 
+(****************************************************************************)
+open Data
+
+let rec (type_to_string : Data.t -> string -> string) = 
+  fun v n -> 
+    (* in order to print arrays of arrays type size in the good order, 
+       we accumulate the array size when v of of type array, and
+       we print it otherwise (finish).
+    *)
+    let rec finish acc str =
+      match acc with
+        |[] -> str
+        | s::ts -> Printf.sprintf "%s[%d]" (finish ts str) s 
+    in 
+    let rec aux acc v n =
+      match v with
+        | Bool -> finish acc ("_boolean "^n)
+        | Int -> finish acc ("_integer "^n)
+        | Real-> finish acc ("_real "^n)
+        | Extern s -> finish acc ((id2s s)^" "^n)
+        | Enum  (s, sl) -> finish acc (id2s s ^" "^n)
+        | Struct (sid,_) -> finish acc ((id2s sid)^" "^n)
+        | Array (ty, sz) -> aux (sz::acc) ty n
+        | Alpha nb -> finish acc ("alpha_"^(string_of_int nb)^" "^n) 
+        | Alias(a,_) -> finish acc (a^" "^n)
+    in
+    aux [] v n
+
+
+let rec (lic_type_to_c: Lic.type_  -> string -> string) =
+  fun t n -> 
+    match t with
+      | Lic.Struct_type_eff (name, fl) ->
+        let field_to_c (id,(tf,_opt)) = 
+          Printf.sprintf "\n   %s;" (type_to_string (Lic2soc.lic_to_data_type tf) (id2s id)) 
+        in
+        ((Printf.sprintf "struct { %s\n  }" 
+            (String.concat "" (List.map field_to_c fl)))^ " " ^ n) 
+      | Enum_type_eff (name, l) -> "_integer"^ " " ^ n              
+      | _ -> type_to_string (Lic2soc.lic_to_data_type t) n
+
+
+let rec (lic_type_to_c_old: Lic.type_  -> string -> string) =
+  fun t n -> match t with
+    | Bool_type_eff -> "_boolean"^ " " ^ n
+    | Int_type_eff  -> "_integer"^ " " ^ n
+    | Real_type_eff -> "_real"^ " " ^ n
+    | External_type_eff (name) -> (long2s name)^ " " ^ n
+    | Abstract_type_eff (name, t) -> lic_type_to_c t n
+    | Enum_type_eff (name, l) -> "_integer"^ " " ^ n
+    | Array_type_eff (ty, sz) -> 
+      Printf.sprintf "%s %s[%d]" (lic_type_to_c ty "") n sz
+    | Struct_type_eff (name, fl) ->
+      let field_to_c (id,(tf,_opt)) = 
+        Printf.sprintf "  %s %s;\n" (lic_type_to_c tf "")  (id2s id)
+      in
+      (Printf.sprintf "struct %s { %s }" 
+        (long2s name) 
+        (String.concat "" (List.map field_to_c fl)))^ " " ^ n
+    | TypeVar Any -> assert false
+    | (TypeVar AnyNum) -> assert false
+
 
diff --git a/test/Makefile b/test/Makefile
index d5b8b3a5e934c191e8b89244005db3c9aae59418..f49d8db6b523e3e571d5acfc52f9fe4511b2bdc1 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -15,7 +15,7 @@ ltop:
 
 
 copy_extern:
-	cp extern_files/* .
+	cp -f extern_files/* .
 
 testdir=$(shell pwd)
 
diff --git a/test/lus2lic.sum b/test/lus2lic.sum
index edd17412b717413d86aaf4321e70aeffe392814d..4a560434a1088ab4799f32775dd83b57e69c3e2b 100644
--- a/test/lus2lic.sum
+++ b/test/lus2lic.sum
@@ -1,4 +1,4 @@
-Test Run By jahier on Mon Jul  7 11:37:24 2014
+Test Run By jahier on Wed Jul  9 12:54:34 2014
 Native configuration is i686-pc-linux-gnu
 
 		=== lus2lic tests ===
@@ -14,205 +14,205 @@ PASS: ./lus2lic {-ec -o /tmp/nc6.ec should_work/nc6.lus}
 PASS: ./myec2c {-o /tmp/nc6.c /tmp/nc6.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc6.lus
 PASS: ./lus2lic {-2c should_work/nc6.lus -n nc6}
-PASS: gcc nc6_nc6.c nc6_nc6_loop.c 
+PASS: gcc nc6_nc6.c nc6_nc6_ext.c nc6_nc6_loop.c 
 PASS: ./lus2lic {-o /tmp/argos.lic should_work/argos.lus}
 PASS: ./lus2lic {-ec -o /tmp/argos.ec should_work/argos.lus}
 PASS: ./myec2c {-o /tmp/argos.c /tmp/argos.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/argos.lus
 PASS: ./lus2lic {-2c should_work/argos.lus -n argos}
-PASS: gcc argos_argos.c argos_argos_loop.c 
+PASS: gcc argos_argos.c argos_argos_ext.c argos_argos_loop.c 
 PASS: ./lus2lic {-o /tmp/ck5.lic should_work/ck5.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck5.ec should_work/ck5.lus}
 PASS: ./myec2c {-o /tmp/ck5.c /tmp/ck5.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ck5.lus
 PASS: ./lus2lic {-2c should_work/ck5.lus -n ck5}
-PASS: gcc ck5_ck5.c ck5_ck5_loop.c 
+PASS: gcc ck5_ck5.c ck5_ck5_ext.c ck5_ck5_loop.c 
 PASS: ./lus2lic {-o /tmp/normal.lic should_work/normal.lus}
 PASS: ./lus2lic {-ec -o /tmp/normal.ec should_work/normal.lus}
 PASS: ./myec2c {-o /tmp/normal.c /tmp/normal.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/normal.lus
 PASS: ./lus2lic {-2c should_work/normal.lus -n normal}
-PASS: gcc normal_normal.c normal_normal_loop.c 
+PASS: gcc normal_normal.c normal_normal_ext.c normal_normal_loop.c 
 PASS: ./lus2lic {-o /tmp/nodeparam.lic should_work/nodeparam.lus}
 PASS: ./lus2lic {-ec -o /tmp/nodeparam.ec should_work/nodeparam.lus}
 PASS: ./myec2c {-o /tmp/nodeparam.c /tmp/nodeparam.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nodeparam.lus
 PASS: ./lus2lic {-2c should_work/nodeparam.lus -n nodeparam}
-PASS: gcc nodeparam_nodeparam.c nodeparam_nodeparam_loop.c 
+PASS: gcc nodeparam_nodeparam.c nodeparam_nodeparam_ext.c nodeparam_nodeparam_loop.c 
 PASS: ./lus2lic {-o /tmp/enum0.lic should_work/enum0.lus}
 PASS: ./lus2lic {-ec -o /tmp/enum0.ec should_work/enum0.lus}
 PASS: ./myec2c {-o /tmp/enum0.c /tmp/enum0.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/enum0.lus
 PASS: ./lus2lic {-2c should_work/enum0.lus -n enum0}
-PASS: gcc enum0_enum0.c enum0_enum0_loop.c 
+PASS: gcc enum0_enum0.c enum0_enum0_ext.c enum0_enum0_loop.c 
 PASS: ./lus2lic {-o /tmp/ck6.lic should_work/ck6.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck6.ec should_work/ck6.lus}
 PASS: ./myec2c {-o /tmp/ck6.c /tmp/ck6.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/ck6.lus
 PASS: ./lus2lic {-2c should_work/ck6.lus -n ck6}
-FAIL: Check that the generated C code compiles  : gcc ck6_ck6.c ck6_ck6_loop.c 
+PASS: gcc ck6_ck6.c ck6_ck6_ext.c ck6_ck6_loop.c 
 PASS: ./lus2lic {-o /tmp/Gyroscope2.lic should_work/Gyroscope2.lus}
 PASS: ./lus2lic {-ec -o /tmp/Gyroscope2.ec should_work/Gyroscope2.lus}
 PASS: ./myec2c {-o /tmp/Gyroscope2.c /tmp/Gyroscope2.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/Gyroscope2.lus
 PASS: ./lus2lic {-2c should_work/Gyroscope2.lus -n Gyroscope2}
-PASS: gcc Gyroscope2_Gyroscope2.c Gyroscope2_Gyroscope2_loop.c 
+PASS: gcc Gyroscope2_Gyroscope2.c Gyroscope2_Gyroscope2_ext.c Gyroscope2_Gyroscope2_loop.c 
 PASS: ./lus2lic {-o /tmp/mouse2.lic should_work/mouse2.lus}
 PASS: ./lus2lic {-ec -o /tmp/mouse2.ec should_work/mouse2.lus}
 PASS: ./myec2c {-o /tmp/mouse2.c /tmp/mouse2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mouse2.lus
 PASS: ./lus2lic {-2c should_work/mouse2.lus -n mouse2}
-PASS: gcc mouse2_mouse2.c mouse2_mouse2_loop.c 
+PASS: gcc mouse2_mouse2.c mouse2_mouse2_ext.c mouse2_mouse2_loop.c 
 PASS: ./lus2lic {-o /tmp/dep.lic should_work/dep.lus}
 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}
-PASS: gcc dep_dep.c dep_dep_loop.c 
+PASS: gcc dep_dep.c dep_dep_ext.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}
 PASS: ../utils/test_lus2lic_no_node should_work/ELMU.lus
 PASS: ./lus2lic {-2c should_work/ELMU.lus -n ELMU}
-PASS: gcc ELMU_ELMU.c ELMU_ELMU_loop.c 
+PASS: gcc ELMU_ELMU.c ELMU_ELMU_ext.c ELMU_ELMU_loop.c 
 PASS: ./lus2lic {-o /tmp/testPilote.lic should_work/testPilote.lus}
 PASS: ./lus2lic {-ec -o /tmp/testPilote.ec should_work/testPilote.lus}
 PASS: ./myec2c {-o /tmp/testPilote.c /tmp/testPilote.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/testPilote.lus
 PASS: ./lus2lic {-2c should_work/testPilote.lus -n testPilote}
-PASS: gcc testPilote_testPilote.c testPilote_testPilote_loop.c 
+PASS: gcc testPilote_testPilote.c testPilote_testPilote_ext.c testPilote_testPilote_loop.c 
 PASS: ./lus2lic {-o /tmp/redIf.lic should_work/redIf.lus}
 PASS: ./lus2lic {-ec -o /tmp/redIf.ec should_work/redIf.lus}
 PASS: ./myec2c {-o /tmp/redIf.c /tmp/redIf.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/redIf.lus
 PASS: ./lus2lic {-2c should_work/redIf.lus -n redIf}
-PASS: gcc redIf_redIf.c redIf_redIf_loop.c 
+PASS: gcc redIf_redIf.c redIf_redIf_ext.c redIf_redIf_loop.c 
 PASS: ./lus2lic {-o /tmp/t0.lic should_work/t0.lus}
 PASS: ./lus2lic {-ec -o /tmp/t0.ec should_work/t0.lus}
 PASS: ./myec2c {-o /tmp/t0.c /tmp/t0.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/t0.lus
 PASS: ./lus2lic {-2c should_work/t0.lus -n t0}
-PASS: gcc t0_t0.c t0_t0_loop.c 
+PASS: gcc t0_t0.c t0_t0_ext.c t0_t0_loop.c 
 PASS: ./lus2lic {-o /tmp/lucky.lic should_work/lucky.lus}
 PASS: ./lus2lic {-ec -o /tmp/lucky.ec should_work/lucky.lus}
 PASS: ./myec2c {-o /tmp/lucky.c /tmp/lucky.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/lucky.lus
 PASS: ./lus2lic {-2c should_work/lucky.lus -n lucky}
-PASS: gcc lucky_lucky.c lucky_lucky_loop.c 
+PASS: gcc lucky_lucky.c lucky_lucky_ext.c lucky_lucky_loop.c 
 PASS: ./lus2lic {-o /tmp/heater_control.lic should_work/heater_control.lus}
 PASS: ./lus2lic {-ec -o /tmp/heater_control.ec should_work/heater_control.lus}
 PASS: ./myec2c {-o /tmp/heater_control.c /tmp/heater_control.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/heater_control.lus
 PASS: ./lus2lic {-2c should_work/heater_control.lus -n heater_control}
-PASS: gcc heater_control_heater_control.c heater_control_heater_control_loop.c 
+PASS: gcc heater_control_heater_control.c heater_control_heater_control_ext.c heater_control_heater_control_loop.c 
 PASS: ./lus2lic {-o /tmp/titi.lic should_work/titi.lus}
 PASS: ./lus2lic {-ec -o /tmp/titi.ec should_work/titi.lus}
 PASS: ./myec2c {-o /tmp/titi.c /tmp/titi.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/titi.lus
 PASS: ./lus2lic {-2c should_work/titi.lus -n titi}
-PASS: gcc titi_titi.c titi_titi_loop.c 
+PASS: gcc titi_titi.c titi_titi_ext.c titi_titi_loop.c 
 PASS: ./lus2lic {-o /tmp/cminus.lic should_work/cminus.lus}
 PASS: ./lus2lic {-ec -o /tmp/cminus.ec should_work/cminus.lus}
 PASS: ./myec2c {-o /tmp/cminus.c /tmp/cminus.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/cminus.lus
 PASS: ./lus2lic {-2c should_work/cminus.lus -n cminus}
-PASS: gcc cminus_cminus.c cminus_cminus_loop.c 
+PASS: gcc cminus_cminus.c cminus_cminus_ext.c cminus_cminus_loop.c 
 PASS: ./lus2lic {-o /tmp/rs.lic should_work/rs.lus}
 PASS: ./lus2lic {-ec -o /tmp/rs.ec should_work/rs.lus}
 PASS: ./myec2c {-o /tmp/rs.c /tmp/rs.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/rs.lus
 PASS: ./lus2lic {-2c should_work/rs.lus -n rs}
-PASS: gcc rs_rs.c rs_rs_loop.c 
+PASS: gcc rs_rs.c rs_rs_ext.c rs_rs_loop.c 
 PASS: ./lus2lic {-o /tmp/access.lic should_work/access.lus}
 PASS: ./lus2lic {-ec -o /tmp/access.ec should_work/access.lus}
 PASS: ./myec2c {-o /tmp/access.c /tmp/access.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/access.lus
 PASS: ./lus2lic {-2c should_work/access.lus -n access}
-PASS: gcc access_access.c access_access_loop.c 
+PASS: gcc access_access.c access_access_ext.c access_access_loop.c 
 PASS: ./lus2lic {-o /tmp/consensus2.lic should_work/consensus2.lus}
 PASS: ./lus2lic {-ec -o /tmp/consensus2.ec should_work/consensus2.lus}
 PASS: ./myec2c {-o /tmp/consensus2.c /tmp/consensus2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/consensus2.lus
 PASS: ./lus2lic {-2c should_work/consensus2.lus -n consensus2}
-PASS: gcc consensus2_consensus2.c consensus2_consensus2_loop.c 
+PASS: gcc consensus2_consensus2.c consensus2_consensus2_ext.c consensus2_consensus2_loop.c 
 PASS: ./lus2lic {-o /tmp/dependeur.lic should_work/dependeur.lus}
 PASS: ./lus2lic {-ec -o /tmp/dependeur.ec should_work/dependeur.lus}
 PASS: ./myec2c {-o /tmp/dependeur.c /tmp/dependeur.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/dependeur.lus
 PASS: ./lus2lic {-2c should_work/dependeur.lus -n dependeur}
-PASS: gcc dependeur_dependeur.c dependeur_dependeur_loop.c 
+PASS: gcc dependeur_dependeur.c dependeur_dependeur_ext.c dependeur_dependeur_loop.c 
 PASS: ./lus2lic {-o /tmp/mappredef.lic should_work/mappredef.lus}
 PASS: ./lus2lic {-ec -o /tmp/mappredef.ec should_work/mappredef.lus}
 PASS: ./myec2c {-o /tmp/mappredef.c /tmp/mappredef.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mappredef.lus
 PASS: ./lus2lic {-2c should_work/mappredef.lus -n mappredef}
-PASS: gcc mappredef_mappredef.c mappredef_mappredef_loop.c 
+PASS: gcc mappredef_mappredef.c mappredef_mappredef_ext.c mappredef_mappredef_loop.c 
 PASS: ./lus2lic {-o /tmp/call06.lic should_work/call06.lus}
 PASS: ./lus2lic {-ec -o /tmp/call06.ec should_work/call06.lus}
 PASS: ./myec2c {-o /tmp/call06.c /tmp/call06.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/call06.lus
 PASS: ./lus2lic {-2c should_work/call06.lus -n call06}
-FAIL: Check that the generated C code compiles  : gcc call06_call06.c call06_call06_loop.c 
+PASS: gcc call06_call06.c call06_call06_ext.c call06_call06_loop.c 
 PASS: ./lus2lic {-o /tmp/deSimone.lic should_work/deSimone.lus}
 PASS: ./lus2lic {-ec -o /tmp/deSimone.ec should_work/deSimone.lus}
 PASS: ./myec2c {-o /tmp/deSimone.c /tmp/deSimone.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/deSimone.lus
 PASS: ./lus2lic {-2c should_work/deSimone.lus -n deSimone}
-PASS: gcc deSimone_deSimone.c deSimone_deSimone_loop.c 
+PASS: gcc deSimone_deSimone.c deSimone_deSimone_ext.c deSimone_deSimone_loop.c 
 PASS: ./lus2lic {-o /tmp/bug2.lic should_work/bug2.lus}
 PASS: ./lus2lic {-ec -o /tmp/bug2.ec should_work/bug2.lus}
 PASS: ./myec2c {-o /tmp/bug2.c /tmp/bug2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/bug2.lus
 PASS: ./lus2lic {-2c should_work/bug2.lus -n bug2}
-PASS: gcc bug2_bug2.c bug2_bug2_loop.c 
+PASS: gcc bug2_bug2.c bug2_bug2_ext.c bug2_bug2_loop.c 
 PASS: ./lus2lic {-o /tmp/mm.lic should_work/mm.lus}
 PASS: ./lus2lic {-ec -o /tmp/mm.ec should_work/mm.lus}
 PASS: ./myec2c {-o /tmp/mm.c /tmp/mm.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mm.lus
 PASS: ./lus2lic {-2c should_work/mm.lus -n mm}
-PASS: gcc mm_mm.c mm_mm_loop.c 
+PASS: gcc mm_mm.c mm_mm_ext.c mm_mm_loop.c 
 PASS: ./lus2lic {-o /tmp/yyy.lic should_work/yyy.lus}
 PASS: ./lus2lic {-ec -o /tmp/yyy.ec should_work/yyy.lus}
 PASS: ./myec2c {-o /tmp/yyy.c /tmp/yyy.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/yyy.lus
 PASS: ./lus2lic {-2c should_work/yyy.lus -n yyy}
-PASS: gcc yyy_yyy.c yyy_yyy_loop.c 
+PASS: gcc yyy_yyy.c yyy_yyy_ext.c yyy_yyy_loop.c 
 PASS: ./lus2lic {-o /tmp/toolate.lic should_work/toolate.lus}
 PASS: ./lus2lic {-ec -o /tmp/toolate.ec should_work/toolate.lus}
 PASS: ./myec2c {-o /tmp/toolate.c /tmp/toolate.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/toolate.lus
 PASS: ./lus2lic {-2c should_work/toolate.lus -n toolate}
-PASS: gcc toolate_toolate.c toolate_toolate_loop.c 
+PASS: gcc toolate_toolate.c toolate_toolate_ext.c toolate_toolate_loop.c 
 PASS: ./lus2lic {-o /tmp/testCapt.lic should_work/testCapt.lus}
 PASS: ./lus2lic {-ec -o /tmp/testCapt.ec should_work/testCapt.lus}
 PASS: ./myec2c {-o /tmp/testCapt.c /tmp/testCapt.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/testCapt.lus
 PASS: ./lus2lic {-2c should_work/testCapt.lus -n testCapt}
-PASS: gcc testCapt_testCapt.c testCapt_testCapt_loop.c 
+PASS: gcc testCapt_testCapt.c testCapt_testCapt_ext.c testCapt_testCapt_loop.c 
 PASS: ./lus2lic {-o /tmp/nc7.lic should_work/nc7.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc7.ec should_work/nc7.lus}
 PASS: ./myec2c {-o /tmp/nc7.c /tmp/nc7.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc7.lus
 PASS: ./lus2lic {-2c should_work/nc7.lus -n nc7}
-PASS: gcc nc7_nc7.c nc7_nc7_loop.c 
+PASS: gcc nc7_nc7.c nc7_nc7_ext.c nc7_nc7_loop.c 
 PASS: ./lus2lic {-o /tmp/predefOp.lic should_work/predefOp.lus}
 PASS: ./lus2lic {-ec -o /tmp/predefOp.ec should_work/predefOp.lus}
 PASS: ./myec2c {-o /tmp/predefOp.c /tmp/predefOp.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/predefOp.lus
 PASS: ./lus2lic {-2c should_work/predefOp.lus -n predefOp}
-PASS: gcc predefOp_predefOp.c predefOp_predefOp_loop.c 
+PASS: gcc predefOp_predefOp.c predefOp_predefOp_ext.c predefOp_predefOp_loop.c 
 PASS: ./lus2lic {-o /tmp/t1.lic should_work/t1.lus}
 PASS: ./lus2lic {-ec -o /tmp/t1.ec should_work/t1.lus}
 PASS: ./myec2c {-o /tmp/t1.c /tmp/t1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/t1.lus
 PASS: ./lus2lic {-2c should_work/t1.lus -n t1}
-PASS: gcc t1_t1.c t1_t1_loop.c 
+PASS: gcc t1_t1.c t1_t1_ext.c t1_t1_loop.c 
 PASS: ./lus2lic {-o /tmp/nc9.lic should_work/nc9.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc9.ec should_work/nc9.lus}
 PASS: ./myec2c {-o /tmp/nc9.c /tmp/nc9.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc9.lus
 PASS: ./lus2lic {-2c should_work/nc9.lus -n nc9}
-PASS: gcc nc9_nc9.c nc9_nc9_loop.c 
+PASS: gcc nc9_nc9.c nc9_nc9_ext.c nc9_nc9_loop.c 
 PASS: ./lus2lic {-o /tmp/packageTableau.lic should_work/packageTableau.lus}
 PASS: ./lus2lic {-ec -o /tmp/packageTableau.ec should_work/packageTableau.lus}
 PASS: ./myec2c {-o /tmp/packageTableau.c /tmp/packageTableau.ec}
@@ -223,49 +223,49 @@ PASS: ./lus2lic {-ec -o /tmp/test_poly.ec should_work/test_poly.lus}
 PASS: ./myec2c {-o /tmp/test_poly.c /tmp/test_poly.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/test_poly.lus
 PASS: ./lus2lic {-2c should_work/test_poly.lus -n test_poly}
-PASS: gcc test_poly_test_poly.c test_poly_test_poly_loop.c 
+PASS: gcc test_poly_test_poly.c test_poly_test_poly_ext.c test_poly_test_poly_loop.c 
 PASS: ./lus2lic {-o /tmp/nc8.lic should_work/nc8.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc8.ec should_work/nc8.lus}
 PASS: ./myec2c {-o /tmp/nc8.c /tmp/nc8.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc8.lus
 PASS: ./lus2lic {-2c should_work/nc8.lus -n nc8}
-PASS: gcc nc8_nc8.c nc8_nc8_loop.c 
+PASS: gcc nc8_nc8.c nc8_nc8_ext.c nc8_nc8_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax5.lic should_work/minmax5.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax5.ec should_work/minmax5.lus}
 PASS: ./myec2c {-o /tmp/minmax5.c /tmp/minmax5.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/minmax5.lus
 PASS: ./lus2lic {-2c should_work/minmax5.lus -n minmax5}
-FAIL: Check that the generated C code compiles  : gcc minmax5_minmax5.c minmax5_minmax5_loop.c 
+PASS: gcc minmax5_minmax5.c minmax5_minmax5_ext.c minmax5_minmax5_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/mm1.lus -n mm1}
-PASS: gcc mm1_mm1.c mm1_mm1_loop.c 
+PASS: gcc mm1_mm1.c mm1_mm1_ext.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}
 PASS: ./myec2c {-o /tmp/predef03.c /tmp/predef03.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/predef03.lus
 PASS: ./lus2lic {-2c should_work/predef03.lus -n predef03}
-PASS: gcc predef03_predef03.c predef03_predef03_loop.c 
+PASS: gcc predef03_predef03.c predef03_predef03_ext.c predef03_predef03_loop.c 
 PASS: ./lus2lic {-o /tmp/iter.lic should_work/iter.lus}
 PASS: ./lus2lic {-ec -o /tmp/iter.ec should_work/iter.lus}
 PASS: ./myec2c {-o /tmp/iter.c /tmp/iter.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/iter.lus
 PASS: ./lus2lic {-2c should_work/iter.lus -n iter}
-PASS: gcc iter_iter.c iter_iter_loop.c 
+PASS: gcc iter_iter.c iter_iter_ext.c iter_iter_loop.c 
 PASS: ./lus2lic {-o /tmp/call05.lic should_work/call05.lus}
 PASS: ./lus2lic {-ec -o /tmp/call05.ec should_work/call05.lus}
 PASS: ./myec2c {-o /tmp/call05.c /tmp/call05.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/call05.lus
 PASS: ./lus2lic {-2c should_work/call05.lus -n call05}
-FAIL: Check that the generated C code compiles  : gcc call05_call05.c call05_call05_loop.c 
+PASS: gcc call05_call05.c call05_call05_ext.c call05_call05_loop.c 
 PASS: ./lus2lic {-o /tmp/Watch.lic should_work/Watch.lus}
 PASS: ./lus2lic {-ec -o /tmp/Watch.ec should_work/Watch.lus}
 PASS: ./myec2c {-o /tmp/Watch.c /tmp/Watch.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/Watch.lus
 PASS: ./lus2lic {-2c should_work/Watch.lus -n Watch}
-FAIL: Check that the generated C code compiles  : gcc Watch_Watch.c Watch_Watch_loop.c 
+PASS: gcc Watch_Watch.c Watch_Watch_ext.c Watch_Watch_loop.c 
 PASS: ./lus2lic {-o /tmp/testBoite.lic should_work/testBoite.lus}
 PASS: ./lus2lic {-ec -o /tmp/testBoite.ec should_work/testBoite.lus}
 PASS: ./myec2c {-o /tmp/testBoite.c /tmp/testBoite.ec}
@@ -276,97 +276,97 @@ PASS: ./lus2lic {-ec -o /tmp/node_caller1.ec should_work/node_caller1.lus}
 PASS: ./myec2c {-o /tmp/node_caller1.c /tmp/node_caller1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/node_caller1.lus
 PASS: ./lus2lic {-2c should_work/node_caller1.lus -n node_caller1}
-PASS: gcc node_caller1_node_caller1.c node_caller1_node_caller1_loop.c 
+PASS: gcc node_caller1_node_caller1.c node_caller1_node_caller1_ext.c node_caller1_node_caller1_loop.c 
 PASS: ./lus2lic {-o /tmp/nc1.lic should_work/nc1.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc1.ec should_work/nc1.lus}
 PASS: ./myec2c {-o /tmp/nc1.c /tmp/nc1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc1.lus
 PASS: ./lus2lic {-2c should_work/nc1.lus -n nc1}
-PASS: gcc nc1_nc1.c nc1_nc1_loop.c 
+PASS: gcc nc1_nc1.c nc1_nc1_ext.c nc1_nc1_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/test_node_expand2.lus -n test_node_expand2}
-PASS: gcc test_node_expand2_test_node_expand2.c test_node_expand2_test_node_expand2_loop.c 
+PASS: gcc test_node_expand2_test_node_expand2.c test_node_expand2_test_node_expand2_ext.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}
 PASS: ./myec2c {-o /tmp/test.c /tmp/test.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/test.lus
 PASS: ./lus2lic {-2c should_work/test.lus -n test}
-PASS: gcc test_test.c test_test_loop.c 
+PASS: gcc test_test.c test_test_ext.c test_test_loop.c 
 PASS: ./lus2lic {-o /tmp/FALLING_EDGE.lic should_work/FALLING_EDGE.lus}
 PASS: ./lus2lic {-ec -o /tmp/FALLING_EDGE.ec should_work/FALLING_EDGE.lus}
 PASS: ./myec2c {-o /tmp/FALLING_EDGE.c /tmp/FALLING_EDGE.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/FALLING_EDGE.lus
 PASS: ./lus2lic {-2c should_work/FALLING_EDGE.lus -n FALLING_EDGE}
-PASS: gcc FALLING_EDGE_FALLING_EDGE.c FALLING_EDGE_FALLING_EDGE_loop.c 
+PASS: gcc FALLING_EDGE_FALLING_EDGE.c FALLING_EDGE_FALLING_EDGE_ext.c FALLING_EDGE_FALLING_EDGE_loop.c 
 PASS: ./lus2lic {-o /tmp/SWITCH.lic should_work/SWITCH.lus}
 PASS: ./lus2lic {-ec -o /tmp/SWITCH.ec should_work/SWITCH.lus}
 PASS: ./myec2c {-o /tmp/SWITCH.c /tmp/SWITCH.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/SWITCH.lus
 PASS: ./lus2lic {-2c should_work/SWITCH.lus -n SWITCH}
-PASS: gcc SWITCH_SWITCH.c SWITCH_SWITCH_loop.c 
+PASS: gcc SWITCH_SWITCH.c SWITCH_SWITCH_ext.c SWITCH_SWITCH_loop.c 
 PASS: ./lus2lic {-o /tmp/cst.lic should_work/cst.lus}
 PASS: ./lus2lic {-ec -o /tmp/cst.ec should_work/cst.lus}
 PASS: ./myec2c {-o /tmp/cst.c /tmp/cst.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/cst.lus
 PASS: ./lus2lic {-2c should_work/cst.lus -n cst}
-PASS: gcc cst_cst.c cst_cst_loop.c 
+PASS: gcc cst_cst.c cst_cst_ext.c cst_cst_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax5_random.lic should_work/minmax5_random.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax5_random.ec should_work/minmax5_random.lus}
 PASS: ./myec2c {-o /tmp/minmax5_random.c /tmp/minmax5_random.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/minmax5_random.lus
 PASS: ./lus2lic {-2c should_work/minmax5_random.lus -n minmax5_random}
-FAIL: Check that the generated C code compiles  : gcc minmax5_random_minmax5_random.c minmax5_random_minmax5_random_loop.c 
+PASS: gcc minmax5_random_minmax5_random.c minmax5_random_minmax5_random_ext.c minmax5_random_minmax5_random_loop.c 
 PASS: ./lus2lic {-o /tmp/matrice2.lic should_work/matrice2.lus}
 PASS: ./lus2lic {-ec -o /tmp/matrice2.ec should_work/matrice2.lus}
 PASS: ./myec2c {-o /tmp/matrice2.c /tmp/matrice2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/matrice2.lus
 PASS: ./lus2lic {-2c should_work/matrice2.lus -n matrice2}
-PASS: gcc matrice2_matrice2.c matrice2_matrice2_loop.c 
+PASS: gcc matrice2_matrice2.c matrice2_matrice2_ext.c matrice2_matrice2_loop.c 
 PASS: ./lus2lic {-o /tmp/v1.lic should_work/v1.lus}
 PASS: ./lus2lic {-ec -o /tmp/v1.ec should_work/v1.lus}
 PASS: ./myec2c {-o /tmp/v1.c /tmp/v1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/v1.lus
 PASS: ./lus2lic {-2c should_work/v1.lus -n v1}
-PASS: gcc v1_v1.c v1_v1_loop.c 
+PASS: gcc v1_v1.c v1_v1_ext.c v1_v1_loop.c 
 PASS: ./lus2lic {-o /tmp/call04.lic should_work/call04.lus}
 PASS: ./lus2lic {-ec -o /tmp/call04.ec should_work/call04.lus}
 PASS: ./myec2c {-o /tmp/call04.c /tmp/call04.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/call04.lus
 PASS: ./lus2lic {-2c should_work/call04.lus -n call04}
-PASS: gcc call04_call04.c call04_call04_loop.c 
+PASS: gcc call04_call04.c call04_call04_ext.c call04_call04_loop.c 
 PASS: ./lus2lic {-o /tmp/bascule.lic should_work/bascule.lus}
 PASS: ./lus2lic {-ec -o /tmp/bascule.ec should_work/bascule.lus}
 PASS: ./myec2c {-o /tmp/bascule.c /tmp/bascule.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/bascule.lus
 PASS: ./lus2lic {-2c should_work/bascule.lus -n bascule}
-PASS: gcc bascule_bascule.c bascule_bascule_loop.c 
+PASS: gcc bascule_bascule.c bascule_bascule_ext.c bascule_bascule_loop.c 
 PASS: ./lus2lic {-o /tmp/double_delay.lic should_work/double_delay.lus}
 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}
-PASS: gcc double_delay_double_delay.c double_delay_double_delay_loop.c 
+PASS: gcc double_delay_double_delay.c double_delay_double_delay_ext.c double_delay_double_delay_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/struct_with.lus -n struct_with}
-PASS: gcc struct_with_struct_with.c struct_with_struct_with_loop.c 
+PASS: gcc struct_with_struct_with.c struct_with_struct_with_ext.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}
 PASS: ./myec2c {-o /tmp/test_node_expand.c /tmp/test_node_expand.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/test_node_expand.lus
 PASS: ./lus2lic {-2c should_work/test_node_expand.lus -n test_node_expand}
-PASS: gcc test_node_expand_test_node_expand.c test_node_expand_test_node_expand_loop.c 
+PASS: gcc test_node_expand_test_node_expand.c test_node_expand_test_node_expand_ext.c test_node_expand_test_node_expand_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/mm22.lus -n mm22}
-PASS: gcc mm22_mm22.c mm22_mm22_loop.c 
+PASS: gcc mm22_mm22.c mm22_mm22_ext.c mm22_mm22_loop.c 
 PASS: ./lus2lic {-o /tmp/array_concat2.lic should_work/array_concat2.lus}
 PASS: ./lus2lic {-ec -o /tmp/array_concat2.ec should_work/array_concat2.lus}
 FAIL: Try ec2c on the result: ./myec2c {-o /tmp/array_concat2.c /tmp/array_concat2.ec}
@@ -375,7 +375,7 @@ PASS: ./lus2lic {-ec -o /tmp/is_stable.ec should_work/is_stable.lus}
 PASS: ./myec2c {-o /tmp/is_stable.c /tmp/is_stable.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/is_stable.lus
 PASS: ./lus2lic {-2c should_work/is_stable.lus -n is_stable}
-PASS: gcc is_stable_is_stable.c is_stable_is_stable_loop.c 
+PASS: gcc is_stable_is_stable.c is_stable_is_stable_ext.c is_stable_is_stable_loop.c 
 PASS: ./lus2lic {-o /tmp/test_clash.lic should_work/test_clash.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_clash.ec should_work/test_clash.lus}
 PASS: ./myec2c {-o /tmp/test_clash.c /tmp/test_clash.ec}
@@ -391,7 +391,7 @@ PASS: ./lus2lic {-ec -o /tmp/onlyroll2.ec should_work/onlyroll2.lus}
 PASS: ./myec2c {-o /tmp/onlyroll2.c /tmp/onlyroll2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/onlyroll2.lus
 PASS: ./lus2lic {-2c should_work/onlyroll2.lus -n onlyroll2}
-PASS: gcc onlyroll2_onlyroll2.c onlyroll2_onlyroll2_loop.c 
+PASS: gcc onlyroll2_onlyroll2.c onlyroll2_onlyroll2_ext.c onlyroll2_onlyroll2_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}
@@ -402,13 +402,13 @@ PASS: ./lus2lic {-ec -o /tmp/X6.ec should_work/X6.lus}
 PASS: ./myec2c {-o /tmp/X6.c /tmp/X6.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/X6.lus
 PASS: ./lus2lic {-2c should_work/X6.lus -n X6}
-PASS: gcc X6_X6.c X6_X6_loop.c 
+PASS: gcc X6_X6.c X6_X6_ext.c X6_X6_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/zzz2.lus -n zzz2}
-PASS: gcc zzz2_zzz2.c zzz2_zzz2_loop.c 
+PASS: gcc zzz2_zzz2.c zzz2_zzz2_ext.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}
 PASS: ./myec2c {-o /tmp/polymorphic_pack.c /tmp/polymorphic_pack.ec}
@@ -419,13 +419,13 @@ PASS: ./lus2lic {-ec -o /tmp/COUNTER.ec should_work/COUNTER.lus}
 PASS: ./myec2c {-o /tmp/COUNTER.c /tmp/COUNTER.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/COUNTER.lus
 PASS: ./lus2lic {-2c should_work/COUNTER.lus -n COUNTER}
-PASS: gcc COUNTER_COUNTER.c COUNTER_COUNTER_loop.c 
+PASS: gcc COUNTER_COUNTER.c COUNTER_COUNTER_ext.c COUNTER_COUNTER_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax3.lic should_work/minmax3.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax3.ec should_work/minmax3.lus}
 PASS: ./myec2c {-o /tmp/minmax3.c /tmp/minmax3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minmax3.lus
 PASS: ./lus2lic {-2c should_work/minmax3.lus -n minmax3}
-PASS: gcc minmax3_minmax3.c minmax3_minmax3_loop.c 
+PASS: gcc minmax3_minmax3.c minmax3_minmax3_ext.c minmax3_minmax3_loop.c 
 PASS: ./lus2lic {-o /tmp/filter.lic should_work/filter.lus}
 PASS: ./lus2lic {-ec -o /tmp/filter.ec should_work/filter.lus}
 PASS: ./myec2c {-o /tmp/filter.c /tmp/filter.ec}
@@ -436,61 +436,61 @@ PASS: ./lus2lic {-ec -o /tmp/ec.ec should_work/ec.lus}
 PASS: ./myec2c {-o /tmp/ec.c /tmp/ec.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ec.lus
 PASS: ./lus2lic {-2c should_work/ec.lus -n ec}
-PASS: gcc ec_ec.c ec_ec_loop.c 
+PASS: gcc ec_ec.c ec_ec_ext.c ec_ec_loop.c 
 PASS: ./lus2lic {-o /tmp/morel3.lic should_work/morel3.lus}
 PASS: ./lus2lic {-ec -o /tmp/morel3.ec should_work/morel3.lus}
 PASS: ./myec2c {-o /tmp/morel3.c /tmp/morel3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/morel3.lus
 FAIL: Generate c code  : ./lus2lic {-2c should_work/morel3.lus -n morel3}
-FAIL: Check that the generated C code compiles  : gcc morel3_morel3.c morel3_morel3_loop.c 
+FAIL: Check that the generated C code compiles  : gcc morel3_morel3.c morel3_morel3_ext.c morel3_morel3_loop.c 
 PASS: ./lus2lic {-o /tmp/fresh_name.lic should_work/fresh_name.lus}
 PASS: ./lus2lic {-ec -o /tmp/fresh_name.ec should_work/fresh_name.lus}
 PASS: ./myec2c {-o /tmp/fresh_name.c /tmp/fresh_name.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/fresh_name.lus
 PASS: ./lus2lic {-2c should_work/fresh_name.lus -n fresh_name}
-PASS: gcc fresh_name_fresh_name.c fresh_name_fresh_name_loop.c 
+PASS: gcc fresh_name_fresh_name.c fresh_name_fresh_name_ext.c fresh_name_fresh_name_loop.c 
 PASS: ./lus2lic {-o /tmp/ply03.lic should_work/ply03.lus}
 PASS: ./lus2lic {-ec -o /tmp/ply03.ec should_work/ply03.lus}
 PASS: ./myec2c {-o /tmp/ply03.c /tmp/ply03.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ply03.lus
 PASS: ./lus2lic {-2c should_work/ply03.lus -n ply03}
-PASS: gcc ply03_ply03.c ply03_ply03_loop.c 
+PASS: gcc ply03_ply03.c ply03_ply03_ext.c ply03_ply03_loop.c 
 PASS: ./lus2lic {-o /tmp/param_struct.lic should_work/param_struct.lus}
 PASS: ./lus2lic {-ec -o /tmp/param_struct.ec should_work/param_struct.lus}
 PASS: ./myec2c {-o /tmp/param_struct.c /tmp/param_struct.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/param_struct.lus
 PASS: ./lus2lic {-2c should_work/param_struct.lus -n param_struct}
-PASS: gcc param_struct_param_struct.c param_struct_param_struct_loop.c 
+PASS: gcc param_struct_param_struct.c param_struct_param_struct_ext.c param_struct_param_struct_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax2.lic should_work/minmax2.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax2.ec should_work/minmax2.lus}
 PASS: ./myec2c {-o /tmp/minmax2.c /tmp/minmax2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minmax2.lus
 PASS: ./lus2lic {-2c should_work/minmax2.lus -n minmax2}
-PASS: gcc minmax2_minmax2.c minmax2_minmax2_loop.c 
+PASS: gcc minmax2_minmax2.c minmax2_minmax2_ext.c minmax2_minmax2_loop.c 
 PASS: ./lus2lic {-o /tmp/plus.lic should_work/plus.lus}
 PASS: ./lus2lic {-ec -o /tmp/plus.ec should_work/plus.lus}
 PASS: ./myec2c {-o /tmp/plus.c /tmp/plus.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/plus.lus
 PASS: ./lus2lic {-2c should_work/plus.lus -n plus}
-PASS: gcc plus_plus.c plus_plus_loop.c 
+PASS: gcc plus_plus.c plus_plus_ext.c plus_plus_loop.c 
 PASS: ./lus2lic {-o /tmp/xx.lic should_work/xx.lus}
 PASS: ./lus2lic {-ec -o /tmp/xx.ec should_work/xx.lus}
 PASS: ./myec2c {-o /tmp/xx.c /tmp/xx.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/xx.lus
 PASS: ./lus2lic {-2c should_work/xx.lus -n xx}
-PASS: gcc xx_xx.c xx_xx_loop.c 
+PASS: gcc xx_xx.c xx_xx_ext.c xx_xx_loop.c 
 PASS: ./lus2lic {-o /tmp/call07.lic should_work/call07.lus}
 PASS: ./lus2lic {-ec -o /tmp/call07.ec should_work/call07.lus}
 PASS: ./myec2c {-o /tmp/call07.c /tmp/call07.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/call07.lus
 PASS: ./lus2lic {-2c should_work/call07.lus -n call07}
-PASS: gcc call07_call07.c call07_call07_loop.c 
+PASS: gcc call07_call07.c call07_call07_ext.c call07_call07_loop.c 
 PASS: ./lus2lic {-o /tmp/shift_ludic.lic should_work/shift_ludic.lus}
 PASS: ./lus2lic {-ec -o /tmp/shift_ludic.ec should_work/shift_ludic.lus}
 PASS: ./myec2c {-o /tmp/shift_ludic.c /tmp/shift_ludic.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/shift_ludic.lus
 PASS: ./lus2lic {-2c should_work/shift_ludic.lus -n shift_ludic}
-PASS: gcc shift_ludic_shift_ludic.c shift_ludic_shift_ludic_loop.c 
+PASS: gcc shift_ludic_shift_ludic.c shift_ludic_shift_ludic_ext.c shift_ludic_shift_ludic_loop.c 
 PASS: ./lus2lic {-o /tmp/pilote-1.0.lic should_work/pilote-1.0.lus}
 PASS: ./lus2lic {-ec -o /tmp/pilote-1.0.ec should_work/pilote-1.0.lus}
 PASS: ./myec2c {-o /tmp/pilote-1.0.c /tmp/pilote-1.0.ec}
@@ -501,7 +501,7 @@ PASS: ./lus2lic {-ec -o /tmp/trivial.ec should_work/trivial.lus}
 PASS: ./myec2c {-o /tmp/trivial.c /tmp/trivial.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/trivial.lus
 PASS: ./lus2lic {-2c should_work/trivial.lus -n trivial}
-PASS: gcc trivial_trivial.c trivial_trivial_loop.c 
+PASS: gcc trivial_trivial.c trivial_trivial_ext.c trivial_trivial_loop.c 
 PASS: ./lus2lic {-o /tmp/packs.lic should_work/packs.lus}
 PASS: ./lus2lic {-ec -o /tmp/packs.ec should_work/packs.lus}
 PASS: ./myec2c {-o /tmp/packs.c /tmp/packs.ec}
@@ -512,7 +512,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}
-PASS: gcc sincos_sincos.c sincos_sincos_loop.c 
+PASS: gcc sincos_sincos.c sincos_sincos_ext.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}
@@ -523,67 +523,67 @@ 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
 PASS: ./lus2lic {-2c should_work/morel5.lus -n morel5}
-PASS: gcc morel5_morel5.c morel5_morel5_loop.c 
+PASS: gcc morel5_morel5.c morel5_morel5_ext.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}
 PASS: ./myec2c {-o /tmp/bred.c /tmp/bred.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/bred.lus
 PASS: ./lus2lic {-2c should_work/bred.lus -n bred}
-PASS: gcc bred_bred.c bred_bred_loop.c 
+PASS: gcc bred_bred.c bred_bred_ext.c bred_bred_loop.c 
 PASS: ./lus2lic {-o /tmp/test_diese.lic should_work/test_diese.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_diese.ec should_work/test_diese.lus}
 PASS: ./myec2c {-o /tmp/test_diese.c /tmp/test_diese.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/test_diese.lus
 PASS: ./lus2lic {-2c should_work/test_diese.lus -n test_diese}
-PASS: gcc test_diese_test_diese.c test_diese_test_diese_loop.c 
+PASS: gcc test_diese_test_diese.c test_diese_test_diese_ext.c test_diese_test_diese_loop.c 
 PASS: ./lus2lic {-o /tmp/tri.lic should_work/tri.lus}
 PASS: ./lus2lic {-ec -o /tmp/tri.ec should_work/tri.lus}
 PASS: ./myec2c {-o /tmp/tri.c /tmp/tri.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/tri.lus
 PASS: ./lus2lic {-2c should_work/tri.lus -n tri}
-PASS: gcc tri_tri.c tri_tri_loop.c 
+PASS: gcc tri_tri.c tri_tri_ext.c tri_tri_loop.c 
 PASS: ./lus2lic {-o /tmp/calculs_max.lic should_work/calculs_max.lus}
 PASS: ./lus2lic {-ec -o /tmp/calculs_max.ec should_work/calculs_max.lus}
 PASS: ./myec2c {-o /tmp/calculs_max.c /tmp/calculs_max.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/calculs_max.lus
 PASS: ./lus2lic {-2c should_work/calculs_max.lus -n calculs_max}
-PASS: gcc calculs_max_calculs_max.c calculs_max_calculs_max_loop.c 
+PASS: gcc calculs_max_calculs_max.c calculs_max_calculs_max_ext.c calculs_max_calculs_max_loop.c 
 PASS: ./lus2lic {-o /tmp/testCA.lic should_work/testCA.lus}
 PASS: ./lus2lic {-ec -o /tmp/testCA.ec should_work/testCA.lus}
 PASS: ./myec2c {-o /tmp/testCA.c /tmp/testCA.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/testCA.lus
 PASS: ./lus2lic {-2c should_work/testCA.lus -n testCA}
-PASS: gcc testCA_testCA.c testCA_testCA_loop.c 
+PASS: gcc testCA_testCA.c testCA_testCA_ext.c testCA_testCA_loop.c 
 PASS: ./lus2lic {-o /tmp/test_extern.lic should_work/test_extern.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_extern.ec should_work/test_extern.lus}
 PASS: ./myec2c {-o /tmp/test_extern.c /tmp/test_extern.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/test_extern.lus
 PASS: ./lus2lic {-2c should_work/test_extern.lus -n test_extern}
-FAIL: Check that the generated C code compiles  : gcc test_extern_test_extern.c test_extern_test_extern_loop.c 
+PASS: gcc test_extern_test_extern.c test_extern_test_extern_ext.c test_extern_test_extern_loop.c 
 PASS: ./lus2lic {-o /tmp/deconne.lic should_work/deconne.lus}
 PASS: ./lus2lic {-ec -o /tmp/deconne.ec should_work/deconne.lus}
 PASS: ./myec2c {-o /tmp/deconne.c /tmp/deconne.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/deconne.lus
 PASS: ./lus2lic {-2c should_work/deconne.lus -n deconne}
-FAIL: Check that the generated C code compiles  : gcc deconne_deconne.c deconne_deconne_loop.c 
+PASS: gcc deconne_deconne.c deconne_deconne_ext.c deconne_deconne_loop.c 
 PASS: ./lus2lic {-o /tmp/noAlarm.lic should_work/noAlarm.lus}
 PASS: ./lus2lic {-ec -o /tmp/noAlarm.ec should_work/noAlarm.lus}
 PASS: ./myec2c {-o /tmp/noAlarm.c /tmp/noAlarm.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/noAlarm.lus
 PASS: ./lus2lic {-2c should_work/noAlarm.lus -n noAlarm}
-PASS: gcc noAlarm_noAlarm.c noAlarm_noAlarm_loop.c 
+PASS: gcc noAlarm_noAlarm.c noAlarm_noAlarm_ext.c noAlarm_noAlarm_loop.c 
 PASS: ./lus2lic {-o /tmp/clock_ite.lic should_work/clock_ite.lus}
 PASS: ./lus2lic {-ec -o /tmp/clock_ite.ec should_work/clock_ite.lus}
 PASS: ./myec2c {-o /tmp/clock_ite.c /tmp/clock_ite.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/clock_ite.lus
 PASS: ./lus2lic {-2c should_work/clock_ite.lus -n clock_ite}
-PASS: gcc clock_ite_clock_ite.c clock_ite_clock_ite_loop.c 
+PASS: gcc clock_ite_clock_ite.c clock_ite_clock_ite_ext.c clock_ite_clock_ite_loop.c 
 PASS: ./lus2lic {-o /tmp/morel4.lic should_work/morel4.lus}
 PASS: ./lus2lic {-ec -o /tmp/morel4.ec should_work/morel4.lus}
 PASS: ./myec2c {-o /tmp/morel4.c /tmp/morel4.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/morel4.lus
 FAIL: Generate c code  : ./lus2lic {-2c should_work/morel4.lus -n morel4}
-FAIL: Check that the generated C code compiles  : gcc morel4_morel4.c morel4_morel4_loop.c 
+FAIL: Check that the generated C code compiles  : gcc morel4_morel4.c morel4_morel4_ext.c morel4_morel4_loop.c 
 PASS: ./lus2lic {-o /tmp/trivial_array.lic should_work/trivial_array.lus}
 FAIL: Generate ec code  : ./lus2lic {-ec -o /tmp/trivial_array.ec should_work/trivial_array.lus}
 PASS: ./lus2lic {-o /tmp/param_node4.lic should_work/param_node4.lus}
@@ -591,145 +591,145 @@ PASS: ./lus2lic {-ec -o /tmp/param_node4.ec should_work/param_node4.lus}
 PASS: ./myec2c {-o /tmp/param_node4.c /tmp/param_node4.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/param_node4.lus
 PASS: ./lus2lic {-2c should_work/param_node4.lus -n param_node4}
-PASS: gcc param_node4_param_node4.c param_node4_param_node4_loop.c 
+PASS: gcc param_node4_param_node4.c param_node4_param_node4_ext.c param_node4_param_node4_loop.c 
 PASS: ./lus2lic {-o /tmp/bad_call03.lic should_work/bad_call03.lus}
 PASS: ./lus2lic {-ec -o /tmp/bad_call03.ec should_work/bad_call03.lus}
 PASS: ./myec2c {-o /tmp/bad_call03.c /tmp/bad_call03.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/bad_call03.lus
 PASS: ./lus2lic {-2c should_work/bad_call03.lus -n bad_call03}
-PASS: gcc bad_call03_bad_call03.c bad_call03_bad_call03_loop.c 
+PASS: gcc bad_call03_bad_call03.c bad_call03_bad_call03_ext.c bad_call03_bad_call03_loop.c 
 PASS: ./lus2lic {-o /tmp/onlyroll.lic should_work/onlyroll.lus}
 PASS: ./lus2lic {-ec -o /tmp/onlyroll.ec should_work/onlyroll.lus}
 PASS: ./myec2c {-o /tmp/onlyroll.c /tmp/onlyroll.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/onlyroll.lus
 PASS: ./lus2lic {-2c should_work/onlyroll.lus -n onlyroll}
-PASS: gcc onlyroll_onlyroll.c onlyroll_onlyroll_loop.c 
+PASS: gcc onlyroll_onlyroll.c onlyroll_onlyroll_ext.c onlyroll_onlyroll_loop.c 
 PASS: ./lus2lic {-o /tmp/produitBool.lic should_work/produitBool.lus}
 PASS: ./lus2lic {-ec -o /tmp/produitBool.ec should_work/produitBool.lus}
 PASS: ./myec2c {-o /tmp/produitBool.c /tmp/produitBool.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/produitBool.lus
 PASS: ./lus2lic {-2c should_work/produitBool.lus -n produitBool}
-PASS: gcc produitBool_produitBool.c produitBool_produitBool_loop.c 
+PASS: gcc produitBool_produitBool.c produitBool_produitBool_ext.c produitBool_produitBool_loop.c 
 PASS: ./lus2lic {-o /tmp/noeudsIndependants.lic should_work/noeudsIndependants.lus}
 PASS: ./lus2lic {-ec -o /tmp/noeudsIndependants.ec should_work/noeudsIndependants.lus}
 PASS: ./myec2c {-o /tmp/noeudsIndependants.c /tmp/noeudsIndependants.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/noeudsIndependants.lus
 PASS: ./lus2lic {-2c should_work/noeudsIndependants.lus -n noeudsIndependants}
-PASS: gcc noeudsIndependants_noeudsIndependants.c noeudsIndependants_noeudsIndependants_loop.c 
+PASS: gcc noeudsIndependants_noeudsIndependants.c noeudsIndependants_noeudsIndependants_ext.c noeudsIndependants_noeudsIndependants_loop.c 
 PASS: ./lus2lic {-o /tmp/mouse.lic should_work/mouse.lus}
 PASS: ./lus2lic {-ec -o /tmp/mouse.ec should_work/mouse.lus}
 PASS: ./myec2c {-o /tmp/mouse.c /tmp/mouse.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mouse.lus
 PASS: ./lus2lic {-2c should_work/mouse.lus -n mouse}
-PASS: gcc mouse_mouse.c mouse_mouse_loop.c 
+PASS: gcc mouse_mouse.c mouse_mouse_ext.c mouse_mouse_loop.c 
 PASS: ./lus2lic {-o /tmp/param_node3.lic should_work/param_node3.lus}
 PASS: ./lus2lic {-ec -o /tmp/param_node3.ec should_work/param_node3.lus}
 PASS: ./myec2c {-o /tmp/param_node3.c /tmp/param_node3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/param_node3.lus
 PASS: ./lus2lic {-2c should_work/param_node3.lus -n param_node3}
-PASS: gcc param_node3_param_node3.c param_node3_param_node3_loop.c 
+PASS: gcc param_node3_param_node3.c param_node3_param_node3_ext.c param_node3_param_node3_loop.c 
 PASS: ./lus2lic {-o /tmp/pipeline.lic should_work/pipeline.lus}
 PASS: ./lus2lic {-ec -o /tmp/pipeline.ec should_work/pipeline.lus}
 PASS: ./myec2c {-o /tmp/pipeline.c /tmp/pipeline.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/pipeline.lus
 PASS: ./lus2lic {-2c should_work/pipeline.lus -n pipeline}
-PASS: gcc pipeline_pipeline.c pipeline_pipeline_loop.c 
+PASS: gcc pipeline_pipeline.c pipeline_pipeline_ext.c pipeline_pipeline_loop.c 
 PASS: ./lus2lic {-o /tmp/mapinf.lic should_work/mapinf.lus}
 PASS: ./lus2lic {-ec -o /tmp/mapinf.ec should_work/mapinf.lus}
 PASS: ./myec2c {-o /tmp/mapinf.c /tmp/mapinf.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mapinf.lus
 PASS: ./lus2lic {-2c should_work/mapinf.lus -n mapinf}
-PASS: gcc mapinf_mapinf.c mapinf_mapinf_loop.c 
+PASS: gcc mapinf_mapinf.c mapinf_mapinf_ext.c mapinf_mapinf_loop.c 
 PASS: ./lus2lic {-o /tmp/integrator.lic should_work/integrator.lus}
 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}
-PASS: gcc integrator_integrator.c integrator_integrator_loop.c 
+PASS: gcc integrator_integrator.c integrator_integrator_ext.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}
 PASS: ../utils/test_lus2lic_no_node should_work/nc4.lus
 PASS: ./lus2lic {-2c should_work/nc4.lus -n nc4}
-PASS: gcc nc4_nc4.c nc4_nc4_loop.c 
+PASS: gcc nc4_nc4.c nc4_nc4_ext.c nc4_nc4_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/mm3.lus -n mm3}
-PASS: gcc mm3_mm3.c mm3_mm3_loop.c 
+PASS: gcc mm3_mm3.c mm3_mm3_ext.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}
 PASS: ./myec2c {-o /tmp/over2.c /tmp/over2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/over2.lus
 PASS: ./lus2lic {-2c should_work/over2.lus -n over2}
-PASS: gcc over2_over2.c over2_over2_loop.c 
+PASS: gcc over2_over2.c over2_over2_ext.c over2_over2_loop.c 
 PASS: ./lus2lic {-o /tmp/over3.lic should_work/over3.lus}
 PASS: ./lus2lic {-ec -o /tmp/over3.ec should_work/over3.lus}
 PASS: ./myec2c {-o /tmp/over3.c /tmp/over3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/over3.lus
 PASS: ./lus2lic {-2c should_work/over3.lus -n over3}
-PASS: gcc over3_over3.c over3_over3_loop.c 
+PASS: gcc over3_over3.c over3_over3_ext.c over3_over3_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/complex.lus -n complex}
-PASS: gcc complex_complex.c complex_complex_loop.c 
+PASS: gcc complex_complex.c complex_complex_ext.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}
 PASS: ./myec2c {-o /tmp/initial.c /tmp/initial.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/initial.lus
 PASS: ./lus2lic {-2c should_work/initial.lus -n initial}
-PASS: gcc initial_initial.c initial_initial_loop.c 
+PASS: gcc initial_initial.c initial_initial_ext.c initial_initial_loop.c 
 PASS: ./lus2lic {-o /tmp/declaration.lic should_work/declaration.lus}
 PASS: ./lus2lic {-ec -o /tmp/declaration.ec should_work/declaration.lus}
 PASS: ./myec2c {-o /tmp/declaration.c /tmp/declaration.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/declaration.lus
 PASS: ./lus2lic {-2c should_work/declaration.lus -n declaration}
-PASS: gcc declaration_declaration.c declaration_declaration_loop.c 
+PASS: gcc declaration_declaration.c declaration_declaration_ext.c declaration_declaration_loop.c 
 PASS: ./lus2lic {-o /tmp/PCOND1.lic should_work/PCOND1.lus}
 PASS: ./lus2lic {-ec -o /tmp/PCOND1.ec should_work/PCOND1.lus}
 PASS: ./myec2c {-o /tmp/PCOND1.c /tmp/PCOND1.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/PCOND1.lus
 PASS: ./lus2lic {-2c should_work/PCOND1.lus -n PCOND1}
-PASS: gcc PCOND1_PCOND1.c PCOND1_PCOND1_loop.c 
+PASS: gcc PCOND1_PCOND1.c PCOND1_PCOND1_ext.c PCOND1_PCOND1_loop.c 
 PASS: ./lus2lic {-o /tmp/TIME_STABLE1.lic should_work/TIME_STABLE1.lus}
 PASS: ./lus2lic {-ec -o /tmp/TIME_STABLE1.ec should_work/TIME_STABLE1.lus}
 PASS: ./myec2c {-o /tmp/TIME_STABLE1.c /tmp/TIME_STABLE1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/TIME_STABLE1.lus
 PASS: ./lus2lic {-2c should_work/TIME_STABLE1.lus -n TIME_STABLE1}
-PASS: gcc TIME_STABLE1_TIME_STABLE1.c TIME_STABLE1_TIME_STABLE1_loop.c 
+PASS: gcc TIME_STABLE1_TIME_STABLE1.c TIME_STABLE1_TIME_STABLE1_ext.c TIME_STABLE1_TIME_STABLE1_loop.c 
 PASS: ./lus2lic {-o /tmp/nc5.lic should_work/nc5.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc5.ec should_work/nc5.lus}
 PASS: ./myec2c {-o /tmp/nc5.c /tmp/nc5.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc5.lus
 PASS: ./lus2lic {-2c should_work/nc5.lus -n nc5}
-PASS: gcc nc5_nc5.c nc5_nc5_loop.c 
+PASS: gcc nc5_nc5.c nc5_nc5_ext.c nc5_nc5_loop.c 
 PASS: ./lus2lic {-o /tmp/call.lic should_work/call.lus}
 PASS: ./lus2lic {-ec -o /tmp/call.ec should_work/call.lus}
 PASS: ./myec2c {-o /tmp/call.c /tmp/call.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/call.lus
 PASS: ./lus2lic {-2c should_work/call.lus -n call}
-FAIL: Check that the generated C code compiles  : gcc call_call.c call_call_loop.c 
+PASS: gcc call_call.c call_call_ext.c call_call_loop.c 
 PASS: ./lus2lic {-o /tmp/mouse1.lic should_work/mouse1.lus}
 PASS: ./lus2lic {-ec -o /tmp/mouse1.ec should_work/mouse1.lus}
 PASS: ./myec2c {-o /tmp/mouse1.c /tmp/mouse1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mouse1.lus
 PASS: ./lus2lic {-2c should_work/mouse1.lus -n mouse1}
-PASS: gcc mouse1_mouse1.c mouse1_mouse1_loop.c 
+PASS: gcc mouse1_mouse1.c mouse1_mouse1_ext.c mouse1_mouse1_loop.c 
 PASS: ./lus2lic {-o /tmp/lustre_test1_ok.lic should_work/lustre_test1_ok.lus}
 PASS: ./lus2lic {-ec -o /tmp/lustre_test1_ok.ec should_work/lustre_test1_ok.lus}
 PASS: ./myec2c {-o /tmp/lustre_test1_ok.c /tmp/lustre_test1_ok.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/lustre_test1_ok.lus
 PASS: ./lus2lic {-2c should_work/lustre_test1_ok.lus -n lustre_test1_ok}
-PASS: gcc lustre_test1_ok_lustre_test1_ok.c lustre_test1_ok_lustre_test1_ok_loop.c 
+PASS: gcc lustre_test1_ok_lustre_test1_ok.c lustre_test1_ok_lustre_test1_ok_ext.c lustre_test1_ok_lustre_test1_ok_loop.c 
 PASS: ./lus2lic {-o /tmp/compteur.lic should_work/compteur.lus}
 PASS: ./lus2lic {-ec -o /tmp/compteur.ec should_work/compteur.lus}
 PASS: ./myec2c {-o /tmp/compteur.c /tmp/compteur.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/compteur.lus
 PASS: ./lus2lic {-2c should_work/compteur.lus -n compteur}
-PASS: gcc compteur_compteur.c compteur_compteur_loop.c 
+PASS: gcc compteur_compteur.c compteur_compteur_ext.c compteur_compteur_loop.c 
 PASS: ./lus2lic {-o /tmp/Int.lic should_work/Int.lus}
 PASS: ./lus2lic {-ec -o /tmp/Int.ec should_work/Int.lus}
 PASS: ./myec2c {-o /tmp/Int.c /tmp/Int.ec}
@@ -742,19 +742,19 @@ PASS: ./lus2lic {-ec -o /tmp/t2.ec should_work/t2.lus}
 PASS: ./myec2c {-o /tmp/t2.c /tmp/t2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/t2.lus
 PASS: ./lus2lic {-2c should_work/t2.lus -n t2}
-PASS: gcc t2_t2.c t2_t2_loop.c 
+PASS: gcc t2_t2.c t2_t2_ext.c t2_t2_loop.c 
 PASS: ./lus2lic {-o /tmp/arbitre.lic should_work/arbitre.lus}
 PASS: ./lus2lic {-ec -o /tmp/arbitre.ec should_work/arbitre.lus}
 PASS: ./myec2c {-o /tmp/arbitre.c /tmp/arbitre.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/arbitre.lus
 PASS: ./lus2lic {-2c should_work/arbitre.lus -n arbitre}
-FAIL: Check that the generated C code compiles  : gcc arbitre_arbitre.c arbitre_arbitre_loop.c 
+FAIL: Check that the generated C code compiles  : gcc arbitre_arbitre.c arbitre_arbitre_ext.c arbitre_arbitre_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/test_const.lus -n test_const}
-PASS: gcc test_const_test_const.c test_const_test_const_loop.c 
+PASS: gcc test_const_test_const.c test_const_test_const_ext.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}
 PASS: ./myec2c {-o /tmp/when_tuple.c /tmp/when_tuple.ec}
@@ -765,7 +765,7 @@ PASS: ./lus2lic {-ec -o /tmp/carV2.ec should_work/carV2.lus}
 PASS: ./myec2c {-o /tmp/carV2.c /tmp/carV2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/carV2.lus
 PASS: ./lus2lic {-2c should_work/carV2.lus -n carV2}
-PASS: gcc carV2_carV2.c carV2_carV2_loop.c 
+PASS: gcc carV2_carV2.c carV2_carV2_ext.c carV2_carV2_loop.c 
 PASS: ./lus2lic {-o /tmp/test_merge.lic should_work/test_merge.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_merge.ec should_work/test_merge.lus}
 FAIL: Try ec2c on the result: ./myec2c {-o /tmp/test_merge.c /tmp/test_merge.ec}
@@ -774,49 +774,49 @@ PASS: ./lus2lic {-ec -o /tmp/FillFollowedByRed.ec should_work/FillFollowedByRed.
 PASS: ./myec2c {-o /tmp/FillFollowedByRed.c /tmp/FillFollowedByRed.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/FillFollowedByRed.lus
 PASS: ./lus2lic {-2c should_work/FillFollowedByRed.lus -n FillFollowedByRed}
-PASS: gcc FillFollowedByRed_FillFollowedByRed.c FillFollowedByRed_FillFollowedByRed_loop.c 
+PASS: gcc FillFollowedByRed_FillFollowedByRed.c FillFollowedByRed_FillFollowedByRed_ext.c FillFollowedByRed_FillFollowedByRed_loop.c 
 PASS: ./lus2lic {-o /tmp/sample_time_change.lic should_work/sample_time_change.lus}
 PASS: ./lus2lic {-ec -o /tmp/sample_time_change.ec should_work/sample_time_change.lus}
 PASS: ./myec2c {-o /tmp/sample_time_change.c /tmp/sample_time_change.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/sample_time_change.lus
 PASS: ./lus2lic {-2c should_work/sample_time_change.lus -n sample_time_change}
-PASS: gcc sample_time_change_sample_time_change.c sample_time_change_sample_time_change_loop.c 
+PASS: gcc sample_time_change_sample_time_change.c sample_time_change_sample_time_change_ext.c sample_time_change_sample_time_change_loop.c 
 PASS: ./lus2lic {-o /tmp/test_enum.lic should_work/test_enum.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_enum.ec should_work/test_enum.lus}
 PASS: ./myec2c {-o /tmp/test_enum.c /tmp/test_enum.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/test_enum.lus
 PASS: ./lus2lic {-2c should_work/test_enum.lus -n test_enum}
-PASS: gcc test_enum_test_enum.c test_enum_test_enum_loop.c 
+PASS: gcc test_enum_test_enum.c test_enum_test_enum_ext.c test_enum_test_enum_loop.c 
 PASS: ./lus2lic {-o /tmp/predef01.lic should_work/predef01.lus}
 PASS: ./lus2lic {-ec -o /tmp/predef01.ec should_work/predef01.lus}
 PASS: ./myec2c {-o /tmp/predef01.c /tmp/predef01.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/predef01.lus
 PASS: ./lus2lic {-2c should_work/predef01.lus -n predef01}
-PASS: gcc predef01_predef01.c predef01_predef01_loop.c 
+PASS: gcc predef01_predef01.c predef01_predef01_ext.c predef01_predef01_loop.c 
 PASS: ./lus2lic {-o /tmp/long_et_stupide_nom_de_noeud.lic should_work/long_et_stupide_nom_de_noeud.lus}
 PASS: ./lus2lic {-ec -o /tmp/long_et_stupide_nom_de_noeud.ec should_work/long_et_stupide_nom_de_noeud.lus}
 PASS: ./myec2c {-o /tmp/long_et_stupide_nom_de_noeud.c /tmp/long_et_stupide_nom_de_noeud.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/long_et_stupide_nom_de_noeud.lus
 PASS: ./lus2lic {-2c should_work/long_et_stupide_nom_de_noeud.lus -n long_et_stupide_nom_de_noeud}
-PASS: gcc long_et_stupide_nom_de_noeud_long_et_stupide_nom_de_noeud.c long_et_stupide_nom_de_noeud_long_et_stupide_nom_de_noeud_loop.c 
+PASS: gcc long_et_stupide_nom_de_noeud_long_et_stupide_nom_de_noeud.c long_et_stupide_nom_de_noeud_long_et_stupide_nom_de_noeud_ext.c long_et_stupide_nom_de_noeud_long_et_stupide_nom_de_noeud_loop.c 
 PASS: ./lus2lic {-o /tmp/CURRENT.lic should_work/CURRENT.lus}
 PASS: ./lus2lic {-ec -o /tmp/CURRENT.ec should_work/CURRENT.lus}
 PASS: ./myec2c {-o /tmp/CURRENT.c /tmp/CURRENT.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/CURRENT.lus
 PASS: ./lus2lic {-2c should_work/CURRENT.lus -n CURRENT}
-PASS: gcc CURRENT_CURRENT.c CURRENT_CURRENT_loop.c 
+PASS: gcc CURRENT_CURRENT.c CURRENT_CURRENT_ext.c CURRENT_CURRENT_loop.c 
 PASS: ./lus2lic {-o /tmp/left.lic should_work/left.lus}
 PASS: ./lus2lic {-ec -o /tmp/left.ec should_work/left.lus}
 PASS: ./myec2c {-o /tmp/left.c /tmp/left.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/left.lus
 FAIL: Generate c code  : ./lus2lic {-2c should_work/left.lus -n left}
-FAIL: Check that the generated C code compiles  : gcc left_left.c left_left_loop.c 
+FAIL: Check that the generated C code compiles  : gcc left_left.c left_left_ext.c left_left_loop.c 
 PASS: ./lus2lic {-o /tmp/ts04.lic should_work/ts04.lus}
 PASS: ./lus2lic {-ec -o /tmp/ts04.ec should_work/ts04.lus}
 PASS: ./myec2c {-o /tmp/ts04.c /tmp/ts04.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ts04.lus
 PASS: ./lus2lic {-2c should_work/ts04.lus -n ts04}
-PASS: gcc ts04_ts04.c ts04_ts04_loop.c 
+PASS: gcc ts04_ts04.c ts04_ts04_ext.c ts04_ts04_loop.c 
 FAIL: without any option: ./lus2lic {-o /tmp/bug_map_fby.lic should_work/bug_map_fby.lus}
 FAIL: Generate ec code  : ./lus2lic {-ec -o /tmp/bug_map_fby.ec should_work/bug_map_fby.lus}
 PASS: ./lus2lic {-o /tmp/multiclock.lic should_work/multiclock.lus}
@@ -824,37 +824,37 @@ PASS: ./lus2lic {-ec -o /tmp/multiclock.ec should_work/multiclock.lus}
 PASS: ./myec2c {-o /tmp/multiclock.c /tmp/multiclock.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/multiclock.lus
 PASS: ./lus2lic {-2c should_work/multiclock.lus -n multiclock}
-PASS: gcc multiclock_multiclock.c multiclock_multiclock_loop.c 
+PASS: gcc multiclock_multiclock.c multiclock_multiclock_ext.c multiclock_multiclock_loop.c 
 PASS: ./lus2lic {-o /tmp/nc2.lic should_work/nc2.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc2.ec should_work/nc2.lus}
 PASS: ./myec2c {-o /tmp/nc2.c /tmp/nc2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc2.lus
 PASS: ./lus2lic {-2c should_work/nc2.lus -n nc2}
-PASS: gcc nc2_nc2.c nc2_nc2_loop.c 
+PASS: gcc nc2_nc2.c nc2_nc2_ext.c nc2_nc2_loop.c 
 PASS: ./lus2lic {-o /tmp/morel.lic should_work/morel.lus}
 PASS: ./lus2lic {-ec -o /tmp/morel.ec should_work/morel.lus}
 PASS: ./myec2c {-o /tmp/morel.c /tmp/morel.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/morel.lus
 FAIL: Generate c code  : ./lus2lic {-2c should_work/morel.lus -n morel}
-FAIL: Check that the generated C code compiles  : gcc morel_morel.c morel_morel_loop.c 
+FAIL: Check that the generated C code compiles  : gcc morel_morel.c morel_morel_ext.c morel_morel_loop.c 
 PASS: ./lus2lic {-o /tmp/SOURIS.lic should_work/SOURIS.lus}
 PASS: ./lus2lic {-ec -o /tmp/SOURIS.ec should_work/SOURIS.lus}
 PASS: ./myec2c {-o /tmp/SOURIS.c /tmp/SOURIS.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/SOURIS.lus
 PASS: ./lus2lic {-2c should_work/SOURIS.lus -n SOURIS}
-PASS: gcc SOURIS_SOURIS.c SOURIS_SOURIS_loop.c 
+PASS: gcc SOURIS_SOURIS.c SOURIS_SOURIS_ext.c SOURIS_SOURIS_loop.c 
 PASS: ./lus2lic {-o /tmp/param_node2.lic should_work/param_node2.lus}
 PASS: ./lus2lic {-ec -o /tmp/param_node2.ec should_work/param_node2.lus}
 PASS: ./myec2c {-o /tmp/param_node2.c /tmp/param_node2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/param_node2.lus
 PASS: ./lus2lic {-2c should_work/param_node2.lus -n param_node2}
-PASS: gcc param_node2_param_node2.c param_node2_param_node2_loop.c 
+PASS: gcc param_node2_param_node2.c param_node2_param_node2_ext.c param_node2_param_node2_loop.c 
 PASS: ./lus2lic {-o /tmp/o2l_feux_compl.lic should_work/o2l_feux_compl.lus}
 PASS: ./lus2lic {-ec -o /tmp/o2l_feux_compl.ec should_work/o2l_feux_compl.lus}
 PASS: ./myec2c {-o /tmp/o2l_feux_compl.c /tmp/o2l_feux_compl.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/o2l_feux_compl.lus
 PASS: ./lus2lic {-2c should_work/o2l_feux_compl.lus -n o2l_feux_compl}
-PASS: gcc o2l_feux_compl_o2l_feux_compl.c o2l_feux_compl_o2l_feux_compl_loop.c 
+PASS: gcc o2l_feux_compl_o2l_feux_compl.c o2l_feux_compl_o2l_feux_compl_ext.c o2l_feux_compl_o2l_feux_compl_loop.c 
 PASS: ./lus2lic {-o /tmp/model.lic should_work/model.lus}
 PASS: ./lus2lic {-ec -o /tmp/model.ec should_work/model.lus}
 PASS: ./myec2c {-o /tmp/model.c /tmp/model.ec}
@@ -865,55 +865,55 @@ PASS: ./lus2lic {-ec -o /tmp/matrice.ec should_work/matrice.lus}
 PASS: ./myec2c {-o /tmp/matrice.c /tmp/matrice.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/matrice.lus
 PASS: ./lus2lic {-2c should_work/matrice.lus -n matrice}
-PASS: gcc matrice_matrice.c matrice_matrice_loop.c 
+PASS: gcc matrice_matrice.c matrice_matrice_ext.c matrice_matrice_loop.c 
 PASS: ./lus2lic {-o /tmp/TIME_STABLE.lic should_work/TIME_STABLE.lus}
 PASS: ./lus2lic {-ec -o /tmp/TIME_STABLE.ec should_work/TIME_STABLE.lus}
 PASS: ./myec2c {-o /tmp/TIME_STABLE.c /tmp/TIME_STABLE.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/TIME_STABLE.lus
 PASS: ./lus2lic {-2c should_work/TIME_STABLE.lus -n TIME_STABLE}
-PASS: gcc TIME_STABLE_TIME_STABLE.c TIME_STABLE_TIME_STABLE_loop.c 
+PASS: gcc TIME_STABLE_TIME_STABLE.c TIME_STABLE_TIME_STABLE_ext.c TIME_STABLE_TIME_STABLE_loop.c 
 PASS: ./lus2lic {-o /tmp/cpt.lic should_work/cpt.lus}
 PASS: ./lus2lic {-ec -o /tmp/cpt.ec should_work/cpt.lus}
 PASS: ./myec2c {-o /tmp/cpt.c /tmp/cpt.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/cpt.lus
 PASS: ./lus2lic {-2c should_work/cpt.lus -n cpt}
-PASS: gcc cpt_cpt.c cpt_cpt_loop.c 
+PASS: gcc cpt_cpt.c cpt_cpt_ext.c cpt_cpt_loop.c 
 PASS: ./lus2lic {-o /tmp/multipar.lic should_work/multipar.lus}
 PASS: ./lus2lic {-ec -o /tmp/multipar.ec should_work/multipar.lus}
 PASS: ./myec2c {-o /tmp/multipar.c /tmp/multipar.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/multipar.lus
 PASS: ./lus2lic {-2c should_work/multipar.lus -n multipar}
-PASS: gcc multipar_multipar.c multipar_multipar_loop.c 
+PASS: gcc multipar_multipar.c multipar_multipar_ext.c multipar_multipar_loop.c 
 PASS: ./lus2lic {-o /tmp/activation_ec.lic should_work/activation_ec.lus}
 PASS: ./lus2lic {-ec -o /tmp/activation_ec.ec should_work/activation_ec.lus}
 PASS: ./myec2c {-o /tmp/activation_ec.c /tmp/activation_ec.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/activation_ec.lus
 PASS: ./lus2lic {-2c should_work/activation_ec.lus -n activation_ec}
-PASS: gcc activation_ec_activation_ec.c activation_ec_activation_ec_loop.c 
+PASS: gcc activation_ec_activation_ec.c activation_ec_activation_ec_ext.c activation_ec_activation_ec_loop.c 
 PASS: ./lus2lic {-o /tmp/impl_priority.lic should_work/impl_priority.lus}
 PASS: ./lus2lic {-ec -o /tmp/impl_priority.ec should_work/impl_priority.lus}
 PASS: ./myec2c {-o /tmp/impl_priority.c /tmp/impl_priority.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/impl_priority.lus
 PASS: ./lus2lic {-2c should_work/impl_priority.lus -n impl_priority}
-PASS: gcc impl_priority_impl_priority.c impl_priority_impl_priority_loop.c 
+PASS: gcc impl_priority_impl_priority.c impl_priority_impl_priority_ext.c impl_priority_impl_priority_loop.c 
 PASS: ./lus2lic {-o /tmp/exclusion.lic should_work/exclusion.lus}
 PASS: ./lus2lic {-ec -o /tmp/exclusion.ec should_work/exclusion.lus}
 PASS: ./myec2c {-o /tmp/exclusion.c /tmp/exclusion.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/exclusion.lus
 PASS: ./lus2lic {-2c should_work/exclusion.lus -n exclusion}
-PASS: gcc exclusion_exclusion.c exclusion_exclusion_loop.c 
+PASS: gcc exclusion_exclusion.c exclusion_exclusion_ext.c exclusion_exclusion_loop.c 
 PASS: ./lus2lic {-o /tmp/ply01.lic should_work/ply01.lus}
 PASS: ./lus2lic {-ec -o /tmp/ply01.ec should_work/ply01.lus}
 PASS: ./myec2c {-o /tmp/ply01.c /tmp/ply01.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ply01.lus
 PASS: ./lus2lic {-2c should_work/ply01.lus -n ply01}
-PASS: gcc ply01_ply01.c ply01_ply01_loop.c 
+PASS: gcc ply01_ply01.c ply01_ply01_ext.c ply01_ply01_loop.c 
 PASS: ./lus2lic {-o /tmp/consensus.lic should_work/consensus.lus}
 PASS: ./lus2lic {-ec -o /tmp/consensus.ec should_work/consensus.lus}
 PASS: ./myec2c {-o /tmp/consensus.c /tmp/consensus.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/consensus.lus
 PASS: ./lus2lic {-2c should_work/consensus.lus -n consensus}
-PASS: gcc consensus_consensus.c consensus_consensus_loop.c 
+PASS: gcc consensus_consensus.c consensus_consensus_ext.c consensus_consensus_loop.c 
 PASS: ./lus2lic {-o /tmp/activation2.lic should_work/activation2.lus}
 PASS: ./lus2lic {-ec -o /tmp/activation2.ec should_work/activation2.lus}
 PASS: ./myec2c {-o /tmp/activation2.c /tmp/activation2.ec}
@@ -924,79 +924,79 @@ 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
 PASS: ./lus2lic {-2c should_work/type_decl.lus -n type_decl}
-PASS: gcc type_decl_type_decl.c type_decl_type_decl_loop.c 
+PASS: gcc type_decl_type_decl.c type_decl_type_decl_ext.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}
 PASS: ./myec2c {-o /tmp/import1.c /tmp/import1.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/import1.lus
 PASS: ./lus2lic {-2c should_work/import1.lus -n import1}
-FAIL: Check that the generated C code compiles  : gcc import1_import1.c import1_import1_loop.c 
+FAIL: Check that the generated C code compiles  : gcc import1_import1.c import1_import1_ext.c import1_import1_loop.c 
 PASS: ./lus2lic {-o /tmp/pack1.lic should_work/pack1.lus}
 PASS: ./lus2lic {-ec -o /tmp/pack1.ec should_work/pack1.lus}
 PASS: ./myec2c {-o /tmp/pack1.c /tmp/pack1.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/pack1.lus
 PASS: ./lus2lic {-2c should_work/pack1.lus -n pack1}
-PASS: gcc pack1_pack1.c pack1_pack1_loop.c 
+PASS: gcc pack1_pack1.c pack1_pack1_ext.c pack1_pack1_loop.c 
 PASS: ./lus2lic {-o /tmp/bob.lic should_work/bob.lus}
 PASS: ./lus2lic {-ec -o /tmp/bob.ec should_work/bob.lus}
 PASS: ./myec2c {-o /tmp/bob.c /tmp/bob.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/bob.lus
 PASS: ./lus2lic {-2c should_work/bob.lus -n bob}
-PASS: gcc bob_bob.c bob_bob_loop.c 
+PASS: gcc bob_bob.c bob_bob_ext.c bob_bob_loop.c 
 PASS: ./lus2lic {-o /tmp/notTwo.lic should_work/notTwo.lus}
 PASS: ./lus2lic {-ec -o /tmp/notTwo.ec should_work/notTwo.lus}
 PASS: ./myec2c {-o /tmp/notTwo.c /tmp/notTwo.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/notTwo.lus
 PASS: ./lus2lic {-2c should_work/notTwo.lus -n notTwo}
-PASS: gcc notTwo_notTwo.c notTwo_notTwo_loop.c 
+PASS: gcc notTwo_notTwo.c notTwo_notTwo_ext.c notTwo_notTwo_loop.c 
 PASS: ./lus2lic {-o /tmp/stopwatch.lic should_work/stopwatch.lus}
 PASS: ./lus2lic {-ec -o /tmp/stopwatch.ec should_work/stopwatch.lus}
 PASS: ./myec2c {-o /tmp/stopwatch.c /tmp/stopwatch.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/stopwatch.lus
 PASS: ./lus2lic {-2c should_work/stopwatch.lus -n stopwatch}
-PASS: gcc stopwatch_stopwatch.c stopwatch_stopwatch_loop.c 
+PASS: gcc stopwatch_stopwatch.c stopwatch_stopwatch_ext.c stopwatch_stopwatch_loop.c 
 PASS: ./lus2lic {-o /tmp/test_condact.lic should_work/test_condact.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_condact.ec should_work/test_condact.lus}
 PASS: ./myec2c {-o /tmp/test_condact.c /tmp/test_condact.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/test_condact.lus
 PASS: ./lus2lic {-2c should_work/test_condact.lus -n test_condact}
-PASS: gcc test_condact_test_condact.c test_condact_test_condact_loop.c 
+PASS: gcc test_condact_test_condact.c test_condact_test_condact_ext.c test_condact_test_condact_loop.c 
 PASS: ./lus2lic {-o /tmp/contractForElementSelectionInArray.lic should_work/contractForElementSelectionInArray.lus}
 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
 PASS: ./lus2lic {-2c should_work/contractForElementSelectionInArray.lus -n contractForElementSelectionInArray}
-PASS: gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_loop.c 
+PASS: gcc contractForElementSelectionInArray_contractForElementSelectionInArray.c contractForElementSelectionInArray_contractForElementSelectionInArray_ext.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}
 PASS: ./myec2c {-o /tmp/iterFibo.c /tmp/iterFibo.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/iterFibo.lus
 PASS: ./lus2lic {-2c should_work/iterFibo.lus -n iterFibo}
-PASS: gcc iterFibo_iterFibo.c iterFibo_iterFibo_loop.c 
+PASS: gcc iterFibo_iterFibo.c iterFibo_iterFibo_ext.c iterFibo_iterFibo_loop.c 
 PASS: ./lus2lic {-o /tmp/morel2.lic should_work/morel2.lus}
 PASS: ./lus2lic {-ec -o /tmp/morel2.ec should_work/morel2.lus}
 PASS: ./myec2c {-o /tmp/morel2.c /tmp/morel2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/morel2.lus
 FAIL: Generate c code  : ./lus2lic {-2c should_work/morel2.lus -n morel2}
-FAIL: Check that the generated C code compiles  : gcc morel2_morel2.c morel2_morel2_loop.c 
+FAIL: Check that the generated C code compiles  : gcc morel2_morel2.c morel2_morel2_ext.c morel2_morel2_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax1.lic should_work/minmax1.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax1.ec should_work/minmax1.lus}
 PASS: ./myec2c {-o /tmp/minmax1.c /tmp/minmax1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minmax1.lus
 PASS: ./lus2lic {-2c should_work/minmax1.lus -n minmax1}
-PASS: gcc minmax1_minmax1.c minmax1_minmax1_loop.c 
+PASS: gcc minmax1_minmax1.c minmax1_minmax1_ext.c minmax1_minmax1_loop.c 
 PASS: ./lus2lic {-o /tmp/aa.lic should_work/aa.lus}
 PASS: ./lus2lic {-ec -o /tmp/aa.ec should_work/aa.lus}
 PASS: ./myec2c {-o /tmp/aa.c /tmp/aa.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/aa.lus
 PASS: ./lus2lic {-2c should_work/aa.lus -n aa}
-PASS: gcc aa_aa.c aa_aa_loop.c 
+PASS: gcc aa_aa.c aa_aa_ext.c aa_aa_loop.c 
 PASS: ./lus2lic {-o /tmp/mouse3.lic should_work/mouse3.lus}
 PASS: ./lus2lic {-ec -o /tmp/mouse3.ec should_work/mouse3.lus}
 PASS: ./myec2c {-o /tmp/mouse3.c /tmp/mouse3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mouse3.lus
 PASS: ./lus2lic {-2c should_work/mouse3.lus -n mouse3}
-PASS: gcc mouse3_mouse3.c mouse3_mouse3_loop.c 
+PASS: gcc mouse3_mouse3.c mouse3_mouse3_ext.c mouse3_mouse3_loop.c 
 PASS: ./lus2lic {-o /tmp/array_concat.lic should_work/array_concat.lus}
 PASS: ./lus2lic {-ec -o /tmp/array_concat.ec should_work/array_concat.lus}
 FAIL: Try ec2c on the result: ./myec2c {-o /tmp/array_concat.c /tmp/array_concat.ec}
@@ -1005,19 +1005,19 @@ PASS: ./lus2lic {-ec -o /tmp/ex.ec should_work/ex.lus}
 PASS: ./myec2c {-o /tmp/ex.c /tmp/ex.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ex.lus
 PASS: ./lus2lic {-2c should_work/ex.lus -n ex}
-PASS: gcc ex_ex.c ex_ex_loop.c 
+PASS: gcc ex_ex.c ex_ex_ext.c ex_ex_loop.c 
 PASS: ./lus2lic {-o /tmp/xxx.lic should_work/xxx.lus}
 PASS: ./lus2lic {-ec -o /tmp/xxx.ec should_work/xxx.lus}
 PASS: ./myec2c {-o /tmp/xxx.c /tmp/xxx.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/xxx.lus
 PASS: ./lus2lic {-2c should_work/xxx.lus -n xxx}
-PASS: gcc xxx_xxx.c xxx_xxx_loop.c 
+PASS: gcc xxx_xxx.c xxx_xxx_ext.c xxx_xxx_loop.c 
 PASS: ./lus2lic {-o /tmp/moyenne.lic should_work/moyenne.lus}
 PASS: ./lus2lic {-ec -o /tmp/moyenne.ec should_work/moyenne.lus}
 PASS: ./myec2c {-o /tmp/moyenne.c /tmp/moyenne.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/moyenne.lus
 PASS: ./lus2lic {-2c should_work/moyenne.lus -n moyenne}
-PASS: gcc moyenne_moyenne.c moyenne_moyenne_loop.c 
+PASS: gcc moyenne_moyenne.c moyenne_moyenne_ext.c moyenne_moyenne_loop.c 
 PASS: ./lus2lic {-o /tmp/activation1.lic should_work/activation1.lus}
 PASS: ./lus2lic {-ec -o /tmp/activation1.ec should_work/activation1.lus}
 PASS: ./myec2c {-o /tmp/activation1.c /tmp/activation1.ec}
@@ -1028,25 +1028,25 @@ PASS: ./lus2lic {-ec -o /tmp/call01.ec should_work/call01.lus}
 PASS: ./myec2c {-o /tmp/call01.c /tmp/call01.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/call01.lus
 PASS: ./lus2lic {-2c should_work/call01.lus -n call01}
-PASS: gcc call01_call01.c call01_call01_loop.c 
+PASS: gcc call01_call01.c call01_call01_ext.c call01_call01_loop.c 
 PASS: ./lus2lic {-o /tmp/bug.lic should_work/bug.lus}
 PASS: ./lus2lic {-ec -o /tmp/bug.ec should_work/bug.lus}
 PASS: ./myec2c {-o /tmp/bug.c /tmp/bug.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/bug.lus
 PASS: ./lus2lic {-2c should_work/bug.lus -n bug}
-PASS: gcc bug_bug.c bug_bug_loop.c 
+PASS: gcc bug_bug.c bug_bug_ext.c bug_bug_loop.c 
 PASS: ./lus2lic {-o /tmp/ck4.lic should_work/ck4.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck4.ec should_work/ck4.lus}
 PASS: ./myec2c {-o /tmp/ck4.c /tmp/ck4.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/ck4.lus
 PASS: ./lus2lic {-2c should_work/ck4.lus -n ck4}
-PASS: gcc ck4_ck4.c ck4_ck4_loop.c 
+PASS: gcc ck4_ck4.c ck4_ck4_ext.c ck4_ck4_loop.c 
 PASS: ./lus2lic {-o /tmp/map_red_iter.lic should_work/map_red_iter.lus}
 PASS: ./lus2lic {-ec -o /tmp/map_red_iter.ec should_work/map_red_iter.lus}
 PASS: ./myec2c {-o /tmp/map_red_iter.c /tmp/map_red_iter.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/map_red_iter.lus
 PASS: ./lus2lic {-2c should_work/map_red_iter.lus -n map_red_iter}
-PASS: gcc map_red_iter_map_red_iter.c map_red_iter_map_red_iter_loop.c 
+PASS: gcc map_red_iter_map_red_iter.c map_red_iter_map_red_iter_ext.c map_red_iter_map_red_iter_loop.c 
 PASS: ./lus2lic {-o /tmp/p.lic should_work/p.lus}
 PASS: ./lus2lic {-ec -o /tmp/p.ec should_work/p.lus}
 PASS: ./myec2c {-o /tmp/p.c /tmp/p.ec}
@@ -1057,43 +1057,43 @@ 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
 PASS: ./lus2lic {-2c should_work/struct0.lus -n struct0}
-PASS: gcc struct0_struct0.c struct0_struct0_loop.c 
+PASS: gcc struct0_struct0.c struct0_struct0_ext.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}
 PASS: ./myec2c {-o /tmp/filliter.c /tmp/filliter.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/filliter.lus
 PASS: ./lus2lic {-2c should_work/filliter.lus -n filliter}
-PASS: gcc filliter_filliter.c filliter_filliter_loop.c 
+PASS: gcc filliter_filliter.c filliter_filliter_ext.c filliter_filliter_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax4.lic should_work/minmax4.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax4.ec should_work/minmax4.lus}
 PASS: ./myec2c {-o /tmp/minmax4.c /tmp/minmax4.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minmax4.lus
 PASS: ./lus2lic {-2c should_work/minmax4.lus -n minmax4}
-PASS: gcc minmax4_minmax4.c minmax4_minmax4_loop.c 
+PASS: gcc minmax4_minmax4.c minmax4_minmax4_ext.c minmax4_minmax4_loop.c 
 PASS: ./lus2lic {-o /tmp/nested.lic should_work/nested.lus}
 PASS: ./lus2lic {-ec -o /tmp/nested.ec should_work/nested.lus}
 PASS: ./myec2c {-o /tmp/nested.c /tmp/nested.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nested.lus
 PASS: ./lus2lic {-2c should_work/nested.lus -n nested}
-PASS: gcc nested_nested.c nested_nested_loop.c 
+PASS: gcc nested_nested.c nested_nested_ext.c nested_nested_loop.c 
 PASS: ./lus2lic {-o /tmp/Gyroscope.lic should_work/Gyroscope.lus}
 PASS: ./lus2lic {-ec -o /tmp/Gyroscope.ec should_work/Gyroscope.lus}
 PASS: ./myec2c {-o /tmp/Gyroscope.c /tmp/Gyroscope.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/Gyroscope.lus
 PASS: ./lus2lic {-2c should_work/Gyroscope.lus -n Gyroscope}
-PASS: gcc Gyroscope_Gyroscope.c Gyroscope_Gyroscope_loop.c 
+PASS: gcc Gyroscope_Gyroscope.c Gyroscope_Gyroscope_ext.c Gyroscope_Gyroscope_loop.c 
 PASS: ./lus2lic {-o /tmp/test_map.lic should_work/test_map.lus}
 PASS: ./lus2lic {-ec -o /tmp/test_map.ec should_work/test_map.lus}
 PASS: ./myec2c {-o /tmp/test_map.c /tmp/test_map.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/test_map.lus
 PASS: ./lus2lic {-2c should_work/test_map.lus -n test_map}
-PASS: gcc test_map_test_map.c test_map_test_map_loop.c 
+PASS: gcc test_map_test_map.c test_map_test_map_ext.c test_map_test_map_loop.c 
 PASS: ./lus2lic {-o /tmp/followed_by.lic should_work/followed_by.lus}
 PASS: ./lus2lic {-ec -o /tmp/followed_by.ec should_work/followed_by.lus}
 PASS: ./myec2c {-o /tmp/followed_by.c /tmp/followed_by.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/followed_by.lus
 PASS: ./lus2lic {-2c should_work/followed_by.lus -n followed_by}
-PASS: gcc followed_by_followed_by.c followed_by_followed_by_loop.c 
+PASS: gcc followed_by_followed_by.c followed_by_followed_by_ext.c followed_by_followed_by_loop.c 
 PASS: ./lus2lic {-o /tmp/asservi.lic should_work/asservi.lus}
 PASS: ./lus2lic {-ec -o /tmp/asservi.ec should_work/asservi.lus}
 PASS: ./myec2c {-o /tmp/asservi.c /tmp/asservi.ec}
@@ -1104,13 +1104,13 @@ PASS: ./lus2lic {-ec -o /tmp/rediter.ec should_work/rediter.lus}
 PASS: ./myec2c {-o /tmp/rediter.c /tmp/rediter.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/rediter.lus
 PASS: ./lus2lic {-2c should_work/rediter.lus -n rediter}
-PASS: gcc rediter_rediter.c rediter_rediter_loop.c 
+PASS: gcc rediter_rediter.c rediter_rediter_ext.c rediter_rediter_loop.c 
 PASS: ./lus2lic {-o /tmp/mapdeRed.lic should_work/mapdeRed.lus}
 PASS: ./lus2lic {-ec -o /tmp/mapdeRed.ec should_work/mapdeRed.lus}
 PASS: ./myec2c {-o /tmp/mapdeRed.c /tmp/mapdeRed.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mapdeRed.lus
 PASS: ./lus2lic {-2c should_work/mapdeRed.lus -n mapdeRed}
-PASS: gcc mapdeRed_mapdeRed.c mapdeRed_mapdeRed_loop.c 
+PASS: gcc mapdeRed_mapdeRed.c mapdeRed_mapdeRed_ext.c mapdeRed_mapdeRed_loop.c 
 PASS: ./lus2lic {-o /tmp/modelInst.lic should_work/modelInst.lus}
 PASS: ./lus2lic {-ec -o /tmp/modelInst.ec should_work/modelInst.lus}
 PASS: ./myec2c {-o /tmp/modelInst.c /tmp/modelInst.ec}
@@ -1121,19 +1121,19 @@ PASS: ./lus2lic {-ec -o /tmp/dependeur_struct.ec should_work/dependeur_struct.lu
 PASS: ./myec2c {-o /tmp/dependeur_struct.c /tmp/dependeur_struct.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/dependeur_struct.lus
 PASS: ./lus2lic {-2c should_work/dependeur_struct.lus -n dependeur_struct}
-PASS: gcc dependeur_struct_dependeur_struct.c dependeur_struct_dependeur_struct_loop.c 
+PASS: gcc dependeur_struct_dependeur_struct.c dependeur_struct_dependeur_struct_ext.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}
 PASS: ./myec2c {-o /tmp/minmax4_bis.c /tmp/minmax4_bis.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minmax4_bis.lus
 PASS: ./lus2lic {-2c should_work/minmax4_bis.lus -n minmax4_bis}
-PASS: gcc minmax4_bis_minmax4_bis.c minmax4_bis_minmax4_bis_loop.c 
+PASS: gcc minmax4_bis_minmax4_bis.c minmax4_bis_minmax4_bis_ext.c minmax4_bis_minmax4_bis_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/test_struct.lus -n test_struct}
-PASS: gcc test_struct_test_struct.c test_struct_test_struct_loop.c 
+PASS: gcc test_struct_test_struct.c test_struct_test_struct_ext.c test_struct_test_struct_loop.c 
 PASS: ./lus2lic {-o /tmp/modes3x2_v4.lic should_work/modes3x2_v4.lus}
 PASS: ./lus2lic {-ec -o /tmp/modes3x2_v4.ec should_work/modes3x2_v4.lus}
 FAIL: Try ec2c on the result: ./myec2c {-o /tmp/modes3x2_v4.c /tmp/modes3x2_v4.ec}
@@ -1142,13 +1142,13 @@ PASS: ./lus2lic {-ec -o /tmp/uu.ec should_work/uu.lus}
 PASS: ./myec2c {-o /tmp/uu.c /tmp/uu.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/uu.lus
 PASS: ./lus2lic {-2c should_work/uu.lus -n uu}
-PASS: gcc uu_uu.c uu_uu_loop.c 
+PASS: gcc uu_uu.c uu_uu_ext.c uu_uu_loop.c 
 PASS: ./lus2lic {-o /tmp/simpleRed.lic should_work/simpleRed.lus}
 PASS: ./lus2lic {-ec -o /tmp/simpleRed.ec should_work/simpleRed.lus}
 PASS: ./myec2c {-o /tmp/simpleRed.c /tmp/simpleRed.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/simpleRed.lus
 PASS: ./lus2lic {-2c should_work/simpleRed.lus -n simpleRed}
-PASS: gcc simpleRed_simpleRed.c simpleRed_simpleRed_loop.c 
+PASS: gcc simpleRed_simpleRed.c simpleRed_simpleRed_ext.c simpleRed_simpleRed_loop.c 
 PASS: ./lus2lic {-o /tmp/modes3x2_v3.lic should_work/modes3x2_v3.lus}
 PASS: ./lus2lic {-ec -o /tmp/modes3x2_v3.ec should_work/modes3x2_v3.lus}
 FAIL: Try ec2c on the result: ./myec2c {-o /tmp/modes3x2_v3.c /tmp/modes3x2_v3.ec}
@@ -1157,37 +1157,37 @@ PASS: ./lus2lic {-ec -o /tmp/pre_x.ec should_work/pre_x.lus}
 PASS: ./myec2c {-o /tmp/pre_x.c /tmp/pre_x.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/pre_x.lus
 PASS: ./lus2lic {-2c should_work/pre_x.lus -n pre_x}
-PASS: gcc pre_x_pre_x.c pre_x_pre_x_loop.c 
+PASS: gcc pre_x_pre_x.c pre_x_pre_x_ext.c pre_x_pre_x_loop.c 
 PASS: ./lus2lic {-o /tmp/ts01.lic should_work/ts01.lus}
 PASS: ./lus2lic {-ec -o /tmp/ts01.ec should_work/ts01.lus}
 PASS: ./myec2c {-o /tmp/ts01.c /tmp/ts01.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/ts01.lus
 PASS: ./lus2lic {-2c should_work/ts01.lus -n ts01}
-PASS: gcc ts01_ts01.c ts01_ts01_loop.c 
+PASS: gcc ts01_ts01.c ts01_ts01_ext.c ts01_ts01_loop.c 
 PASS: ./lus2lic {-o /tmp/_N_uu.lic should_work/_N_uu.lus}
 PASS: ./lus2lic {-ec -o /tmp/_N_uu.ec should_work/_N_uu.lus}
 PASS: ./myec2c {-o /tmp/_N_uu.c /tmp/_N_uu.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/_N_uu.lus
 PASS: ./lus2lic {-2c should_work/_N_uu.lus -n _N_uu}
-PASS: gcc _N_uu__N_uu.c _N_uu__N_uu_loop.c 
+PASS: gcc _N_uu__N_uu.c _N_uu__N_uu_ext.c _N_uu__N_uu_loop.c 
 PASS: ./lus2lic {-o /tmp/X2.lic should_work/X2.lus}
 PASS: ./lus2lic {-ec -o /tmp/X2.ec should_work/X2.lus}
 PASS: ./myec2c {-o /tmp/X2.c /tmp/X2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/X2.lus
 PASS: ./lus2lic {-2c should_work/X2.lus -n X2}
-PASS: gcc X2_X2.c X2_X2_loop.c 
+PASS: gcc X2_X2.c X2_X2_ext.c X2_X2_loop.c 
 PASS: ./lus2lic {-o /tmp/alias.lic should_work/alias.lus}
 PASS: ./lus2lic {-ec -o /tmp/alias.ec should_work/alias.lus}
 PASS: ./myec2c {-o /tmp/alias.c /tmp/alias.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/alias.lus
 PASS: ./lus2lic {-2c should_work/alias.lus -n alias}
-PASS: gcc alias_alias.c alias_alias_loop.c 
+PASS: gcc alias_alias.c alias_alias_ext.c alias_alias_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/hanane.lus -n hanane}
-PASS: gcc hanane_hanane.c hanane_hanane_loop.c 
+PASS: gcc hanane_hanane.c hanane_hanane_ext.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}
 PASS: ./myec2c {-o /tmp/lustre.c /tmp/lustre.ec}
@@ -1203,85 +1203,85 @@ PASS: ./lus2lic {-ec -o /tmp/predef02.ec should_work/predef02.lus}
 PASS: ./myec2c {-o /tmp/predef02.c /tmp/predef02.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/predef02.lus
 PASS: ./lus2lic {-2c should_work/predef02.lus -n predef02}
-PASS: gcc predef02_predef02.c predef02_predef02_loop.c 
+PASS: gcc predef02_predef02.c predef02_predef02_ext.c predef02_predef02_loop.c 
 PASS: ./lus2lic {-o /tmp/toto.lic should_work/toto.lus}
 PASS: ./lus2lic {-ec -o /tmp/toto.ec should_work/toto.lus}
 PASS: ./myec2c {-o /tmp/toto.c /tmp/toto.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/toto.lus
 PASS: ./lus2lic {-2c should_work/toto.lus -n toto}
-PASS: gcc toto_toto.c toto_toto_loop.c 
+PASS: gcc toto_toto.c toto_toto_ext.c toto_toto_loop.c 
 PASS: ./lus2lic {-o /tmp/minmax6.lic should_work/minmax6.lus}
 PASS: ./lus2lic {-ec -o /tmp/minmax6.ec should_work/minmax6.lus}
 PASS: ./myec2c {-o /tmp/minmax6.c /tmp/minmax6.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minmax6.lus
 PASS: ./lus2lic {-2c should_work/minmax6.lus -n minmax6}
-PASS: gcc minmax6_minmax6.c minmax6_minmax6_loop.c 
+PASS: gcc minmax6_minmax6.c minmax6_minmax6_ext.c minmax6_minmax6_loop.c 
 PASS: ./lus2lic {-o /tmp/ck3.lic should_work/ck3.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck3.ec should_work/ck3.lus}
 PASS: ./myec2c {-o /tmp/ck3.c /tmp/ck3.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/ck3.lus
 PASS: ./lus2lic {-2c should_work/ck3.lus -n ck3}
-PASS: gcc ck3_ck3.c ck3_ck3_loop.c 
+PASS: gcc ck3_ck3.c ck3_ck3_ext.c ck3_ck3_loop.c 
 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
 PASS: ./lus2lic {-2c should_work/zzz.lus -n zzz}
-PASS: gcc zzz_zzz.c zzz_zzz_loop.c 
+PASS: gcc zzz_zzz.c zzz_zzz_ext.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}
 PASS: ./myec2c {-o /tmp/STABLE.c /tmp/STABLE.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/STABLE.lus
 PASS: ./lus2lic {-2c should_work/STABLE.lus -n STABLE}
-PASS: gcc STABLE_STABLE.c STABLE_STABLE_loop.c 
+PASS: gcc STABLE_STABLE.c STABLE_STABLE_ext.c STABLE_STABLE_loop.c 
 PASS: ./lus2lic {-o /tmp/mapiter.lic should_work/mapiter.lus}
 PASS: ./lus2lic {-ec -o /tmp/mapiter.ec should_work/mapiter.lus}
 PASS: ./myec2c {-o /tmp/mapiter.c /tmp/mapiter.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/mapiter.lus
 PASS: ./lus2lic {-2c should_work/mapiter.lus -n mapiter}
-PASS: gcc mapiter_mapiter.c mapiter_mapiter_loop.c 
+PASS: gcc mapiter_mapiter.c mapiter_mapiter_ext.c mapiter_mapiter_loop.c 
 PASS: ./lus2lic {-o /tmp/tuple.lic should_work/tuple.lus}
 PASS: ./lus2lic {-ec -o /tmp/tuple.ec should_work/tuple.lus}
 PASS: ./myec2c {-o /tmp/tuple.c /tmp/tuple.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/tuple.lus
 PASS: ./lus2lic {-2c should_work/tuple.lus -n tuple}
-PASS: gcc tuple_tuple.c tuple_tuple_loop.c 
+PASS: gcc tuple_tuple.c tuple_tuple_ext.c tuple_tuple_loop.c 
 PASS: ./lus2lic {-o /tmp/call02.lic should_work/call02.lus}
 PASS: ./lus2lic {-ec -o /tmp/call02.ec should_work/call02.lus}
 PASS: ./myec2c {-o /tmp/call02.c /tmp/call02.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/call02.lus
 PASS: ./lus2lic {-2c should_work/call02.lus -n call02}
-PASS: gcc call02_call02.c call02_call02_loop.c 
+PASS: gcc call02_call02.c call02_call02_ext.c call02_call02_loop.c 
 PASS: ./lus2lic {-o /tmp/ck7.lic should_work/ck7.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck7.ec should_work/ck7.lus}
 PASS: ./myec2c {-o /tmp/ck7.c /tmp/ck7.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/ck7.lus
 PASS: ./lus2lic {-2c should_work/ck7.lus -n ck7}
-PASS: gcc ck7_ck7.c ck7_ck7_loop.c 
+PASS: gcc ck7_ck7.c ck7_ck7_ext.c ck7_ck7_loop.c 
 PASS: ./lus2lic {-o /tmp/nc10.lic should_work/nc10.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc10.ec should_work/nc10.lus}
 PASS: ./myec2c {-o /tmp/nc10.c /tmp/nc10.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc10.lus
 PASS: ./lus2lic {-2c should_work/nc10.lus -n nc10}
-PASS: gcc nc10_nc10.c nc10_nc10_loop.c 
+PASS: gcc nc10_nc10.c nc10_nc10_ext.c nc10_nc10_loop.c 
 PASS: ./lus2lic {-o /tmp/triSel.lic should_work/triSel.lus}
 PASS: ./lus2lic {-ec -o /tmp/triSel.ec should_work/triSel.lus}
 PASS: ./myec2c {-o /tmp/triSel.c /tmp/triSel.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/triSel.lus
 PASS: ./lus2lic {-2c should_work/triSel.lus -n triSel}
-PASS: gcc triSel_triSel.c triSel_triSel_loop.c 
+PASS: gcc triSel_triSel.c triSel_triSel_ext.c triSel_triSel_loop.c 
 PASS: ./lus2lic {-o /tmp/redoptest.lic should_work/redoptest.lus}
 PASS: ./lus2lic {-ec -o /tmp/redoptest.ec should_work/redoptest.lus}
 PASS: ./myec2c {-o /tmp/redoptest.c /tmp/redoptest.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/redoptest.lus
 PASS: ./lus2lic {-2c should_work/redoptest.lus -n redoptest}
-PASS: gcc redoptest_redoptest.c redoptest_redoptest_loop.c 
+PASS: gcc redoptest_redoptest.c redoptest_redoptest_ext.c redoptest_redoptest_loop.c 
 PASS: ./lus2lic {-o /tmp/flo.lic should_work/flo.lus}
 PASS: ./lus2lic {-ec -o /tmp/flo.ec should_work/flo.lus}
 PASS: ./myec2c {-o /tmp/flo.c /tmp/flo.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/flo.lus
 PASS: ./lus2lic {-2c should_work/flo.lus -n flo}
-PASS: gcc flo_flo.c flo_flo_loop.c 
+PASS: gcc flo_flo.c flo_flo_ext.c flo_flo_loop.c 
 PASS: ./lus2lic {-o /tmp/cond01.lic should_work/cond01.lus}
 PASS: ./lus2lic {-ec -o /tmp/cond01.ec should_work/cond01.lus}
 PASS: ./myec2c {-o /tmp/cond01.c /tmp/cond01.ec}
@@ -1292,31 +1292,31 @@ PASS: ./lus2lic {-ec -o /tmp/test_boolred.ec should_work/test_boolred.lus}
 PASS: ./myec2c {-o /tmp/test_boolred.c /tmp/test_boolred.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/test_boolred.lus
 PASS: ./lus2lic {-2c should_work/test_boolred.lus -n test_boolred}
-PASS: gcc test_boolred_test_boolred.c test_boolred_test_boolred_loop.c 
+PASS: gcc test_boolred_test_boolred.c test_boolred_test_boolred_ext.c test_boolred_test_boolred_loop.c 
 PASS: ./lus2lic {-o /tmp/shiftFill_ludic.lic should_work/shiftFill_ludic.lus}
 PASS: ./lus2lic {-ec -o /tmp/shiftFill_ludic.ec should_work/shiftFill_ludic.lus}
 PASS: ./myec2c {-o /tmp/shiftFill_ludic.c /tmp/shiftFill_ludic.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/shiftFill_ludic.lus
 PASS: ./lus2lic {-2c should_work/shiftFill_ludic.lus -n shiftFill_ludic}
-PASS: gcc shiftFill_ludic_shiftFill_ludic.c shiftFill_ludic_shiftFill_ludic_loop.c 
+PASS: gcc shiftFill_ludic_shiftFill_ludic.c shiftFill_ludic_shiftFill_ludic_ext.c shiftFill_ludic_shiftFill_ludic_loop.c 
 PASS: ./lus2lic {-o /tmp/after.lic should_work/after.lus}
 PASS: ./lus2lic {-ec -o /tmp/after.ec should_work/after.lus}
 PASS: ./myec2c {-o /tmp/after.c /tmp/after.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/after.lus
 PASS: ./lus2lic {-2c should_work/after.lus -n after}
-PASS: gcc after_after.c after_after_loop.c 
+PASS: gcc after_after.c after_after_ext.c after_after_loop.c 
 PASS: ./lus2lic {-o /tmp/arrays.lic should_work/arrays.lus}
 PASS: ./lus2lic {-ec -o /tmp/arrays.ec should_work/arrays.lus}
 PASS: ./myec2c {-o /tmp/arrays.c /tmp/arrays.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/arrays.lus
 PASS: ./lus2lic {-2c should_work/arrays.lus -n arrays}
-PASS: gcc arrays_arrays.c arrays_arrays_loop.c 
+PASS: gcc arrays_arrays.c arrays_arrays_ext.c arrays_arrays_loop.c 
 PASS: ./lus2lic {-o /tmp/nc3.lic should_work/nc3.lus}
 PASS: ./lus2lic {-ec -o /tmp/nc3.ec should_work/nc3.lus}
 PASS: ./myec2c {-o /tmp/nc3.c /tmp/nc3.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/nc3.lus
 PASS: ./lus2lic {-2c should_work/nc3.lus -n nc3}
-PASS: gcc nc3_nc3.c nc3_nc3_loop.c 
+PASS: gcc nc3_nc3.c nc3_nc3_ext.c nc3_nc3_loop.c 
 PASS: ./lus2lic {-o /tmp/speedcontrol.lic should_work/speedcontrol.lus}
 PASS: ./lus2lic {-ec -o /tmp/speedcontrol.ec should_work/speedcontrol.lus}
 PASS: ./myec2c {-o /tmp/speedcontrol.c /tmp/speedcontrol.ec}
@@ -1327,25 +1327,25 @@ PASS: ./lus2lic {-ec -o /tmp/iterate.ec should_work/iterate.lus}
 PASS: ./myec2c {-o /tmp/iterate.c /tmp/iterate.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/iterate.lus
 PASS: ./lus2lic {-2c should_work/iterate.lus -n iterate}
-PASS: gcc iterate_iterate.c iterate_iterate_loop.c 
+PASS: gcc iterate_iterate.c iterate_iterate_ext.c iterate_iterate_loop.c 
 PASS: ./lus2lic {-o /tmp/PCOND.lic should_work/PCOND.lus}
 PASS: ./lus2lic {-ec -o /tmp/PCOND.ec should_work/PCOND.lus}
 PASS: ./myec2c {-o /tmp/PCOND.c /tmp/PCOND.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/PCOND.lus
 PASS: ./lus2lic {-2c should_work/PCOND.lus -n PCOND}
-PASS: gcc PCOND_PCOND.c PCOND_PCOND_loop.c 
+PASS: gcc PCOND_PCOND.c PCOND_PCOND_ext.c PCOND_PCOND_loop.c 
 PASS: ./lus2lic {-o /tmp/EDGE.lic should_work/EDGE.lus}
 PASS: ./lus2lic {-ec -o /tmp/EDGE.ec should_work/EDGE.lus}
 PASS: ./myec2c {-o /tmp/EDGE.c /tmp/EDGE.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/EDGE.lus
 PASS: ./lus2lic {-2c should_work/EDGE.lus -n EDGE}
-PASS: gcc EDGE_EDGE.c EDGE_EDGE_loop.c 
+PASS: gcc EDGE_EDGE.c EDGE_EDGE_ext.c EDGE_EDGE_loop.c 
 PASS: ./lus2lic {-o /tmp/call03.lic should_work/call03.lus}
 PASS: ./lus2lic {-ec -o /tmp/call03.ec should_work/call03.lus}
 PASS: ./myec2c {-o /tmp/call03.c /tmp/call03.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/call03.lus
 PASS: ./lus2lic {-2c should_work/call03.lus -n call03}
-PASS: gcc call03_call03.c call03_call03_loop.c 
+PASS: gcc call03_call03.c call03_call03_ext.c call03_call03_loop.c 
 PASS: ./lus2lic {-o /tmp/modes3x2-simu.lic should_work/modes3x2-simu.lus}
 PASS: ./lus2lic {-ec -o /tmp/modes3x2-simu.ec should_work/modes3x2-simu.lus}
 FAIL: Try ec2c on the result: ./myec2c {-o /tmp/modes3x2-simu.c /tmp/modes3x2-simu.ec}
@@ -1354,19 +1354,19 @@ PASS: ./lus2lic {-ec -o /tmp/count.ec should_work/count.lus}
 PASS: ./myec2c {-o /tmp/count.c /tmp/count.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/count.lus
 PASS: ./lus2lic {-2c should_work/count.lus -n count}
-PASS: gcc count_count.c count_count_loop.c 
+PASS: gcc count_count.c count_count_ext.c count_count_loop.c 
 PASS: ./lus2lic {-o /tmp/ck2.lic should_work/ck2.lus}
 PASS: ./lus2lic {-ec -o /tmp/ck2.ec should_work/ck2.lus}
 PASS: ./myec2c {-o /tmp/ck2.c /tmp/ck2.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/ck2.lus
 PASS: ./lus2lic {-2c should_work/ck2.lus -n ck2}
-PASS: gcc ck2_ck2.c ck2_ck2_loop.c 
+PASS: gcc ck2_ck2.c ck2_ck2_ext.c ck2_ck2_loop.c 
 PASS: ./lus2lic {-o /tmp/X.lic should_work/X.lus}
 PASS: ./lus2lic {-ec -o /tmp/X.ec should_work/X.lus}
 PASS: ./myec2c {-o /tmp/X.c /tmp/X.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/X.lus
 PASS: ./lus2lic {-2c should_work/X.lus -n X}
-PASS: gcc X_X.c X_X_loop.c 
+PASS: gcc X_X.c X_X_ext.c X_X_loop.c 
 PASS: ./lus2lic {-o /tmp/Condact.lic should_work/Condact.lus}
 PASS: ./lus2lic {-ec -o /tmp/Condact.ec should_work/Condact.lus}
 PASS: ./myec2c {-o /tmp/Condact.c /tmp/Condact.ec}
@@ -1377,61 +1377,61 @@ PASS: ./lus2lic {-ec -o /tmp/poussoir.ec should_work/poussoir.lus}
 PASS: ./myec2c {-o /tmp/poussoir.c /tmp/poussoir.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/poussoir.lus
 PASS: ./lus2lic {-2c should_work/poussoir.lus -n poussoir}
-PASS: gcc poussoir_poussoir.c poussoir_poussoir_loop.c 
+PASS: gcc poussoir_poussoir.c poussoir_poussoir_ext.c poussoir_poussoir_loop.c 
 PASS: ./lus2lic {-o /tmp/SWITCH1.lic should_work/SWITCH1.lus}
 PASS: ./lus2lic {-ec -o /tmp/SWITCH1.ec should_work/SWITCH1.lus}
 PASS: ./myec2c {-o /tmp/SWITCH1.c /tmp/SWITCH1.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/SWITCH1.lus
 PASS: ./lus2lic {-2c should_work/SWITCH1.lus -n SWITCH1}
-PASS: gcc SWITCH1_SWITCH1.c SWITCH1_SWITCH1_loop.c 
+PASS: gcc SWITCH1_SWITCH1.c SWITCH1_SWITCH1_ext.c SWITCH1_SWITCH1_loop.c 
 PASS: ./lus2lic {-o /tmp/clock1_2ms.lic should_work/clock1_2ms.lus}
 PASS: ./lus2lic {-ec -o /tmp/clock1_2ms.ec should_work/clock1_2ms.lus}
 PASS: ./myec2c {-o /tmp/clock1_2ms.c /tmp/clock1_2ms.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/clock1_2ms.lus
 PASS: ./lus2lic {-2c should_work/clock1_2ms.lus -n clock1_2ms}
-PASS: gcc clock1_2ms_clock1_2ms.c clock1_2ms_clock1_2ms_loop.c 
+PASS: gcc clock1_2ms_clock1_2ms.c clock1_2ms_clock1_2ms_ext.c clock1_2ms_clock1_2ms_loop.c 
 PASS: ./lus2lic {-o /tmp/decl.lic should_work/decl.lus}
 PASS: ./lus2lic {-ec -o /tmp/decl.ec should_work/decl.lus}
 PASS: ./myec2c {-o /tmp/decl.c /tmp/decl.ec}
 FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/decl.lus
 PASS: ./lus2lic {-2c should_work/decl.lus -n decl}
-FAIL: Check that the generated C code compiles  : gcc decl_decl.c decl_decl_loop.c 
+FAIL: Check that the generated C code compiles  : gcc decl_decl.c decl_decl_ext.c decl_decl_loop.c 
 PASS: ./lus2lic {-o /tmp/bred_lv4.lic should_work/bred_lv4.lus}
 PASS: ./lus2lic {-ec -o /tmp/bred_lv4.ec should_work/bred_lv4.lus}
 PASS: ./myec2c {-o /tmp/bred_lv4.c /tmp/bred_lv4.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/bred_lv4.lus
 PASS: ./lus2lic {-2c should_work/bred_lv4.lus -n bred_lv4}
-PASS: gcc bred_lv4_bred_lv4.c bred_lv4_bred_lv4_loop.c 
+PASS: gcc bred_lv4_bred_lv4.c bred_lv4_bred_lv4_ext.c bred_lv4_bred_lv4_loop.c 
 PASS: ./lus2lic {-o /tmp/trivial2.lic should_work/trivial2.lus}
 PASS: ./lus2lic {-ec -o /tmp/trivial2.ec should_work/trivial2.lus}
 PASS: ./myec2c {-o /tmp/trivial2.c /tmp/trivial2.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/trivial2.lus
 PASS: ./lus2lic {-2c should_work/trivial2.lus -n trivial2}
-PASS: gcc trivial2_trivial2.c trivial2_trivial2_loop.c 
+PASS: gcc trivial2_trivial2.c trivial2_trivial2_ext.c trivial2_trivial2_loop.c 
 PASS: ./lus2lic {-o /tmp/param_node.lic should_work/param_node.lus}
 PASS: ./lus2lic {-ec -o /tmp/param_node.ec should_work/param_node.lus}
 PASS: ./myec2c {-o /tmp/param_node.c /tmp/param_node.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/param_node.lus
 PASS: ./lus2lic {-2c should_work/param_node.lus -n param_node}
-PASS: gcc param_node_param_node.c param_node_param_node_loop.c 
+PASS: gcc param_node_param_node.c param_node_param_node_ext.c param_node_param_node_loop.c 
 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
 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 
+FAIL: Check that the generated C code compiles  : gcc simple_simple.c simple_simple_ext.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}
 PASS: ./myec2c {-o /tmp/func_with_body.c /tmp/func_with_body.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/func_with_body.lus
 PASS: ./lus2lic {-2c should_work/func_with_body.lus -n func_with_body}
-PASS: gcc func_with_body_func_with_body.c func_with_body_func_with_body_loop.c 
+PASS: gcc func_with_body_func_with_body.c func_with_body_func_with_body_ext.c func_with_body_func_with_body_loop.c 
 PASS: ./lus2lic {-o /tmp/minus.lic should_work/minus.lus}
 PASS: ./lus2lic {-ec -o /tmp/minus.ec should_work/minus.lus}
 PASS: ./myec2c {-o /tmp/minus.c /tmp/minus.ec}
 PASS: ../utils/test_lus2lic_no_node should_work/minus.lus
 PASS: ./lus2lic {-2c should_work/minus.lus -n minus}
-PASS: gcc minus_minus.c minus_minus_loop.c 
+PASS: gcc minus_minus.c minus_minus_ext.c minus_minus_loop.c 
 PASS: ./lus2lic {-o /tmp/remplissage-1.0.lic should_work/remplissage-1.0.lus}
 PASS: ./lus2lic {-ec -o /tmp/remplissage-1.0.ec should_work/remplissage-1.0.lus}
 PASS: ./myec2c {-o /tmp/remplissage-1.0.c /tmp/remplissage-1.0.ec}
@@ -1507,9 +1507,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman
 
 		=== lus2lic Summary ===
 
-# of expected passes		1327
-# of unexpected failures	110
+# of expected passes		1336
+# of unexpected failures	101
 # of unexpected successes	21
 # of expected failures		37
-testcase ./lus2lic.tests/non-reg.exp completed in 140 seconds
+testcase ./lus2lic.tests/non-reg.exp completed in 131 seconds
 testcase ./lus2lic.tests/progression.exp completed in 0 seconds
diff --git a/test/lus2lic.tests/non-reg.exp b/test/lus2lic.tests/non-reg.exp
index 12eac416913fb2bf65d025122d3d4de5831b6777..50f03ca3793a64e32d8c065b4f6d41b8a5311cd2 100644
--- a/test/lus2lic.tests/non-reg.exp
+++ b/test/lus2lic.tests/non-reg.exp
@@ -32,7 +32,11 @@ foreach f $ok_files {
         wait -i $id5
 
         if { [emptyfile "${basef}_${basef}.c"] } {
-        set id6 [should_work "Check that the generated C code compiles  " "gcc ${basef}_${basef}.c ${basef}_${basef}_loop.c"]
+            if { [emptyfile "${basef}_${basef}_ext.c"] } {
+                set id6 [should_work "Check that the generated C code compiles  " "gcc ${basef}_${basef}.c ${basef}_${basef}_ext.c ${basef}_${basef}_loop.c"]
+            } else {
+                set id6 [should_work "Check that the generated C code compiles  " "gcc ${basef}_${basef}.c ${basef}_${basef}_loop.c"]
+            }
             wait -i $id6
             catch { exp_close -i $id6 }
             catch { exp_wait  -i $id6 } output
diff --git a/test/lus2lic.time b/test/lus2lic.time
index 60e57f011cedceeeee6776586af482f94caa69bf..c9657f639cce96aa6204a8c91cdd1c199e3969ac 100644
--- a/test/lus2lic.time
+++ b/test/lus2lic.time
@@ -1,2 +1,2 @@
-testcase ./lus2lic.tests/non-reg.exp completed in 140 seconds
+testcase ./lus2lic.tests/non-reg.exp completed in 131 seconds
 testcase ./lus2lic.tests/progression.exp completed in 0 seconds