From b3567b30ffc070a20ea4faab0206f7834d15b32c Mon Sep 17 00:00:00 2001 From: pascal <pascal@babasse.(none)> Date: Sat, 7 Jul 2012 20:34:17 +0200 Subject: [PATCH] ... --- ALIRE | 21 +++++++++++++++++++++ map.lus | 11 ++++++++--- map2.lus | 13 +++++++++++++ src/eff.ml | 8 +++++--- src/ident.ml | 13 ++++++++++--- src/ident.mli | 3 +++ src/lazyCompiler.ml | 3 +++ 7 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 map2.lus diff --git a/ALIRE b/ALIRE index 488da445..2aa89720 100644 --- a/ALIRE +++ b/ALIRE @@ -20,3 +20,24 @@ En cours : dump du LicPrg : elle n'est plus faite au fur et à mesure dans LasyCompiler + +ETAT COURANT + +19/07 + +- completement séparé la compil de l'affichage, du coup + on a débranché l'ancien source_to_source + +- l'ajout d'alias sur type array est fait par une passe source 2 source : + ca fait un exemple de traitement s2s simple, + c'est plus propre qu'avant ou c'etait fait par effet de bord + a l'affichage +--> consequence co-latterale : les clashs sur nom de type introduit + sont gérés de manière plus "smart" + +==> reste a faire : + refaire les traitements source_to_source !! + + + + diff --git a/map.lus b/map.lus index faa3c841..c98198d9 100644 --- a/map.lus +++ b/map.lus @@ -1,13 +1,18 @@ ---node titi = map<<+,4>>; +node myplus<<type t>>(x, y : t) returns (o : t); +let + o = x + y; +tel + +node titi<<type t>> = map<<myplus<<t>>,4>>; node toto(x,y: int^4) returns (o: int^4); let (* o = map<<+, 4>>(x,y); *) - o = titi(x,y); + o = titi<<int>>(x,y); tel node tutu(x,y: real^4) returns (o: real^4); let - o = titi(x,y); + o = titi<<real>>(x,y); tel diff --git a/map2.lus b/map2.lus new file mode 100644 index 00000000..ee1ea4a4 --- /dev/null +++ b/map2.lus @@ -0,0 +1,13 @@ + +node titi = map<<+,4>>; + +node toto(x,y: int^4) returns (o: int^4); +let + (* o = map<<+, 4>>(x,y); *) + o = titi(x,y); +tel + +node tutu(x,y: real^4) returns (o: real^4); +let + o = titi(x,y); +tel diff --git a/src/eff.ml b/src/eff.ml index 8a514ca0..c6632c7b 100644 --- a/src/eff.ml +++ b/src/eff.ml @@ -467,13 +467,15 @@ let (var_are_compatible : var_info -> var_info -> bool) = (clock_are_equals (snd v1.var_clock_eff) (snd v2.var_clock_eff)) let ident_of_type = function - | Bool_type_eff -> Ident.long_of_string "bool" - | Int_type_eff -> Ident.long_of_string "int" - | Real_type_eff -> Ident.long_of_string "real" + | Bool_type_eff -> Ident.out_of_pack "bool" + | Int_type_eff -> Ident.out_of_pack "int" + | Real_type_eff -> Ident.out_of_pack "real" | External_type_eff id | Abstract_type_eff (id, _) | Enum_type_eff (id, _) | Struct_type_eff (id, _) -> id + | Any -> Ident.out_of_pack "any" + | Overload -> Ident.out_of_pack "anynum" | _ -> assert false diff --git a/src/ident.ml b/src/ident.ml index 38f54c5e..6e21cd47 100644 --- a/src/ident.ml +++ b/src/ident.ml @@ -67,9 +67,14 @@ let (pack_name_to_string : pack_name -> string) = let (string_of_long : long -> string) = - fun (pn, id) -> - if !Global.ec then pn ^"__"^ id else - if !Global.lv4 then pn ^"__"^ id else pn ^"::"^ id + fun (pn, id) -> + let sep = + if !Global.ec || !Global.lv4 then "__" else "::" + in + match pn with + | "" -> id + | _ -> Printf.sprintf "%s%s%s" pn sep id + let (string_of_long2 : long -> string) = fun (pn, id) -> pn ^"::"^ id @@ -115,6 +120,8 @@ let idref_of_string s = ( | _ -> raise (Failure ("idref_of_string: \""^s^"\" not a proper ident")) ) +let out_of_pack s = ("", s) + let (long_of_string : string -> long) = fun s -> match (Str.split (Str.regexp "::") s) with diff --git a/src/ident.mli b/src/ident.mli index 5bf0b34c..4916fa27 100644 --- a/src/ident.mli +++ b/src/ident.mli @@ -22,6 +22,9 @@ val long_of_string : string -> long val make_long : pack_name -> t -> long +(* lift simple string to long WITH EMPTY PACK *) +val out_of_pack : string -> long + val set_dft_pack_name : pack_name -> unit (* TODO: a renommer et a abstraire ?? diff --git a/src/lazyCompiler.ml b/src/lazyCompiler.ml index 1dc699d7..6d25ccba 100644 --- a/src/lazyCompiler.ml +++ b/src/lazyCompiler.ml @@ -1142,6 +1142,8 @@ and (make_alias_node : node_exp -> node_key -> local_env -> id_solver -> in alias_node +(* +OBSOLETE and gen_code (provide_flag:bool) (current_env:Eff.node_env) (nexp: Eff.node_exp) : unit = let nk = nexp.node_key_eff in @@ -1195,6 +1197,7 @@ and gen_code (provide_flag:bool) (current_env:Eff.node_env) (nexp: Eff.node_exp) (* output_string !Global.oc str *) () ) +*) (** builds a [node_key] and calls [node_check] *) and (solve_node_idref : t -> SymbolTab.t -> bool -> Ident.pack_name -> Ident.idref -> -- GitLab