From f9408138ddebe05b9f1e45b474c53d96e6a8c2a9 Mon Sep 17 00:00:00 2001
From: Erwan Jahier <jahier@imag.fr>
Date: Tue, 11 Mar 2008 17:16:41 +0100
Subject: [PATCH] Remove in node_info_eff the distinction between user nodes,
 and predefined nodes. The idea is that the Predef module will contain all the
 necessary information to build a node_info_eff for each of the predefined
 operator.

It migth makes thing more difficult to deal with overling, but we'll
see later how to fix that. Anyway, not all the predefinef operator
are overloaded, so...
---
 src/compiledData.ml | 44 ++++++++------------------------------------
 src/lazyCompiler.ml | 33 +++++++++++++--------------------
 2 files changed, 21 insertions(+), 56 deletions(-)

diff --git a/src/compiledData.ml b/src/compiledData.ml
index 2ddfe2c3..31a8baad 100644
--- a/src/compiledData.ml
+++ b/src/compiledData.ml
@@ -1,4 +1,4 @@
-(** Time-stamp: <modified the 11/03/2008 (at 16:34) by Erwan Jahier> *)
+(** Time-stamp: <modified the 11/03/2008 (at 16:53) by Erwan Jahier> *)
 
 (** 
 
@@ -215,7 +215,7 @@ and clock_eff = (* XXX generalize me!*)
 
 
 (**********************************************************************************)
-(** [node_info_eff] correspond à une instance de template (ou, cas
+(** [node_exp_eff] correspond à une instance de template (ou, cas
     limite, de noeud sans param statique).
 
     La clé est un couple ident/liste d'arguments statiques effectifs
@@ -224,7 +224,7 @@ and clock_eff = (* XXX generalize me!*)
     entrée (0..nb entrées-1). Les formal-clocks sont crées au cours du
     type-checking (et pas du clock-checking)
 *)
-and node_info_eff = {
+and node_exp_eff = {
   node_key_eff : node_key ;
   inlist_eff   : type_eff list ;
   outlist_eff  : type_eff list ;
@@ -252,23 +252,6 @@ and static_arg_eff =
   | TypeStaticArgEff  of (Ident.t * type_eff)
   | NodeStaticArgEff  of (Ident.t * node_exp_eff)
 
-(** [node_exp_eff]
-
-	Version chéckée des node_exp (expression dénotant une opération).
-	Utilisée dans les expressions call, mais aussi comme argument statique
-	ou comme définition de noeud (alias). 
-	Union entre opérateur prédéfini, user_ext_node_exp_eff et user_node_exp_eff
-*)
-and node_exp_eff = 
-(* XXX faire sauter ce niveau egalement ???? 
-   ce serait cool. Mais ca necessite d'etre capable de produire un 
-   node_info_eff à chacun des operateurs predefinis.
-
-   Sans la surcharge de + (and friends), ce serait finger in the nose...
-*)
-  | PredefEff of by_pos_op 
-  | NodeEff of node_info_eff
-
 
 
 (****************************************************************************)
@@ -288,9 +271,8 @@ type 'a check_flag =
 
 
 let (profile_of_node_exp_eff : node_exp_eff -> type_eff list * type_eff list) =
-  function
-    | PredefEff _ -> assert false (* finish me? *)
-    | NodeEff  ne -> (ne.inlist_eff, ne.outlist_eff)
+  fun ne -> 
+    (ne.inlist_eff, ne.outlist_eff)
 
 (****************************************************************************)
 (* currently not used *)
@@ -507,13 +489,8 @@ let rec string_of_node_key (nkey: node_key) = (
     match sa with
       | ConstStaticArgEff (id, ceff) -> sprintf "const %s" (string_of_const_eff ceff)
       | TypeStaticArgEff  (id, teff) -> sprintf "type %s" (string_of_type_eff teff)
-      | NodeStaticArgEff  (id, opeff) -> (
-	  match opeff with
-	    | PredefEff posop -> 
-		sprintf "operator %s" (SyntaxTreeDump.op2string posop)
-	    | NodeEff neff -> 
-		sprintf "node %s" (string_of_node_key neff.node_key_eff)
-	) 
+      | NodeStaticArgEff  (id, opeff) ->
+	  sprintf "node %s" (string_of_node_key opeff.node_key_eff)
   in
     match nkey with
       | (ik, []) -> Ident.string_of_long ik
@@ -524,7 +501,7 @@ let rec string_of_node_key (nkey: node_key) = (
 
 
 
-let (string_of_node_info_eff: node_info_eff -> string) =
+let (string_of_node_exp_eff: node_exp_eff -> string) =
   fun neff -> 
     (string_of_node_key neff.node_key_eff) ^ 
       "(" ^
@@ -536,11 +513,6 @@ let (string_of_node_info_eff: node_info_eff -> string) =
       "\n"
 
 
-let (string_of_node_exp_eff: node_exp_eff -> string) =
-  fun neff -> 
-    match neff with
-      | PredefEff pn -> SyntaxTreeDump.op2string pn
-      | NodeEff neff -> string_of_node_info_eff neff
 
 let string_of_clock (ck : clock_eff) = (
   match ck with
diff --git a/src/lazyCompiler.ml b/src/lazyCompiler.ml
index e19b2c89..3f60f88b 100644
--- a/src/lazyCompiler.ml
+++ b/src/lazyCompiler.ml
@@ -1,4 +1,4 @@
-(** Time-stamp: <modified the 11/03/2008 (at 16:34) by Erwan Jahier> *)
+(** Time-stamp: <modified the 11/03/2008 (at 16:51) by Erwan Jahier> *)
 
 
 open Lxm
@@ -462,20 +462,16 @@ and (node_check_interface_do: t -> CompiledData.node_key -> Lxm.t ->
     let body_node_exp_eff = node_check this nk lxm in
     let prov_node_exp_eff = node_check_do this nk lxm symbols pack_name node_def in
       if 
-	match prov_node_exp_eff, body_node_exp_eff with
-	  | NodeEff prov_node_exp_eff, NodeEff body_node_exp_eff -> (
-	      prov_node_exp_eff.node_key_eff      = body_node_exp_eff.node_key_eff      &&
-		prov_node_exp_eff.inlist_eff        = body_node_exp_eff.inlist_eff        &&
-		prov_node_exp_eff.outlist_eff       = body_node_exp_eff.outlist_eff       &&
-		prov_node_exp_eff.clock_inlist_eff  = body_node_exp_eff.clock_inlist_eff  &&
-		prov_node_exp_eff.clock_outlist_eff = body_node_exp_eff.clock_outlist_eff &&
-		prov_node_exp_eff.has_mem_eff       = body_node_exp_eff.has_mem_eff       &&
-		prov_node_exp_eff.is_safe_eff       = body_node_exp_eff.is_safe_eff       &&
-		match prov_node_exp_eff.def_eff, body_node_exp_eff.def_eff with
-		  | (AbstractEff,_) -> true
-		  | (_,_) -> prov_node_exp_eff.def_eff = body_node_exp_eff.def_eff
-	    )
-	  | _,_ -> assert false 
+	prov_node_exp_eff.node_key_eff      = body_node_exp_eff.node_key_eff      &&
+	prov_node_exp_eff.inlist_eff        = body_node_exp_eff.inlist_eff        &&
+	prov_node_exp_eff.outlist_eff       = body_node_exp_eff.outlist_eff       &&
+	prov_node_exp_eff.clock_inlist_eff  = body_node_exp_eff.clock_inlist_eff  &&
+	prov_node_exp_eff.clock_outlist_eff = body_node_exp_eff.clock_outlist_eff &&
+	prov_node_exp_eff.has_mem_eff       = body_node_exp_eff.has_mem_eff       &&
+	prov_node_exp_eff.is_safe_eff       = body_node_exp_eff.is_safe_eff       &&
+	match prov_node_exp_eff.def_eff, body_node_exp_eff.def_eff with
+	  | (AbstractEff,_) -> true
+	  | (_,_) -> prov_node_exp_eff.def_eff = body_node_exp_eff.def_eff
       then
 	prov_node_exp_eff
       else
@@ -532,7 +528,7 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t ->
 	      fun eq_info -> 
 		finish_me "with with body compilation"; assert false
 	    in
-	      NodeEff {
+	       {
 		node_key_eff  = nk ;
 		inlist_eff    = List.map type_args vars.inlist ;
 		outlist_eff   = List.map type_args vars.outlist;
@@ -568,7 +564,7 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t ->
 		    let vi = Hashtbl.find vars.vartable id in
 		      EvalType.f node_id_solver vi.it.var_type
 		  in
-		    NodeEff {
+		    {
 		      node_key_eff  = nk ;
 		      inlist_eff    = List.map type_args vars.inlist ;
 		      outlist_eff   = List.map type_args vars.outlist;
@@ -579,9 +575,6 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t ->
 		      is_safe_eff  = node_def.it.is_safe;
 		    }
 	  )
-
-
-
 	| Alias node_alias -> (
 	    (* just check that the declared profile (if any) matches with the alias *)
 	    let res = EvalNode.f node_id_solver symbols node_alias in
-- 
GitLab