1
|
* TODO
|
2
|
** include files
|
3
|
** main function
|
4
|
*** add a clean test to forbid array arguments for main node
|
5
|
(no available input/output methods)
|
6
|
** test suite
|
7
|
*** for complex dependency graphs (notably mem/mem cyclic dependencies)
|
8
|
*** for clocks
|
9
|
*** for arrays (non-generic nodes)
|
10
|
** compare with lus2c (verimag)
|
11
|
** extension
|
12
|
*** array access: done
|
13
|
*** add an option to dynamically check array accesses: done
|
14
|
*** power operator: done
|
15
|
*** automaton
|
16
|
*** annotations to ACSL
|
17
|
** init checking
|
18
|
*** to be done !!!
|
19
|
** normalization
|
20
|
*** sub-expression sharing seems to be not totally working: fixed
|
21
|
*** improve behavior for power and access operators:done
|
22
|
*** more type-directed normalization (notably to improve code gen for arrays): done
|
23
|
*** reuse of dead vars instead of systematically allocating new local vars
|
24
|
*** add a clean test for used but undefined nodes
|
25
|
** typing
|
26
|
*** correct typing of arith ops (real/int with subtyping ?)
|
27
|
*** display array dimensions with correct names: done
|
28
|
*** clocks must not be static inputs: done
|
29
|
** clock calculus
|
30
|
*** extension from named clocks to valued clocks ?
|
31
|
*** static inputs should be polymorphic, as global constants are: done
|
32
|
|
33
|
* Horn backend
|
34
|
** enum types for automaton
|
35
|
- issues with MBranches and clocks
|
36
|
- control-on-clock generates a "if cond then expr else nothing
|
37
|
- it has to be expressed in a functional way to enable its expression as
|
38
|
horn
|
39
|
|
40
|
|
41
|
- The issue seems mainly to lie in the out = f(in) every cond
|
42
|
this generates the follwoingg imperative statements
|
43
|
if cond then f_reset(*mem) else {(nothing, ie. not reset)}
|
44
|
f_step(in,*put,*mem)
|
45
|
|
46
|
In the machine code, this is done by generating the sequence of 2 instructions
|
47
|
1. if cond then MReset() else {} (* creation of a conditional statement *)
|
48
|
2. MStep()
|
49
|
|
50
|
- For Xavier: Syntactically, how could you "reset" an arrow? When we see an
|
51
|
Expr_arrow, we introduce a MReset instance to the set of instruction on the
|
52
|
reset function of the current node, but is there any mean to do it with
|
53
|
"every" ?
|
54
|
|
55
|
|
56
|
|
57
|
|
58
|
x = expr when c
|
59
|
|
60
|
if c then
|
61
|
x= expr
|
62
|
|
63
|
else {}
|
64
|
|
65
|
x = if c then expr else x
|