Skip to content
Snippets Groups Projects
Commit 5c33810e authored by Erwan Jahier's avatar Erwan Jahier
Browse files

Fix a bug in the way array expressions such as "0^5" were

represented. Indeed, it was represented by "HAT_eff of int *
type_eff" instead of "HAT_eff of int * val_exp_eff"
parent 94009862
No related branches found
No related tags found
No related merge requests found
......@@ -145,6 +145,8 @@ index de slice
- rajouter modele, package, etc.
- l'indentation est vraiment à chier
* verifier que tous les "assert false" sont vraiment innateingnables.
* finir de rédiger le manuel
+ verifier que j'y parle bien de la priorite des operateurs
......
(** Time-stamp: <modified the 29/05/2008 (at 10:24) by Erwan Jahier> *)
(** Time-stamp: <modified the 02/06/2008 (at 14:01) by Erwan Jahier> *)
(**
......@@ -198,7 +198,7 @@ and by_pos_op_eff =
| WITH_eff
| CONCAT_eff
| HAT_eff of int * type_eff
| HAT_eff of int * val_exp_eff
| ARRAY_eff
| STRUCT_ACCESS_eff of Ident.t
......
......@@ -184,7 +184,7 @@ and (string_of_by_pos_op_eff : by_pos_op_eff -> val_exp_eff list -> string) =
| WITH_eff,_ -> "with " ^ (tuple vel)
| CONCAT_eff, [ve1; ve2] ->
(string_of_val_exp_eff ve1) ^ " | " ^ (string_of_val_exp_eff ve2)
| HAT_eff (i, teff), _ -> (string_of_type_eff teff) ^ "^" ^ (string_of_int i)
| HAT_eff (i, ve), _ -> (string_of_val_exp_eff ve) ^ "^" ^ (string_of_int i)
| ARRAY_eff, _ -> tuple_square vel
| STRUCT_ACCESS_eff(id), [ve1] ->
(string_of_val_exp_eff ve1) ^ "." ^ (Ident.to_string id)
......
(** Time-stamp: <modified the 30/05/2008 (at 17:46) by Erwan Jahier> *)
(** Time-stamp: <modified the 02/06/2008 (at 14:14) by Erwan Jahier> *)
open Predef
......@@ -96,7 +96,10 @@ and (eval_by_pos_type :
| ARRAY_SLICE_eff (sieff,teff) ->
[Array_type_eff(teff, sieff.se_width)]
| HAT_eff(size,teff) -> [Array_type_eff(teff,size)]
| HAT_eff(size,ceff) ->
let teff_list = f id_solver ceff in
List.map (fun teff -> Array_type_eff(teff, size)) teff_list
| ARRAY_eff ->
(* check that args are of the same type *)
let type_args_eff = (List.map (f id_solver) args) in
......
(** Time-stamp: <modified the 27/05/2008 (at 10:24) by Erwan Jahier> *)
(** Time-stamp: <modified the 02/06/2008 (at 14:16) by Erwan Jahier> *)
open Lxm
......@@ -327,7 +327,11 @@ and (translate_by_pos_op : id_solver -> by_pos_op -> Lxm.t -> val_exp list ->
let size, teff_elt =
match teff with
| [Array_type_eff(teff_elt, size)] -> size, teff_elt
| _ -> assert false
| _ ->
raise (Compile_error(
lxm, "\n*** Type error: '" ^
(CompiledDataDump.string_of_type_eff_list teff) ^
"' was expected to be an array"))
in
ARRAY_ACCES_eff(
EvalConst.eval_array_index id_solver ve_index size lxm,
......@@ -342,7 +346,11 @@ and (translate_by_pos_op : id_solver -> by_pos_op -> Lxm.t -> val_exp list ->
let size, teff_elt =
match teff with
| [Array_type_eff(teff_elt, size)] -> size, teff_elt
| _ -> assert false
| _ ->
raise (Compile_error(
lxm, "\n*** Type error: '" ^
(CompiledDataDump.string_of_type_eff_list teff) ^
"' was expected to be an array"))
in
ARRAY_SLICE_eff(EvalConst.eval_array_slice id_solver si size lxm,
teff_elt)
......@@ -351,9 +359,9 @@ and (translate_by_pos_op : id_solver -> by_pos_op -> Lxm.t -> val_exp list ->
match args with
| [exp; ve_size] ->
let size_const_eff = EvalConst.f id_solver ve_size
and teff_elt = EvalType.f id_solver (translate_val_exp id_solver exp) in
(match size_const_eff,teff_elt with
| [Int_const_eff size],[teff_elt] -> HAT_eff(size, teff_elt)
and exp_eff = translate_val_exp id_solver exp in
(match size_const_eff with
| [Int_const_eff size] -> HAT_eff(size, exp_eff)
| _ -> assert false)
| _ -> assert false
)
......
......@@ -202,8 +202,8 @@ node fusion_com (AllTabComChg : T_ComChgNBC^NBG ; -- OK
let
Vide = COM_ERR^NBC;
TabComChg = red<<fusion_tab_com; NBG>>(Vide, --acc d'entree
AllTabComChg,
AllTabComVal);
AllTabComChg,
AllTabComVal);
tel
......
......@@ -5042,13 +5042,13 @@ type left__truc = left::truc {a : bool^100; b : int};
Exported nodes:
node left__toto(x:bool) returns (t:left::truc {a : bool^100; b : int}^3);
let
t[0].[0..98 step 2][48..0 step -2] = bool^25;
t[0].[0..98 step 2][1..49 step 2] = bool^25;
t[0].[0..98 step 2][48..0 step -2] = true^25;
t[0].[0..98 step 2][1..49 step 2] = false^25;
t[0].[1..99 step 2][0] = true;
t[0].[1..99 step 2][1] = true;
t[0].[5..99 step 2] = bool^48;
t[0].[5..99 step 2] = false^48;
t[0]. = 42;
t[1..2] = left::truc {a : bool^100; b : int}^2;
t[1..2] = truc{a=true^100;b=0}^2;
tel
-- end of node left__toto
......@@ -6595,8 +6595,8 @@ returns (
var
NbToFar:int;
let
NbToFar = red<<node Gyroscope2__TooFar, const 4>>(0, channels, real^4,
real^4);
NbToFar = red<<node Gyroscope2__TooFar, const 4>>(0, channels, god^4,
delta_to_god^4);
assumeOK = (NbToFar <= 1);
tel
-- end of node Gyroscope2__assumeEvaluateAxis
......@@ -6746,8 +6746,8 @@ var
let
localtabToFill = Valid_ChannelT{local_failure=false;local_value=0.0};
acc_out = red<<node Gyroscope2__CFC_iter, const
4>>(CFF_struct{indx=0;indx_toChange=currentChannelIndx;tabToFill=Gyroscope2::Valid_ChannelT
{local_failure : bool; local_value : real}^3}, allChannels);
4>>(CFF_struct{indx=0;indx_toChange=currentChannelIndx;tabToFill=localtabToFill^3},
allChannels);
foreignChannels = acc_out.tabToFill;
tel
-- end of node Gyroscope2__ComputeForeignChannels
......@@ -6929,10 +6929,9 @@ var
initChannels:Gyroscope2::Valid_ChannelT {local_failure : bool; local_value : real}^4;
fillredInit:Gyroscope2::Valid_ChannelT {local_failure : bool; local_value : real}^4;
let
initChannels = Gyroscope2::Valid_ChannelT {local_failure : bool;
local_value : real}^4;
initChannels = Valid_ChannelT{local_failure=false;local_value=0.0}^4;
(dumbChannel, resChannels) = fillred<<node Gyroscope2__Channel, const
4>>(fillredInit, [0, 1, 2, 3], channels, real^4, real^4, real^4);
4>>(fillredInit, [0, 1, 2, 3], channels, delta^4, god^4, delta_to_god^4);
AxisValue = Gyroscope2__Voter(resChannels, god, delta_to_god);
fillredInit = initChannels -> pre(resChannels);
tel
......@@ -6965,7 +6964,7 @@ returns (
guaranteeOK:bool);
let
guaranteeOK = red<<node Gyroscope2__iteratedVoter, const 4>>(true,
channels, real^4, real^4, real^4);
channels, god^4, delta_to_god^4, vote^4);
tel
-- end of node Gyroscope2__guaranteeVoter
......@@ -7030,8 +7029,7 @@ tel
node alias__alias(a:bool) returns (b:bool; c:int);
let
b = alias__aliasPredefNot(a);
c = alias__aliasGivenNode(0, map<<node Lustre__+, const 3>>(int^3,
int^3));
c = alias__aliasGivenNode(0, map<<node Lustre__+, const 3>>(0^3, SIZE^3));
tel
-- end of node alias__alias
......@@ -7900,7 +7898,7 @@ node plus__plus(a:int; b:int) returns (c:int; d:int; e:int; f:int);
let
c = (a + b);
d = (a + b);
e = if (boolred<<const 0, const 1, const 2>>(bool^2)) then (a) else (b);
e = if (boolred<<const 0, const 1, const 2>>(true^2)) then (a) else (b);
f = if (nor((c < b), (c <= b))) then (a) else ((b + if (boolred<<const
0, const 0, const 2>>([(c < b), (c <= b)])) then (a) else (b)));
tel
......@@ -10499,8 +10497,8 @@ returns (
var
NbToFar:int;
let
NbToFar = red<<node Gyroscope__TooFar, const 4>>(0, channels, real^4,
real^4);
NbToFar = red<<node Gyroscope__TooFar, const 4>>(0, channels, god^4,
delta_to_god^4);
assumeOK = (NbToFar <= 1);
tel
-- end of node Gyroscope__assumeEvaluateAxis
......@@ -10639,8 +10637,8 @@ var
resChannels:Gyroscope::Valid_ChannelT {local_failure : bool; local_value : real}^4;
AxisValue2:real;
let
resChannels = map<<node Gyroscope__Channel, const 4>>(channels, real^4,
real^4, real^4);
resChannels = map<<node Gyroscope__Channel, const 4>>(channels, delta^4,
god^4, delta_to_god^4);
AxisValue = Gyroscope__Voter(resChannels, god, delta_to_god);
AxisValue2 = Gyroscope__Voter2(resChannels, god, delta_to_god);
tel
......@@ -10756,7 +10754,7 @@ returns (
guaranteeOK:bool);
let
guaranteeOK = red<<node Gyroscope__iteratedVoter, const 4>>(true,
channels, real^4, real^4, real^4);
channels, god^4, delta_to_god^4, vote^4);
tel
-- end of node Gyroscope__guaranteeVoter
......@@ -10902,7 +10900,7 @@ node produitBool__produitBool(
returns (
matrice:bool^20^10);
let
matrice = bool^20^10;
matrice = true^20^10;
tel
-- end of node produitBool__produitBool
......@@ -10915,7 +10913,7 @@ returns (
rank : int};
ligne:bool^20);
let
ligne = if ((multiplicande = false)) then (bool^20) else
ligne = if ((multiplicande = false)) then (multiplicande^20) else
(produitBool__shift(acc_in));
tel
-- end of node produitBool__PLC
......@@ -11644,7 +11642,7 @@ const matrice2__n = 2;
node matrice2__matrice2(a:int) returns (res:int);
let
res = red<<node Lustre__red<<node Lustre__+, const 2>>, const 2>>(0,
int^2^2);
1^2^2);
tel
-- end of node matrice2__matrice2
......@@ -11944,7 +11942,7 @@ returns (
var
Vide:int^20;
let
Vide = int^20;
Vide = COM_ERR^20;
TabComChg = red<<node normal__fusion_tab_com, const 4>>(Vide,
AllTabComChg, AllTabComVal);
tel
......@@ -12000,7 +11998,7 @@ returns (
TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20);
let
TabInfoChgIndiv = normal__extract_tab_info_chg_indiv(EntreeGlob);
TabInfoChgGlob = normal::T_InfoChgGlob {chg2gen : int^20}^20;
TabInfoChgGlob = normal__extract_info_chg_glob(EntreeGlob)^20;
tel
-- end of node normal__extrCharge
node normal__trChItere(acc_in:int; elt:int) returns (acc_out:int);
......@@ -12105,8 +12103,7 @@ var
bid:int;
let
TabInfoGenIndiv = normal__extract_tab_info_gen_indiv(EntreeGlob);
TabInfoGenGlob = normal::T_InfoGenGlob {elt_bidon : int; chg2gen :
int^20}^4;
TabInfoGenGlob = normal__extract_info_gen_glob(EntreeGlob)^4;
(bid, TabIndiceGen) = fill<<node normal__incr_acc, const 4>>(0);
tel
-- end of node normal__extrGen
......@@ -12122,7 +12119,7 @@ returns (
AllTabComVal:bool^20^4);
let
(AllTabComChg, AllTabComVal) = map<<node normal__traite_gen, const
4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, int^20^4);
4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, TabEtatCharge^4);
tel
-- end of node normal__traiteGen
......@@ -12435,7 +12432,7 @@ const simpleRed__n = 2;
Exported nodes:
node simpleRed__simpleRed(a:int) returns (res:int);
let
res = red<<node Lustre__+, const 3>>(0, int^3);
res = red<<node Lustre__+, const 3>>(0, a^3);
tel
-- end of node simpleRed__simpleRed
......@@ -12611,7 +12608,7 @@ returns (
var
Vide:int^20;
let
Vide = int^20;
Vide = COM_ERR^20;
TabComChg = red<<node testSilus__fusion_tab_com, const 4>>(Vide,
AllTabComChg, AllTabComVal);
tel
......@@ -12656,7 +12653,7 @@ returns (
TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20);
let
TabInfoChgIndiv = testSilus__extract_tab_info_chg_indiv(EntreeGlob);
TabInfoChgGlob = testSilus::T_InfoChgGlob {chg2gen : int^20}^20;
TabInfoChgGlob = testSilus__extract_info_chg_glob(EntreeGlob)^20;
tel
-- end of node testSilus__extrCharge
node testSilus__trChItere(acc_in:int; elt:int) returns (acc_out:int);
......@@ -12758,8 +12755,7 @@ var
bidon:int;
let
TabInfoGenIndiv = testSilus__extract_tab_info_gen_indiv(EntreeGlob);
TabInfoGenGlob = testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen :
int^20}^4;
TabInfoGenGlob = testSilus__extract_info_gen_glob(EntreeGlob)^4;
(bidon, TabIndiceGen) = fill<<node testSilus__incr_acc, const 4>>(0);
tel
-- end of node testSilus__extrGen
......@@ -12775,7 +12771,7 @@ returns (
AllTabComVal:bool^20^4);
let
(AllTabComChg, AllTabComVal) = map<<node testSilus__traite_gen, const
4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, int^20^4);
4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, TabEtatCharge^4);
tel
-- end of node testSilus__traiteGen
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment