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

Reject program that perform comparison over types that are not int or real.

In other words, consider ">" and co as overloaded operators, not polymorphic ones.
parent 065f147a
No related branches found
No related tags found
No related merge requests found
(* Time-stamp: <modified the 28/05/2013 (at 10:47) by Erwan Jahier> *)
(* Time-stamp: <modified the 26/06/2014 (at 18:29) by Erwan Jahier> *)
(** Predefined operators Type definition *)
......@@ -21,10 +21,9 @@ type op =
| IMPL_n
| EQ_n
| NEQ_n
| LT_n
| LTE_n
| GT_n
| GTE_n
| LT_n | LTE_n | GT_n | GTE_n
| ILT_n | ILTE_n| IGT_n| IGTE_n
| RLT_n| RLTE_n| RGT_n| RGTE_n
| DIV_n
| MOD_n
(* ternary *)
......@@ -55,7 +54,10 @@ type op =
let all_op = [
NOT_n; REAL2INT_n; INT2REAL_n; AND_n; OR_n; XOR_n; IMPL_n;
EQ_n; NEQ_n; LT_n; LTE_n; GT_n; GTE_n; DIV_n; MOD_n; IF_n;
EQ_n; NEQ_n; LT_n; LTE_n; GT_n; GTE_n;
LT_n; LTE_n; GT_n; GTE_n ;
ILT_n; ILTE_n; IGT_n; IGTE_n ;
DIV_n; MOD_n; IF_n;
NOR_n; DIESE_n; UMINUS_n; MINUS_n; PLUS_n; SLASH_n; TIMES_n;
IUMINUS_n; IMINUS_n; IPLUS_n; ISLASH_n; ITIMES_n; RUMINUS_n;
RMINUS_n; RPLUS_n; RSLASH_n; RTIMES_n
......@@ -69,7 +71,10 @@ let iterable_op = [
DIV_n; MOD_n; IUMINUS_n; IMINUS_n; IPLUS_n; ISLASH_n; ITIMES_n;
RUMINUS_n; RMINUS_n; RPLUS_n; RSLASH_n; RTIMES_n ;
UMINUS_n; MINUS_n; PLUS_n; SLASH_n; TIMES_n ;
EQ_n; NEQ_n; LT_n; LTE_n; GT_n; GTE_n ;
EQ_n; NEQ_n;
LT_n; LTE_n; GT_n; GTE_n ;
ILT_n; ILTE_n; IGT_n; IGTE_n ;
RLT_n; RLTE_n; RGT_n; RGTE_n ;
IF_n;
]
......@@ -89,10 +94,10 @@ let op2string = function
| IMPL_n -> "=>"
| EQ_n -> "="
| NEQ_n -> "<>"
| LT_n -> "<"
| LTE_n -> "<="
| GT_n -> ">"
| GTE_n -> ">="
| LT_n | ILT_n | RLT_n -> "<"
| LTE_n | ILTE_n | RLTE_n -> "<="
| GT_n | IGT_n | RGT_n -> ">"
| GTE_n | IGTE_n | RGTE_n -> ">="
| DIV_n -> "div"
| MOD_n -> "mod"
| IF_n -> "if"
......@@ -119,9 +124,17 @@ let op2string_long = function
| NEQ_n -> "neq"
| IMPL_n -> "impl"
| LT_n -> "lt"
| ILT_n -> "ilt"
| RLT_n -> "rlt"
| LTE_n -> "lte"
| ILTE_n -> "ilte"
| RLTE_n -> "rlte"
| GT_n -> "gt"
| IGT_n -> "igt"
| RGT_n -> "rgt"
| GTE_n -> "gte"
| IGTE_n -> "igte"
| RGTE_n -> "rgte"
| DIESE_n -> "diese"
| UMINUS_n -> "uminus"
| MINUS_n -> "minus"
......@@ -141,7 +154,10 @@ let op2string_long = function
| op -> op2string op
let is_infix = function
| AND_n | OR_n | XOR_n | IMPL_n | EQ_n | NEQ_n | LT_n | LTE_n | GT_n | GTE_n | DIV_n
| AND_n | OR_n | XOR_n | IMPL_n | EQ_n | NEQ_n | LT_n | LTE_n | GT_n | GTE_n
| ILT_n | ILTE_n| IGT_n| IGTE_n
| RLT_n| RLTE_n| RGT_n| RGTE_n
| DIV_n
| MOD_n | IF_n | MINUS_n | PLUS_n | SLASH_n | TIMES_n | IMINUS_n | IPLUS_n
| ISLASH_n | ITIMES_n | RMINUS_n | RPLUS_n | RSLASH_n | RTIMES_n
-> true
......@@ -171,9 +187,17 @@ let (string_to_op : string -> op) =
| "eq" -> EQ_n
| "neq" -> NEQ_n
| "lt" -> LT_n
| "ilt" -> ILT_n
| "rlt" -> RLT_n
| "lte" -> LTE_n
| "ilte" -> ILTE_n
| "rlte" -> RLTE_n
| "gt" -> GT_n
| "igt" -> IGT_n
| "rgt" -> RGT_n
| "gte" -> GTE_n
| "igte" -> IGTE_n
| "rgte" -> RGTE_n
| "div" -> DIV_n
| "mod" -> MOD_n
(* ternary *)
......
(* Time-stamp: <modified the 11/04/2013 (at 15:31) by Erwan Jahier> *)
(* Time-stamp: <modified the 26/06/2014 (at 18:32) by Erwan Jahier> *)
open AstPredef
open Lic
......@@ -145,10 +145,10 @@ let f
| IMPL_n -> bbb_evaluator (fun a b -> (not a) || b) ll
| EQ_n -> aab_evaluator (=) ll
| NEQ_n -> aab_evaluator (<>) ll
| LT_n -> aab_evaluator (<) ll
| LTE_n -> aab_evaluator (<=) ll
| GT_n -> aab_evaluator (>) ll
| GTE_n -> aab_evaluator (>=) ll
| LT_n | ILT_n | RLT_n -> aab_evaluator (<) ll
| LTE_n | ILTE_n | RLTE_n -> aab_evaluator (<=) ll
| GT_n | IGT_n | RGT_n -> aab_evaluator (>) ll
| GTE_n | IGTE_n | RGTE_n -> aab_evaluator (>=) ll
| DIV_n -> iii_evaluator (/) ll
| MOD_n -> iii_evaluator (mod) ll
| IF_n -> ite_evaluator ll
......
(* Time-stamp: <modified the 11/04/2013 (at 15:51) by Erwan Jahier> *)
(* Time-stamp: <modified the 26/06/2014 (at 18:31) by Erwan Jahier> *)
open AstPredef
open Lxm
......@@ -80,6 +80,9 @@ let baaa_profile = [(id "c", b);(id "b1",(TypeVar Any));(id "b2",(TypeVar Any))]
(** overloaded operator profiles *)
let oo_profile = [(id "i",(TypeVar AnyNum))], [(id "o",(TypeVar AnyNum))]
let ooo_profile = [(id "i1",(TypeVar AnyNum));(id "i2",(TypeVar AnyNum))], [(id "o",(TypeVar AnyNum))]
let oob_profile = [(id "i1",(TypeVar AnyNum));(id "i2",(TypeVar AnyNum))], [(id "o",b)]
let iib_profile = [(id "i1",i);(id "i2",i)], [(id "o",b)]
let rrb_profile = [(id "i1",r);(id "i2",r)], [(id "o",b)]
(* let diese_profile = assert false *)
......@@ -275,8 +278,12 @@ let op2profile
| UMINUS_n -> oo_profile
| IUMINUS_n -> ii_profile
| RUMINUS_n -> rr_profile
| IMPL_n | AND_n | OR_n | XOR_n -> bbb_profile
| NEQ_n | EQ_n | LT_n | LTE_n | GT_n | GTE_n -> aab_profile
| IMPL_n | AND_n | OR_n | XOR_n -> bbb_profile
| NEQ_n
| EQ_n -> aab_profile
| RLT_n | RLTE_n | RGT_n | RGTE_n -> rrb_profile
| ILT_n | ILTE_n | IGT_n | IGTE_n -> iib_profile
| LT_n | LTE_n | GT_n | GTE_n -> oob_profile
| MINUS_n | PLUS_n | TIMES_n | SLASH_n | DIV_n -> ooo_profile
| RMINUS_n | RPLUS_n | RTIMES_n | RSLASH_n -> rrr_profile
| MOD_n | IMINUS_n | IPLUS_n | ISLASH_n | ITIMES_n -> iii_profile
......
Test Run By jahier on Thu Jun 26 17:47:00 2014
Test Run By jahier on Thu Jun 26 18:33:40 2014
Native configuration is i686-pc-linux-gnu
=== lus2lic tests ===
......@@ -615,10 +615,11 @@ PASS: ./myec2c {-o /tmp/pipeline.c /tmp/pipeline.ec}
PASS: ../utils/test_lus2lic_no_node should_work/pipeline.lus
PASS: ./lus2lic {-2c should_work/pipeline.lus -n pipeline}
PASS: gcc pipeline_pipeline.c pipeline_pipeline_loop.c
FAIL: without any option: ./lus2lic {-o /tmp/mapinf.lic should_work/mapinf.lus}
FAIL: Generate ec code : ./lus2lic {-ec -o /tmp/mapinf.ec should_work/mapinf.lus}
FAIL: Try to compare lus2lic -exec and ecexe: ../utils/test_lus2lic_no_node should_work/mapinf.lus
FAIL: Generate c code : ./lus2lic {-2c should_work/mapinf.lus -n mapinf}
PASS: ./lus2lic {-o /tmp/mapinf.lic should_work/mapinf.lus}
PASS: ./lus2lic {-ec -o /tmp/mapinf.ec should_work/mapinf.lus}
PASS: ./myec2c {-o /tmp/mapinf.c /tmp/mapinf.ec}
PASS: ../utils/test_lus2lic_no_node should_work/mapinf.lus
PASS: ./lus2lic {-2c should_work/mapinf.lus -n mapinf}
PASS: gcc mapinf_mapinf.c mapinf_mapinf_loop.c
PASS: ./lus2lic {-o /tmp/integrator.lic should_work/integrator.lus}
PASS: ./lus2lic {-ec -o /tmp/integrator.ec should_work/integrator.lus}
......@@ -1475,11 +1476,9 @@ XPASS: Test bad programs (semantics): lus2lic {-o /tmp/bug.lic should_fail/seman
=== lus2lic Summary ===
# of expected passes 1288
# of unexpected failures 117
# of expected passes 1293
# of unexpected failures 113
# of unexpected successes 21
# of expected failures 37
testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds
testcase ./lus2lic.tests/progression.exp completed in 1 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds
testcase ./lus2lic.tests/progression.exp completed in 1 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 127 seconds
testcase ./lus2lic.tests/progression.exp completed in 0 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 136 seconds
testcase ./lus2lic.tests/progression.exp completed in 1 seconds
testcase ./lus2lic.tests/non-reg.exp completed in 127 seconds
testcase ./lus2lic.tests/progression.exp completed in 0 seconds
node mapinf (t1, t2: int^10) returns (res : bool^10);
let
res = map<< lt, 10>>(t1, t2);
res = map<< Lustre::lt, 10>>(t1, t2);
tel
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