Commit graph

303 commits

Author SHA1 Message Date
Cédric Pasteur
650bbb1c93 A const can be a const from another module 2010-07-27 12:24:51 +02:00
Cédric Pasteur
0e7d9ead1f Use mapfold for typing consts and signatures
Fixes a problem with typing a signature with
consts that depends on previous consts.
2010-07-27 12:09:19 +02:00
Cédric Pasteur
02dd7fa124 Added alias for types (aka typedef)
For instance:
type metres = int
type metres = MyLib.longueur
type matrice = metres^10^100

Code generation in C (with typedef) included. The 
code uses the aliases for traceability.
2010-07-27 09:23:16 +02:00
Cédric Pasteur
947435f024 Do not forget to put qualified names for node calls 2010-07-26 16:23:21 +02:00
Cédric Pasteur
e3676d1e3c Fixed problem in clocking
Tuple of consts should have one clock var per 
element. Added a new function const_skeleton to
create this kind of clock.
2010-07-26 15:34:46 +02:00
Cédric Pasteur
aa61865b9e Update names in code 2010-07-26 14:17:24 +02:00
Cédric Pasteur
f24e97fb87 Fixed bug in completion
This one was hard to find. The first version of 
completion_mapfold used gather in all cases, so 
we had to return Env.empty.
The new version does not use gather in the normal
iteration so we have to return the same defnames
as the one given in argument.
2010-07-26 14:16:21 +02:00
Cédric Pasteur
515f9489c4 Rename *_mapfold to regular names 2010-07-26 14:15:00 +02:00
Cédric Pasteur
a81dd0b2b4 Remove old version of files 2010-07-26 14:12:37 +02:00
Cédric Pasteur
db64b6302b More refactoring in Typing 2010-07-26 12:06:02 +02:00
Cédric Pasteur
e098909086 Refactored build function
I am 99 % sure that this doesn't break anything.
2010-07-26 11:36:59 +02:00
Cédric Pasteur
aee247020b Refactored Typing
Created a new pass named Statefull that checks
statefullness related issues.
This change allows to see easily what is done in
this pass, that was scattered all across Typing
2010-07-26 10:59:19 +02:00
Cédric Pasteur
a081f2dacf Added foldi iterator
Same as fold but the iterated function takes an 
integer as the last but one argument.
This is not something that is necessarily 
important to have in trunk but the patch is so 
small that it doesn't hurt.
2010-07-26 09:33:22 +02:00
Léonard Gérard
dc9bec28bf Clock refactoring. 2010-07-23 22:13:03 +02:00
Léonard Gérard
1719e2eb36 Fix bad clock expectation for static_exps. 2010-07-23 22:05:54 +02:00
Léonard Gérard
f124bb4fd7 Refactoring Ident -> Idents ( uniform with Names etc ) 2010-07-23 19:45:19 +02:00
Adrien Guatto
e34ec2a229 Temporary fix. 2010-07-23 13:48:10 +02:00
Adrien Guatto
689a10a328 Cgen: $NODE_mem.h should not include itself. 2010-07-23 12:18:27 +02:00
Cédric Pasteur
b85f9ab456 Use a block in reset (instead of a list of eqs)
- Most transformation passes expect that list of
equations are always nested inside a block.

This fixes a problem with a duplication of
equations in Automata_mapfold.
2010-07-23 10:56:25 +02:00
Cédric Pasteur
89ceb8df76 Fixed duplicate declaration of local vars 2010-07-22 17:38:28 +02:00
Adrien Guatto
7f91ffab53 Output MiniLS code before clocking when in verbose mode. 2010-07-22 11:12:58 +02:00
Adrien Guatto
b1944cf752 Documentation fix for Reset_mapfold 2010-07-22 11:12:58 +02:00
Cédric Pasteur
75774cc685 Refactoring
Directly create a obj_dec instead of storing a tuple.
2010-07-22 10:15:11 +02:00
Cédric Pasteur
0be31badae Added some doc
I'm not sure if this is very clear but it's a start...
2010-07-22 10:01:40 +02:00
Cédric Pasteur
c12f1add0c Keep params in Obc
Remember the parameters of the called node in the 
parametrized version of Obc.
2010-07-22 09:44:57 +02:00
Cédric Pasteur
1be9f1c789 Fixed code generation for Elambda
- Added block notion in Obc
- Correct translation to C
2010-07-22 09:36:22 +02:00
Cédric Pasteur
4d52fe79ef Compile fix 2010-07-22 09:22:50 +02:00
Cédric Pasteur
bbb8e2e286 Do not forget to normalize iterators 2010-07-21 17:20:19 +02:00
Cédric Pasteur
493f49fe04 Added iterator fusion
For now it only deals with maps but it can be
easily extended. See test/good/itfusion.ept for 
examples of sequences that can be optimised.
2010-07-21 17:19:51 +02:00
Cédric Pasteur
dd660f4424 Added anonymous functions in Minils
- Added Elamba(inp, outp, eq_list) constructor. This
is necessary for iterator fusion.
- Refactored Mls2obc to allow to generate code
for anonymous functions (basically we have to
remember if we are within an iterator, as there is
no nesting of iterators)

There is a known problem with the local vars defined in 
the anonymous function that needs to be declared.
2010-07-21 17:15:19 +02:00
Cédric Pasteur
b6459cdace Obc_mapfold
Because I needed to iterate over Obc and it was 
almost as easy to write the generic iterator.
2010-07-21 15:54:41 +02:00
Léonard Gérard
8df666b985 Removed temporarily clocking. 2010-07-21 15:40:55 +02:00
Léonard Gérard
5e737d0094 location change. Heptc works with menhir. 2010-07-21 15:15:57 +02:00
Cédric Pasteur
91aa437264 Check arity of static parameters 2010-07-20 11:35:48 +02:00
Cédric Pasteur
03608451c4 Use invalid_type 2010-07-20 09:34:11 +02:00
Cédric Pasteur
b2c88810c5 Make Heptagon API more uniform
Use a block instead of variable list + equation list
for contract and node.
The new program transformations based on the 
mapfold iterator are now enabled by default.
2010-07-20 09:31:29 +02:00
Cédric Pasteur
e57c663f43 Do not forget to add created types 2010-07-20 09:17:19 +02:00
Adrien Guatto
4edc03c163 Mapfold_right for even nicer code. 2010-07-19 17:19:02 +02:00
Adrien Guatto
496919ff63 Yet Another Cosmetic Fix for normalization :-/ 2010-07-19 16:57:47 +02:00
Adrien Guatto
54ada380a1 Cleaner normalization of iterators' arguments 2010-07-19 15:38:12 +02:00
Adrien Guatto
8d07052a0f Inlining: warn when trying to inline iterators. 2010-07-19 15:22:57 +02:00
Adrien Guatto
9301ed0b09 Fixes for correct array literal C generation. 2010-07-19 15:16:14 +02:00
Adrien Guatto
3a0b1f9e16 New handy function for pretty-printing: wrap_print. 2010-07-19 15:13:56 +02:00
Adrien Guatto
d75f4f8901 Added an option for global inlining (-flatten). 2010-07-19 13:20:11 +02:00
Adrien Guatto
1d6df4ecb2 Inlining pass added. Use with -inline. 2010-07-19 12:02:29 +02:00
Adrien Guatto
2ccdf677f0 Reworded Heptagon mapfold introductory message. 2010-07-19 12:02:29 +02:00
Adrien Guatto
2a72628f20 Stricter mk_longname. 2010-07-19 12:02:29 +02:00
Cédric Pasteur
fac69ac2fa Remove controllables from parser 2010-07-16 16:08:14 +02:00
Cédric Pasteur
aeca344db5 Automata with mapfold
It does not change much the code but at least
we can now see what is important.
2010-07-16 16:01:27 +02:00
Cédric Pasteur
2d10ef84df Present with Hept_mapfold
Seems so simple, I feel like I missed something...
2010-07-16 15:30:51 +02:00
Cédric Pasteur
af2ea1f361 Compile fix
Always check that the code compiles before committing.
2010-07-16 15:11:53 +02:00
Cédric Pasteur
da9b353e75 Shorter version of is_statefull 2010-07-16 15:10:14 +02:00
Cédric Pasteur
bcc994fb9f No need to collect calls without params
There is no need to collect calls without parameters
as we only need the signature of the function and the code
will be generated when compiling the first file.
2010-07-16 14:35:42 +02:00
Cédric Pasteur
ac4e46eff9 Remove debug info 2010-07-16 14:16:31 +02:00
Cédric Pasteur
9f7c4da446 Added missing operator 2010-07-16 14:15:26 +02:00
Cédric Pasteur
b6583f22b6 Complete fix for the identifiers problem 2010-07-16 14:09:37 +02:00
Cédric Pasteur
d42e56203b Fix for identifiers in C
Instead of calling cname_of_name before creating 
the C ast, keep original names and convert them
when pretty printing the code.
2010-07-16 13:48:37 +02:00
Cédric Pasteur
cdc9b14a44 Fixed problem with multidimensional arrays in args 2010-07-16 12:38:45 +02:00
Cédric Pasteur
27d5790a20 Do not forget iterators at instantiation time either 2010-07-16 12:33:08 +02:00
Cédric Pasteur
7f4a0954bf Also instantiate nodes called in iterators 2010-07-16 12:26:53 +02:00
Cédric Pasteur
778dfdb3f9 Do not loop forever during code generation
- Detect when the computation of the static exp
using simplif failed and abort.
- Added a better way to compute operators in
Static
2010-07-16 12:04:51 +02:00
Cédric Pasteur
3f7564aaa6 Fix for code generation
A node declared with node is statefull (so has a
context struct) even though it is empty. Use
the global_name ref to get the name of the current 
module.
2010-07-16 11:28:01 +02:00
Cédric Pasteur
03f21cc612 Last done with Hept_mapfold 2010-07-16 10:28:26 +02:00
Cédric Pasteur
336b6eac00 Simplify a little Mls2obc
We don't need to return the memory vars as they
are already computed
2010-07-16 09:58:56 +02:00
Cédric Pasteur
66078effbd Added support for tuples in normalize
- (v1, v2, ... ) fby (e1, e2, ...) is translated to
(v1 fby e1, v2 fby e2, ...)

This has made the code even more complex. This will
need to be refactored at some point.
2010-07-15 17:58:32 +02:00
Cédric Pasteur
f6d55712bc Revert "Normalize small tweak."
This reverts commit eb39fcffec.

This change is completely wrong (sorry Leonard ...)
2010-07-15 17:04:18 +02:00
Léonard Gérard
eb39fcffec Normalize small tweak. 2010-07-15 16:21:07 +02:00
Léonard Gérard
57b1405731 Basic clocking port. 2010-07-15 16:20:46 +02:00
Léonard Gérard
c3a3f954f4 Typing fix, if this line is actually useful.
(and 80 colons fix..)
2010-07-15 14:21:19 +02:00
Cédric Pasteur
94468cae5d Fixed iterators
We need to store the qualified name of the iterated node
2010-07-15 13:41:13 +02:00
Cédric Pasteur
0c1860ccbd Fixed problem with tuple consts in Mls2obc 2010-07-15 13:12:11 +02:00
Cédric Pasteur
f8ecf3d76c Fixed Vars read function
When is_left is true, the variables to the right
of the fby should be ignored.
2010-07-15 11:57:47 +02:00
Cédric Pasteur
f2559b5e87 Small refactoring 2010-07-15 11:37:30 +02:00
Cédric Pasteur
f6ffea710d Comments for callgraph_mapfold 2010-07-15 11:31:48 +02:00
Cédric Pasteur
93fef027f0 Keep the list of static parameters in Obc 2010-07-15 11:31:32 +02:00
Cédric Pasteur
aad8545055 Set the correct location for obj_dec 2010-07-15 10:06:16 +02:00
Cédric Pasteur
4f9d6b2d82 Added v_loc in Minils too 2010-07-15 10:02:42 +02:00
Cédric Pasteur
46a09cf369 Make Efield an op (as in Minils)
The fact that this commit mostly removes code proves
that this was a good choice.
2010-07-15 09:56:21 +02:00
Cédric Pasteur
62e216314d Fixed stupid bug 2010-07-15 09:37:20 +02:00
Cédric Pasteur
1c55689b18 Fixed name 2010-07-15 09:27:59 +02:00
Cédric Pasteur
a188952ef6 Ported Normalize (not tested yet) 2010-07-15 09:27:51 +02:00
Léonard Gérard
c657ce8ecb Schedule with the iterator and eqs/var_decs added in mapfold. 2010-07-14 03:45:38 +02:00
Léonard Gérard
57751992c0 Rebase done : Mls re-ported. Mls_mapfold and mls_utils updated. 2010-07-14 02:58:08 +02:00
Léonard Gérard
be7bdc7f27 Mls printer ported. 2010-07-14 02:44:46 +02:00
Léonard Gérard
469e5b86cd A much better and efficient completion_mapfold. 2010-07-14 02:37:03 +02:00
Léonard Gérard
ce4f1916da interface_format_version bump ! 10.... 2010-07-14 02:37:02 +02:00
Léonard Gérard
1c2929078d Small tweaks on the hept_mapfold and comments. 2010-07-14 02:37:02 +02:00
Cédric Pasteur
5440a073d6 Fixed generation of C code 2010-07-13 16:23:26 +02:00
Cédric Pasteur
73bd2d080e Correctly set the name of generated nodes 2010-07-13 16:01:42 +02:00
Cédric Pasteur
0d9a35a8b6 Fixed Callgraph_mapfold 2010-07-13 15:37:29 +02:00
Cédric Pasteur
dab569d8ad Add missing case for ifthenelse 2010-07-13 14:42:46 +02:00
Cédric Pasteur
ee767064b1 Instantiation of parametrized nodes (v2)
- Many changes to make Hept2mls, mls2obc, etc
compile with the api changes
- Added Callgraph_mapfold: starting from a main
program, generates the list of instances of each
node necessary and creates them.
- Mls2seq deals with giving to the code generators
the correct source (mls or obc, wit or without
static parameters)

It is now possible to use parametrized nodes that 
are defined in other files. For that to work, the 
first file has to be compiled to an object file:
	heptc -c mylib.ept
which creates a mylib.epo file. Compiling the main
file will then generate all the instances of 
parametrized nodes from the lib (only the called 
nodes will be compiled, but all the nodes in the 
main file are compiled).
2010-07-13 14:03:39 +02:00
Cédric Pasteur
b8f69492b9 Add mapfold for other types in Signature 2010-07-13 13:55:29 +02:00
Cédric Pasteur
4598b29ad2 Forgot to move this file too 2010-07-13 08:47:02 +02:00
Cédric Pasteur
e2af987967 Compile fix 2010-07-13 08:38:51 +02:00
Cédric Pasteur
30a78632d2 Fix the order of args in the signature 2010-07-12 10:45:00 +02:00
Cédric Pasteur
eb85bfd282 Fix for tuple consts in Initialization
We also need a skeleton fun for consts as there 
can be a const tuple 

TODO : do the same in Clocking ??
2010-07-12 10:22:57 +02:00
Cédric Pasteur
89249e8252 Fix for Initialization
Make eg 0 -> (pre x + 1) legal. This is a temporary 
fix until safe/unsafe functions are correctly handled.
2010-07-12 10:16:16 +02:00
Cédric Pasteur
c5184b5d66 Booleans can be used in a switch 2010-07-12 09:25:36 +02:00
Cédric Pasteur
eb625cd5d7 Fix operator args (some args have become static) 2010-07-12 09:07:57 +02:00
Cédric Pasteur
af0d28fda0 More refactoring of reset
Use exp option to store resets instead of introducing
a new type.
2010-07-09 16:05:31 +02:00
Cédric Pasteur
f752f895ce Reset_mapfold
- Also refactored most of the code (why the hell
would anyone use arrays to iterate over lists 
with an index ?!?)
2010-07-09 15:28:26 +02:00
Cédric Pasteur
9e7c013fe2 Completion_mapfold
- Added it_gather combinator to create simply
a version of an iterating function using a gather
to combine accumulator values

Completion_mapfold and every_mapfold seems to work
2010-07-09 13:27:06 +02:00
Cédric Pasteur
e7bd251b35 Added Global_mapfold and Mls_mapfold
- Global_mapfold is used to iterate over types
defined in Types or Signature (the iterators 
from Types were moved here)
- Mls_mapfold to iterate over Minils AST (we
do not iterate over clocks yet: is it useful ?)
2010-07-09 11:33:17 +02:00
Cédric Pasteur
3153a8f241 Add missing cases 2010-07-09 10:28:16 +02:00
Cédric Pasteur
3bf2d82d45 Make sure to run check_type on every
Types declared by the user must be checked (this
will also replaced names with the correct longname).
2010-07-09 10:28:09 +02:00
Cédric Pasteur
03b792a220 Fix for scoping 2010-07-09 09:41:29 +02:00
Cédric Pasteur
ad2594ebfa Cgen compiles 2010-07-09 09:31:12 +02:00
Cédric Pasteur
23e232cd1f Rewrite Every using Hept_mapfold 2010-07-08 18:13:32 +02:00
Léonard Gérard
000dc91d69 Heptagon and Types mapfold. 2010-07-08 17:41:00 +02:00
Cédric Pasteur
226ddd5c28 Updates for Obc 2010-07-08 17:22:13 +02:00
Cédric Pasteur
b0a5a7f13e Heptcheck compiles !! 2010-07-08 15:25:26 +02:00
Cédric Pasteur
68ecd0e781 Added consts in the signature of a module 2010-07-08 15:23:13 +02:00
Léonard Gérard
5baa30f7c1 Last refactor ? and hept_mapred shows in ! 2010-07-08 15:22:26 +02:00
Cédric Pasteur
0e224bf368 Port Static to recent api changes 2010-07-08 15:21:30 +02:00
Cédric Pasteur
587ed634ea Updated Obc Ast 2010-07-08 15:21:30 +02:00
Cédric Pasteur
72ee834641 Proposition for improved Obc AST 2010-07-08 15:20:55 +02:00
Cédric Pasteur
3690585710 Added static records in static_exp 2010-07-08 15:20:55 +02:00
Cédric Pasteur
0b253d22db typing_static_exp should return the static exp
We need to return the static exp because we have 
to replace constructor with their longname.
2010-07-08 15:20:54 +02:00
Cédric Pasteur
cee9eed24a Moved sequential/ to obc/ 2010-07-08 15:20:25 +02:00
Cédric Pasteur
662e81d810 Add location and type to static exps 2010-07-08 15:20:25 +02:00
Cédric Pasteur
2fd0860ba8 Renamed Scoping and Parsetree 2010-07-08 15:19:04 +02:00
Cédric Pasteur
7ed81a8950 Moved Obc_printer to a separate file 2010-07-08 15:19:04 +02:00
Cédric Pasteur
978313de1e Moved sequential to compiler/ dir 2010-07-08 15:19:04 +02:00
Cédric Pasteur
24cea56666 Add support for any type of constants 2010-07-08 15:18:08 +02:00
Léonard Gérard
5cc57cd3b0 Static_exps should be in types. field name of ops is a param. 2010-07-08 15:17:08 +02:00
Cédric Pasteur
037f9be664 Remove unused code 2010-07-08 15:16:27 +02:00
Cédric Pasteur
769cb1d881 Updated ast for Static
- Static are used for consts in Heptagon and Minils.
For now, node static parameters remain int only
(ie they are type parameters). Do we need more ?
- Also updated Parsetree AST to the recent changes
in API
2010-07-08 15:16:27 +02:00
Cédric Pasteur
c46896ca55 Same api change in Heptagon as in Minils 2010-07-08 15:12:34 +02:00
Léonard Gérard
3cc1652425 Minils and signature tweaked further. 2010-07-08 15:12:02 +02:00
Léonard Gérard
50bd90183d Good static Constructors names. 2010-07-08 15:10:59 +02:00
Adrien Guatto
ed280669ec Efields and Etuple are op 2010-07-08 15:04:57 +02:00
Léonard Gérard
d58e83a985 Proposition 1. 2010-07-08 15:04:57 +02:00
Adrien Guatto
3698105ccf C back-end: yet another fix for array literals 2010-07-08 12:49:14 +02:00
Adrien Guatto
7918332353 Temporary fix for array literals. 2010-07-08 12:44:34 +02:00
Cédric Pasteur
d594ace895 This case is unused 2010-07-07 17:03:36 +02:00
Adrien Guatto
0712378133 Fixed output structure allocation in C backend 2010-07-07 14:44:43 +02:00
Cédric Pasteur
c123000eef Always generate a f_out struct
Generate it even if the node has no output. It 
should be noted that it is impossible to call
a node without an output in an Heptagon program. 
This is only useful to provide a simple interface
eg for the generation of main().
2010-07-07 09:58:23 +02:00
Adrien Guatto
0fbaa0217b Fixed missing include dir in minils/_tags 2010-07-06 13:35:11 +02:00
Léonard Gérard
65c12884bd SConst -> Sconst 2010-07-06 11:12:14 +02:00
Léonard Gérard
075cab202a _tags fix. 2010-07-05 16:10:00 +02:00
Adrien Guatto
3dfdf680ee myocamlbuild.ml fix for bytecode 2010-07-05 15:15:24 +02:00
Adrien Guatto
2d8e02d844 Fix: typo size_constr -> size_constrs 2010-07-05 12:09:35 +02:00
Adrien Guatto
6b4881ccd0 Revamped testing framework 2010-07-02 16:03:04 +02:00
Adrien Guatto
1113fd7ec1 Yet another refactoring fix 2010-07-02 15:45:50 +02:00
Adrien Guatto
5a6a3c74ac Fixed refactoring errors. 2010-07-02 15:38:11 +02:00
Adrien Guatto
eaafc5db05 C backend: better array printing 2010-07-02 15:30:46 +02:00
Léonard Gérard
0ae39e8698 Good static Constructors names.
Conflicts:

	compiler/global/static.ml
	compiler/heptagon/analysis/typing.ml
	compiler/heptagon/heptagon.ml
	compiler/heptagon/parsing/scoping.ml
	compiler/minils/mls_utils.ml
2010-07-01 20:00:46 +02:00
Léonard Gérard
de16b4f178 typo Mls_{P->p}arser 2010-07-01 19:41:07 +02:00
Adrien Guatto
a7e34a0a17 C backend: added missing #include 2010-07-01 15:41:07 +02:00