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