diff --git a/src/compiledData.ml b/src/compiledData.ml index ed50291783f3c653acf4d5330a1f8dd62a38e578..9cc89bcf215b6a84697d6a1f82221e620b7ef39d 100644 --- a/src/compiledData.ml +++ b/src/compiledData.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 27/05/2008 (at 13:25) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 14:11) by Erwan Jahier> *) (** @@ -126,10 +126,6 @@ and type_eff = | Array_type_eff of type_eff * int | Struct_type_eff of Ident.long * (Ident.t * (type_eff * const_eff option)) list -and var_type = - | Atype of type_eff - | Any - | Overload (* [Overload] is like [Any], except that it can only be [int] or [real] *) (* [type_eff] extended with polymorphic or overloaded variables *) and type_eff_ext = @@ -320,7 +316,7 @@ type 'a check_flag = | Checked of 'a | Incorrect -let type_eff_to_type_eff_ext = function +let rec type_eff_to_type_eff_ext = function | Bool_type_eff -> Bool_type_eff_ext | Int_type_eff -> Int_type_eff_ext | Real_type_eff -> Real_type_eff_ext @@ -335,6 +331,8 @@ let type_eff_to_type_eff_ext = function (fun (id,(teff,copt)) -> (id,(type_eff_to_type_eff_ext teff,copt))) fl) +exception Polymorphic +exception Overloaded let rec type_eff_ext_to_type_eff = function | Bool_type_eff_ext -> Bool_type_eff | Int_type_eff_ext -> Int_type_eff @@ -349,8 +347,8 @@ let rec type_eff_ext_to_type_eff = function List.map (fun (id,(teff,copt)) -> (id,(type_eff_ext_to_type_eff teff,copt))) fl) - | Any -> assert false - | Overload -> assert false + | Any -> raise Polymorphic + | Overload -> raise Overloaded let (profile_of_node_exp_eff : diff --git a/src/compiledDataDump.ml b/src/compiledDataDump.ml index 67ff13cba3a1f383e5af14f84aee6e590a03c2ba..63040f4eb873af4b97c7879f3f7c5854551e47e3 100644 --- a/src/compiledDataDump.ml +++ b/src/compiledDataDump.ml @@ -32,27 +32,33 @@ let rec string_of_const_eff = ( ) ) -and string_of_type_eff = function - | Bool_type_eff -> "bool" - | Int_type_eff -> "int" - | Real_type_eff -> "real" - | External_type_eff i -> long i - | Enum_type_eff (i, sl) -> +and string_of_type_eff_ext = function + | Bool_type_eff_ext -> "bool" + | Int_type_eff_ext -> "int" + | Real_type_eff_ext -> "real" + | External_type_eff_ext i -> long i + | Enum_type_eff_ext (i, sl) -> assert (sl <>[]); let f sep acc s = acc ^ sep ^ (long s) in (List.fold_left (f ", ") (f "" "enum {" (List.hd sl)) (List.tl sl)) ^ "}" - | Array_type_eff (ty, sz) -> sprintf "%s^%d" (string_of_type_eff ty) sz - | Struct_type_eff (i, fl) -> + | Array_type_eff_ext (ty, sz) -> sprintf "%s^%d" (string_of_type_eff_ext ty) sz + | Struct_type_eff_ext (i, fl) -> assert (fl <>[]); - let f sep acc (id, (type_eff, const_eff_opt)) = + let f sep acc (id, (type_eff_ext, const_eff_opt)) = acc ^ sep ^ (Ident.to_string id) ^ " : " ^ - (string_of_type_eff type_eff) ^ + (string_of_type_eff_ext type_eff_ext) ^ match const_eff_opt with None -> "" | Some ce -> " (" ^ (string_of_const_eff ce) ^ ")" in (List.fold_left (f "; ") (f "" " {" (List.hd fl)) (List.tl fl)) ^ "}" + | Any -> "a" + | Overload -> "o" + +and string_of_type_eff teff = string_of_type_eff_ext (type_eff_to_type_eff_ext teff) + + and string_of_type_eff_list = function | [] -> "" | [x] -> string_of_type_eff x @@ -86,18 +92,16 @@ let (string_of_type_decl_list : (Ident.t * type_eff) list -> string -> string) = let str = String.concat sep (List.map string_of_decl tel) in str -let string_of_var_type = function - | Any -> "a" - | Overload -> "o" - | Atype teff -> string_of_type_eff teff +let string_of_decl_ext (id,teff) = + (Ident.to_string id) ^ ":" ^ (string_of_type_eff_ext teff) -let string_of_decl2 (id,teff) = - (Ident.to_string id) ^ ":" ^ (string_of_var_type teff) -let (string_of_type_decl_list2 : (Ident.t * var_type) list -> string -> string) = +let (string_of_type_decl_list_ext : (Ident.t*type_eff_ext) list -> string -> string) = fun tel sep -> - let str = String.concat sep (List.map string_of_decl2 tel) in + let str = String.concat sep (List.map string_of_decl_ext tel) in str + + let string_of_slice_info_eff si_eff = "[" ^ (string_of_int si_eff.se_first) ^ ".." ^ (string_of_int si_eff.se_last) ^ (if si_eff.se_step = 1 then "" else " step " ^ (string_of_int si_eff.se_step)) ^ @@ -253,8 +257,8 @@ let (profile_of_node_exp_eff: node_exp_eff -> string) = ((if neff.def_eff = ExternEff then "extern " else "") ^ (if neff.has_mem_eff then "node " else "function ") ^ (string_of_node_key neff.node_key_eff) ^ - "(" ^ (string_of_type_decl_list2 neff.inlist_eff "; ") ^ ") returns (" ^ - (string_of_type_decl_list2 neff.outlist_eff "; ") ^ ");\n") + "(" ^ (string_of_type_decl_list_ext neff.inlist_eff "; ") ^ ") returns (" ^ + (string_of_type_decl_list_ext neff.outlist_eff "; ") ^ ");\n") let (string_of_node_def : node_def_eff -> string list) = function diff --git a/src/evalType.ml b/src/evalType.ml index 5a38e6e4b9824fce1e69c9044e1e0d1eaf0bcd94..055af69d7c1555150ab2e215fa07b6fb6f0dcd03 100644 --- a/src/evalType.ml +++ b/src/evalType.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 26/05/2008 (at 15:48) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 14:13) by Erwan Jahier> *) open Predef @@ -33,12 +33,9 @@ and (eval_by_pos_type : | CALL_eff node_exp_eff -> let lto = snd (List.split node_exp_eff.it.outlist_eff) in - List.map - (function - | Atype t -> t - | (Any | Overload) -> assert false (* cannot occur for user node *) - ) - lto + (try List.map type_eff_ext_to_type_eff lto + with Polymorphic | Overloaded -> assert false) + | IDENT_eff id -> ( (* [id] migth be a constant, but also a variable *) try [type_of_const_eff (id_solver.id2const id lxm)] diff --git a/src/lazyCompiler.ml b/src/lazyCompiler.ml index ab24f7a7e5366f7a5e12dad562ca5ddd33cd0a23..c519ce3efd17c8c42c4a47ac990a5e20a13f7b23 100644 --- a/src/lazyCompiler.ml +++ b/src/lazyCompiler.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 26/05/2008 (at 16:42) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 14:17) by Erwan Jahier> *) open Lxm @@ -481,7 +481,7 @@ and (node_check_interface_do: t -> CompiledData.node_key -> Lxm.t -> (** [types_are_compatible t1 t2] checks that t1 is compatible with t2, i.e., if t1 = t2 or t1 is abstract and and t2. *) - let type_is_comp (_,t1) (_,t2) = CompiledData.var_type_are_compatible t1 t2 in + let type_is_comp (_,t1) (_,t2) = CompiledData.type_eff_ext_are_compatible t1 t2 in if prov_node_exp_eff.node_key_eff = body_node_exp_eff.node_key_eff && (List.for_all2 type_is_comp @@ -576,10 +576,11 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> | None -> None | Some loclist -> Some (List.map type_args loclist) in + let aux (id,t)= (id, type_eff_to_type_eff_ext t) in { node_key_eff = nk; - inlist_eff = List.map (fun (id,t) -> id, Atype t) inlist; - outlist_eff = List.map (fun (id,t) -> id, Atype t) outlist; + inlist_eff = List.map aux inlist; + outlist_eff = List.map aux outlist; loclist_eff = loclist; clock_inlist_eff = [];(* XXX finish me! *) clock_outlist_eff = [];(* XXX finish me! *) @@ -588,12 +589,6 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> is_safe_eff = node_def.it.is_safe; } in - let var_type_to_type_eff = function - | Atype t -> t - | (Overload | Any) -> - raise (Compile_error ( - lxm, "Cannot alias overloaded or polymorphic operator")) - in let (make_alias_node : CompiledData.node_exp_eff -> CompiledData.node_exp_eff) = fun aliased_node -> (* builds a node that calls the aliased node. It looks like: @@ -609,7 +604,10 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> let var_info_eff = { var_name_eff = id ; var_nature_eff = VarOutput ; - var_type_eff = var_type_to_type_eff te ; + var_type_eff = + try type_eff_ext_to_type_eff te with _ -> + raise (Compile_error ( + lxm, "Cannot alias overloaded or polymorphic operator")) } in LeftVarEff (var_info_eff, lxm) @@ -699,10 +697,15 @@ and (node_check_do: t -> CompiledData.node_key -> Lxm.t -> SymbolTab.t -> in let aux vi = GetEff.typ node_id_solver vi.it.var_type in let (il,ol) = CompiledData.profile_of_node_exp_eff alias_node in - let il = List.map var_type_to_type_eff il - and ol = List.map var_type_to_type_eff ol in - if - List.map aux vi_il <> il || List.map aux vi_ol <> ol + let (il,ol) = + try + (List.map type_eff_ext_to_type_eff il, + List.map type_eff_ext_to_type_eff ol) + with + Polymorphic | Overloaded -> assert false + in + if + List.map aux vi_il <> il || List.map aux vi_ol <> ol then raise (Compile_error ( lxm, "type mismatch in node alias definition")) diff --git a/src/predefSemantics.ml b/src/predefSemantics.ml index cfed966041514ee59f5dca1f19b67de071655a3a..41cf25997786dfe47502df9c87ed3690fbbe0658 100644 --- a/src/predefSemantics.ml +++ b/src/predefSemantics.ml @@ -1,4 +1,4 @@ -(** Time-stamp: <modified the 27/05/2008 (at 11:14) by Erwan Jahier> *) +(** Time-stamp: <modified the 27/05/2008 (at 15:58) by Erwan Jahier> *) open Predef @@ -24,11 +24,12 @@ let (type_eff_list_to_string :type_eff list -> string) = let str_l = List.map CompiledDataDump.string_of_type_eff tel in String.concat "*" str_l -let (var_type_list_to_string : var_type list -> string) = +let (type_eff_ext_list_to_string :type_eff_ext list -> string) = fun tel -> - let str_l = List.map CompiledDataDump.string_of_var_type tel in + let str_l = List.map CompiledDataDump.string_of_type_eff_ext tel in String.concat "*" str_l + let (type_error : type_eff list -> string -> 'a) = fun tel expect -> @@ -45,7 +46,7 @@ let (type_error2 : string -> string -> string -> 'a) = ("\n*** type '" ^ provided ^ "' was provided" ^ (if expect = "" then "" else (" whereas\n*** type '" ^expect^"' was expected")) ^ - (if msg = "" then "" else ("\n*** and " ^ msg))))) + (if msg = "" then "" else ("\n*** " ^ msg))))) let arity_error (v : 'a list) (expect : string) = @@ -88,45 +89,59 @@ type unify_result = | Unif of type_eff | Ko of string (* a msg explaining why the unification failed *) -let var_type2str = CompiledDataDump.string_of_var_type let type_eff2str = CompiledDataDump.string_of_type_eff +let type_eff_ext2str = CompiledDataDump.string_of_type_eff_ext -let (unify : var_type list -> var_type list -> unify_result) = +let (unify : type_eff_ext list -> type_eff list -> unify_result) = let (is_overloadable : type_eff -> bool) = function | Int_type_eff -> true | Real_type_eff -> true | _ -> false in - List.fold_left2 - (fun acc vt1 vt2 -> - match acc,vt1,vt2 with - | Ko msg , _, _ -> acc - | Equal, Any, Atype t2 -> Unif t2 - | Equal, Overload, Atype t2 -> if is_overloadable t2 then Unif t2 else - Ko((type_eff2str t2) ^ " should have type int or real") - - | (Equal|Unif _), Atype t1, Atype t2 -> if t1 = t2 then acc else - Ko((type_eff2str t1) ^ " <> " ^ (type_eff2str t2)) - - | Unif ts, Any, Atype t2 -> if ts = t2 then acc else - Ko((type_eff2str ts) ^ " <> " ^ (type_eff2str t2)) - | Unif ts, Overload, Atype t2 -> - if ts <> t2 then - Ko((type_eff2str ts) ^ " <> " ^ (type_eff2str t2)) - else if (not (is_overloadable t2)) then - Ko((type_eff2str ts) ^ "should be an int or a real") - else - acc - | _,_, (Overload|Any) -> assert false (* cannot occur *) - ) - Equal + let rec (unify_type_eff : type_eff_ext -> type_eff -> unify_result) = + fun t1 t2 -> + if t1 = type_eff_to_type_eff_ext t2 then Equal else + match (t1,t2) with + | Array_type_eff_ext(teff_ext1,i1), Array_type_eff(teff2,i2) -> + if i1 <> i2 then Ko "incompatible array size" else + unify_type_eff teff_ext1 teff2 + + | Struct_type_eff_ext(l1, fl1), Struct_type_eff(l2, fl2) -> + if l1 <> l2 then Ko "incompatible structure" else + let fl1 = List.map (fun (_,(te,_)) -> te) fl1 + and fl2 = List.map (fun (_,(te,_)) -> te) fl2 in + List.fold_left2 unify_do_acc Equal fl1 fl2 + + | Any, t -> Unif t + | Overload, t -> + if is_overloadable t then Unif t else + Ko((type_eff2str t) ^ " should be an integer or a real") + | _ -> + Ko((type_eff_ext2str t1) ^ " and " ^ (type_eff2str t2) ^ + " are not unifiable") + + and (unify_do_acc : + unify_result -> type_eff_ext -> type_eff -> unify_result) = + fun acc te1 te2 -> + match acc, unify_type_eff te1 te2 with + | Equal, Equal -> Equal + | Ko msg, _ + | _, Ko msg -> Ko msg + | Unif t, Equal + | Equal, Unif t -> Unif t + | Unif t1, Unif t2 -> if t1 = t2 then acc else + Ko((type_eff2str t1) ^ " and " ^ (type_eff2str t2) ^ + " are not unifiable") + + in + List.fold_left2 unify_do_acc Equal (*********************************************************************************) (* a few local alias to make the node profile below more readable. *) -let i = Atype Int_type_eff -let r = Atype Real_type_eff -let b = Atype Bool_type_eff +let i = Int_type_eff_ext +let r = Real_type_eff_ext +let b = Bool_type_eff_ext let id str = Ident.of_string str (** A few useful type profiles for simple operators *) @@ -156,15 +171,9 @@ let ooo_profile = [(id "i1",Overload);(id "i2",Overload)], [(id "o",Overload)] (** iterators profiles *) (* [type_to_array_type [x1;...;xn] c] returns the array type [x1^c;...;xn^c] *) let (type_to_array_type: - (Ident.t * var_type) list -> int -> (Ident.t * var_type) list) = + (Ident.t * type_eff_ext) list -> int -> (Ident.t * type_eff_ext) list) = fun l c -> - List.map - (function - | id, Any -> id, Any - | id, Overload -> id, Overload - | id, Atype teff -> id, Atype (Array_type_eff(teff,c)) - ) - l + List.map (fun (id, teff) -> id, Array_type_eff_ext(teff,c)) l (* Extract the node and the constant from a list of static args *) let (get_node_and_constant:static_arg_eff list -> node_exp_eff * int)= @@ -210,8 +219,8 @@ let fillred_profile = lxm, "\n*** type error: the type of node \n " ^ (CompiledDataDump.profile_of_node_exp_eff n) ^ " is not compatible with the use of this iterator.\n "^ - (CompiledDataDump.string_of_var_type t1) ^ " should be equal to " ^ - (CompiledDataDump.string_of_var_type t2) ^ "\n")) + (CompiledDataDump.string_of_type_eff_ext t1) ^ " should be equal to " ^ + (CompiledDataDump.string_of_type_eff_ext t2) ^ "\n")) (* let fill_profile = fillred_profile *) (* Given @@ -244,10 +253,10 @@ let boolred_profile = | _ -> raise (Compile_error(lxm, "\n*** type error: 3 int were expected")) in let (_i,_j,k) = get_three_constants lxm sargs in - [id "i", Atype (Array_type_eff(Bool_type_eff,k))], [id "o", b] + [id "i", (Array_type_eff_ext(Bool_type_eff_ext,k))], [id "o", b] -type node_profile = (Ident.t * var_type) list * (Ident.t * var_type) list +type node_profile = (Ident.t * type_eff_ext) list * (Ident.t * type_eff_ext) list let (op2profile : Predef.op -> Lxm.t -> static_arg_eff list -> node_profile) = fun op lxm sargs -> match op with @@ -315,31 +324,47 @@ let (type_eval : op -> Lxm.t -> CompiledData.static_arg_eff list -> typer) = | x -> (arity_error x "3") ) | (NOR_n | DIESE_n) -> - (* VERRUE 2 : those operators have no profile, therefore i define an - ad-hoc check for them. - *) + (* VERRUE 2 : cf XXX above: therefore i define an ad-hoc + check for them. *) let check_nary_iter acc ceff = match ceff with (Bool_type_eff) -> acc | _ -> (type_error [ceff] "bool") in - ignore(List.fold_left check_nary_iter true (List.flatten ll)); + List.fold_left check_nary_iter () (List.flatten ll); [Bool_type_eff] | _ -> (* general case *) let node_eff = make_node_exp_eff op lxm sargs in let lti = List.map (fun (id,t) -> t) node_eff.inlist_eff and lto = List.map (fun (id,t) -> t) node_eff.outlist_eff in - let unwrap_type = function Atype t -> t | _ -> assert false in - let subst_type t = function Atype t -> t | Any -> t | Overload -> t in - let l = List.map (fun t -> Atype t) (List.flatten ll) in + let rec (subst_type : type_eff -> type_eff_ext -> type_eff) = + fun t teff_ext -> match teff_ext with + (* substitutes [t] in [teff_ext] *) + | Bool_type_eff_ext -> Bool_type_eff + | Int_type_eff_ext -> Int_type_eff + | Real_type_eff_ext -> Real_type_eff + | External_type_eff_ext l -> External_type_eff l + | Enum_type_eff_ext(l,el) -> Enum_type_eff(l,el) + | Array_type_eff_ext(teff_ext,i) -> + Array_type_eff(subst_type t teff_ext, i) + | Struct_type_eff_ext(l, fl) -> + Struct_type_eff( + l, + List.map + (fun (id,(teff,copt)) -> (id,(subst_type t teff,copt))) + fl) + | Any + | Overload -> t + in + let l = (List.flatten ll) in if (List.length l <> List.length lti) then arity_error l (string_of_int (List.length lti)) else match unify lti l with - | Equal -> List.map unwrap_type lto + | Equal -> List.map type_eff_ext_to_type_eff lto | Unif t -> List.map (subst_type t) lto | Ko(str) -> - type_error2 (var_type_list_to_string l) - (var_type_list_to_string lti) str + type_error2 (type_eff_list_to_string l) + (type_eff_ext_list_to_string lti) str (*********************************************************************************) diff --git a/src/test/test.res.exp b/src/test/test.res.exp index 006cdef135b97a391cb34355bcfbe1bd6abb3dac..73eaf964c0bdc426b0ea722e3cbddcdfddd989b4 100644 --- a/src/test/test.res.exp +++ b/src/test/test.res.exp @@ -5218,7 +5218,7 @@ type inter__selType = {i : int; b : bool; r : real}; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/Pascal/newpacks.lus ---------------------------------------------------------------------- @@ -5859,7 +5859,7 @@ type inter__selType = {i : int; b : bool; r : real}; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/Pascal/p.lus ---------------------------------------------------------------------- @@ -8120,7 +8120,7 @@ type morel4__arrayi = int^2^3; Warning. in file "should_work/fab_test/morel4.lus", line 33, col 17 to 17, token ',': ---> separator mismatch, ';' expected -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/fab_test/morel4.lus ---------------------------------------------------------------------- @@ -8198,7 +8198,7 @@ tel XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/fab_test/morel5.lus ---------------------------------------------------------------------- @@ -9713,7 +9713,7 @@ type produitBool__Tacc_inShift = {acc_in_PLC : {multiplieur : bool^10; rank : XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/ProduitBool/produitBool.lus ---------------------------------------------------------------------- @@ -9983,7 +9983,7 @@ type calculs_max__struct_max = {max1 : int; max2 : int; imax1 : int; imax2 : in XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/calculs_max.lus ---------------------------------------------------------------------- @@ -10022,7 +10022,7 @@ type deSimone__cell_accu = {token : bool; grant : bool}; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/deSimone.lus ---------------------------------------------------------------------- @@ -10148,17 +10148,19 @@ type matrice__T_fibo = int^2; const matrice__m = 3; const matrice__n = 2; Exported nodes: -*** Error in file "should_work/lionel/matrice.lus", line 15, col 8 to 10, token 'red': type error: -*** type 'int*int^3^2' was provided whereas -*** type 'o*o' was expected -*** and int <> int^3^2 - node matrice__fibo(accu_in:int^2) returns (accu_out:int^2; elt:int); let accu_out = [(accu_in[0] + accu_in[1]), accu_in[0]]; elt = (accu_in[0] + accu_in[1]); tel -- end of node matrice__fibo +node matrice__matrice(a:int) returns (sum:int; bid:int^2; T:int^3^2); +let + (bid, T) = fill<<node Lustre__fill<<node matrice__fibo, const 3>>, const + 2>>([a, a]); + sum = red<<node Lustre__red<<node Lustre__+, const 3>>, const 2>>(0, T); +tel +-- end of node matrice__matrice ---------------------------------------------------------------------- ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/matrice2.lus @@ -10204,7 +10206,7 @@ const moyenne__size = 10; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/moyenne.lus ---------------------------------------------------------------------- @@ -10298,7 +10300,7 @@ const normal__COM_ERR = 0; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/normal.lus ---------------------------------------------------------------------- @@ -10458,7 +10460,7 @@ const testSilus__COM_ERR = 0; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/testSilus.lus ---------------------------------------------------------------------- @@ -10508,7 +10510,7 @@ type triSel__Exchange_accu = {MinVal : int; MinRank : int; RankFrom : int; Curr XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/lionel/triSel.lus ---------------------------------------------------------------------- @@ -10551,7 +10553,7 @@ const contractForElementSelectionInArray__size = 10; XXX evalType.ml:anonymous struct not yet supported -> finish me! -*** oops: an internal error occurred in file evalType.ml, line 162, column 3 +*** oops: an internal error occurred in file evalType.ml, line 159, column 3 *** when compiling lustre program should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus ---------------------------------------------------------------------- @@ -11734,5 +11736,5 @@ type const2__t8 = int^3^7^8^9^3^8^8; *** Error in file "should_fail/type/const2.lus", line 16, col 12 to 13, token '<>': type error: *** type 'int*real' was provided whereas *** type 'a*a' was expected -*** and int <> real +*** int and real are not unifiable