Commit graph

413 commits

Author SHA1 Message Date
Cédric Pasteur
65f1a076d8 Re enable Initialization
That was easy to fix...
2010-09-15 09:58:35 +02:00
Cédric Pasteur
db732621a1 Re enabled iterator fusion
Added an option to enable it (off by default)
2010-09-15 09:53:20 +02:00
Cédric Pasteur
d913e1be89 Move options doc to the correct file 2010-09-15 09:43:28 +02:00
Cédric Pasteur
df12e081ae Refactored Misc
Created two new files: 
 - utilities/global/compiler_options.ml: contains
 the options that can be set using the cli
 - utilities/global/errors.ml: contains global
 errors definition

Misc now only contains helper functions that have 
nothing to do with the ast or the compiler.
2010-09-15 09:38:52 +02:00
Cédric Pasteur
8dad10f39b Port heptcheck to recent changes 2010-09-14 17:22:52 +02:00
Cédric Pasteur
6e5e7ec814 Fix numbers in error messages 2010-09-14 17:15:43 +02:00
Cédric Pasteur
cae8d39f3d Renamed exp_ty label to ty for consistency 2010-09-14 17:14:27 +02:00
Cédric Pasteur
5e73f46f7e Remove some unused code in Typing 2010-09-14 13:29:27 +02:00
Léonard Gérard
02db2ad6b4 Changed compile flags, and cleaned a bit.
Warn as error for partial match.
Warn for unused variables : added some TODO to check.
PS : I'll deal with callgraph which is doing things that Modules does.
2010-09-14 09:39:02 +02:00
Cédric Pasteur
4a5c9130e7 Updated version of Hept_printer
The code is much clearer but it should print
mostly the same thing.
2010-09-13 17:04:13 +02:00
Cédric Pasteur
d8dffe15d8 Fixed remainings non exhaustive patterns
Now the only shown warnings are the X type that 
we don't care about
2010-09-13 16:02:33 +02:00
Cédric Pasteur
5aa83246ca Use qualnames for types and fields in C
We need qualnames because we try to find types and
fields in the environment during the generation of
the code.
2010-09-13 15:20:25 +02:00
Cédric Pasteur
50223653a4 Do not forget to flush the output
The end of some header files was not printed.
2010-09-13 15:20:17 +02:00
Cédric Pasteur
1857cb7c47 Identifiers only need to be unique inside a node 2010-09-13 15:20:09 +02:00
Cédric Pasteur
0b5d1cd471 Do not print Pervasives 2010-09-13 15:20:01 +02:00
Cédric Pasteur
0b12e6a4ae Enum in Obc should also be qualnames 2010-09-13 15:19:52 +02:00
Cédric Pasteur
3d02b85bd6 Fixed some non exhaustive pattern matchings
Added assert_n functions to decompose to get a
tuple from a list of known size, and assert_nmin
when the list has at least n elements.
2010-09-13 15:19:40 +02:00
Léonard Gérard
3a0429f93f Merge branch 'qualified_ast'
Conflicts:
	compiler/obc/c/cgen.ml
2010-09-13 12:50:10 +02:00
Léonard Gérard
412425301a Added Sfield to differentiate from Sconstructor. 2010-09-13 12:05:10 +02:00
Léonard Gérard
d00ad67abb unbound types and vars fixed. 2010-09-13 11:39:23 +02:00
Cédric Pasteur
ecd3f0fbd8 Support tuple args in normalization 2010-09-13 11:37:50 +02:00
Cédric Pasteur
cba5f4893e Move cases for arrays operators
Only functions that modify si or j needs to be
in translate_equation. The others should be in 
translate_act.
2010-09-13 11:23:52 +02:00
Cédric Pasteur
134c7a2498 Fix normalization of ^n operator 2010-09-13 11:23:52 +02:00
Cédric Pasteur
0e6eb98bf7 Do not add consts to env again 2010-09-13 11:23:52 +02:00
Léonard Gérard
e0e7bba733 Removed wrong sanity check in modules. 2010-09-13 11:06:42 +02:00
Cédric Pasteur
4cc18831b4 Remove useless code 2010-09-13 11:04:17 +02:00
Cédric Pasteur
cb521c9b68 Fix the (commented) code that prints an exp 2010-09-13 10:20:24 +02:00
Cédric Pasteur
a3e1d8a5f9 Make sure that idents have unique names
Make sure that Idents.name returns two different 
strings for two different idents. This fixes a 
problem with variables in two automaton states 
with the same name (as shown by test/good/name_clash.ept).
2010-09-13 10:18:52 +02:00
Cédric Pasteur
ffdd378cec Make sure the error is printed last 2010-09-13 10:10:40 +02:00
Cédric Pasteur
653de74a9d Print qualnames with prefix in C code
A qualname is printed as Qual__name
2010-09-13 09:37:58 +02:00
Cédric Pasteur
5da49aa30d Re enable typing 2010-09-13 09:36:45 +02:00
Cédric Pasteur
b6561c4a9f Fixed bug in Callgraph
Only add new nodes to the environment.
2010-09-13 09:12:10 +02:00
Cédric Pasteur
36addab3cc Use qualnames in Obc too 2010-09-13 09:03:15 +02:00
Léonard Gérard
fd4d0942f4 Support tuples as args in Typing
Ported CP : 18e17a6fba37f9207937c9b60f0ad851c6e5b719
2010-09-13 01:21:35 +02:00
Léonard Gérard
a58c729ae2 clocking tweak. 2010-09-13 01:18:45 +02:00
Léonard Gérard
cb86418cb3 Small callgraph todo. 2010-09-13 01:18:07 +02:00
Léonard Gérard
b5f6593e18 Useful debug printing function. 2010-09-13 01:17:31 +02:00
Léonard Gérard
d20a77e181 Removed one nasty bug in modules.ml 2010-09-13 01:14:03 +02:00
Léonard Gérard
937d1f580b Add Warning when encountering not typed expression when cloking. 2010-09-12 23:58:21 +02:00
Léonard Gérard
a72ab6fa08 Removed debug g_env printing. 2010-09-12 23:55:54 +02:00
Cédric Pasteur
0fa3d1efb1 Fixed problem in Typing 2010-09-10 17:24:02 +02:00
Léonard Gérard
9cc3176771 Modules fixed... Pay $$$ attention to partial application and mutable fields. 2010-09-10 17:11:34 +02:00
Léonard Gérard
9ccb6db03f Fix, see bugs. ( we probably want a pass to try to convert every exp to static_exp *) 2010-09-10 17:10:53 +02:00
Léonard Gérard
8a396074fa Allow compilation without mls_parsing etc. 2010-09-10 17:10:06 +02:00
Léonard Gérard
44e7a84c00 Automata fixed. 2010-09-10 17:09:50 +02:00
Cédric Pasteur
cc039ac42d Make heptc compile 2010-09-10 14:29:13 +02:00
Léonard Gérard
1e5697b29a Removed Interface since it's job is now done during the scoping.
Moved printing stuff to Global_printer.
2010-09-10 14:06:33 +02:00
Cédric Pasteur
f6fb5861ce Make Typing compile 2010-09-10 13:59:38 +02:00
Cédric Pasteur
1d1f398e8a First try at updating Typing 2010-09-10 13:42:45 +02:00
Cédric Pasteur
e4e429d3fc Add the signature of a node during scoping
It was done for signature but not for node def
2010-09-10 13:41:23 +02:00
Léonard Gérard
43b8bc15b0 Some Cgen fixes. 2010-09-10 11:53:55 +02:00
Léonard Gérard
eda43043d5 bug fix in is_struct 2010-09-10 11:47:11 +02:00
Léonard Gérard
9cf0130512 Better scoping messages. 2010-09-10 11:46:50 +02:00
Léonard Gérard
a54e570d0f Hept Scoping should be ok and documented,
Hept Parsing too,
all the reset to review carefully,
Typing to cut from all the scoping.
2010-09-09 19:48:20 +02:00
Léonard Gérard
15448fdff9 mlsc and mls_parsetree etc. 2010-09-07 16:32:08 +02:00
Léonard Gérard
52f351b0d3 ast pretty finished 2010-09-07 16:28:01 +02:00
Léonard Gérard
f9b88a27b8 Small fixes to the compilation processes.
*Locations should be pretty damn good now.
*Mlsc is close to be up-to-date, still need a scoping pass etc (to be posted soon)
2010-09-07 16:28:01 +02:00
Cédric Pasteur
bbf5e85999 Mapfold for Hept_parsetree 2010-09-06 14:45:39 +02:00
Cédric Pasteur
88691354de Remove useless code 2010-09-06 14:45:24 +02:00
Cédric Pasteur
ffff23b675 Remove Elambda
Replace Elambda with a central repository of 
anonymous nodes. It made the AST unnecessarily 
complex.
2010-09-06 14:03:47 +02:00
Cédric Pasteur
2956e6feb4 Fix printing of arrays in C code
It should be 
  f(int a[5])
instead of 
  f(int *a)
because the second one does not scale for 
multidimensional arrays, eg
  g(int b[10][5]) is ok
but
  g(int **b) is not.
2010-09-03 15:27:58 +02:00
Adrien Guatto
1d8f2f2a85 Removed useless code for old module handling in cgen. 2010-09-03 11:50:52 +02:00
Léonard Gérard
1cf00d305e verbose printing on std_err... 2010-09-02 17:52:42 +02:00
Léonard Gérard
aad7b29c30 small print debugging tweaks. 2010-09-01 14:42:44 +02:00
Léonard Gérard
5c09abeb18 Revet last commit a5f89876c2 and gives the right fix.
Plus remove all the forbidden '\n', replaced with '@.' or '@\n' depending on context.
2010-09-01 14:40:31 +02:00
Adrien Guatto
a5f89876c2 Fixed missing new-line in scoping/typing error reporting. 2010-08-31 18:15:51 +02:00
Léonard Gérard
30c786c06e Some more clean up with formatter and so on. 2010-08-29 22:30:51 +02:00
Léonard Gérard
9eaafe9736 replaced mapfold with callgraph_mapfold. And the fixes to compile. 2010-08-26 13:55:29 +02:00
Léonard Gérard
aef39b8036 Callgraph_mapfold polished. 2010-08-24 17:30:19 +02:00
Léonard Gérard
9df4f625a2 Fixed location to use formatter instead of out_channel. 2010-08-24 17:29:00 +02:00
Léonard Gérard
64c44efad5 Cosmetic mls_printer changes. 2010-08-24 17:13:28 +02:00
Léonard Gérard
c4a926f489 Correct Mapfold !! Or at least much more than before.
Still not sure whether the notion of main_nodes is correct.
A parametrized node not used right in the module gets removed.
Is that the wanted behaviour ?
2010-08-24 11:07:05 +02:00
Adrien Guatto
4c909ee39d Fixed erroneous doc for Eupdate 2010-08-19 12:39:32 +02:00
Adrien Guatto
288b0049e4 Improved Obc pretty-printer, still far from perfect. 2010-08-19 12:38:22 +02:00
Léonard Gérard
8bda39eae9 Correct error message with assert false for int_of_static_exp. And some indentation. 2010-08-19 11:28:47 +02:00
Léonard Gérard
d5e9358315 Small mls_printer fixes : empty args should print "()". 2010-08-19 11:28:46 +02:00
Léonard Gérard
8570fe9407 Callgraph_mapfold fix.... not totally fixed... and it's still a big mess. 2010-08-17 23:30:27 +02:00
Léonard Gérard
74faffa423 Mls printing order fix ( const at top of program ) 2010-08-17 23:30:26 +02:00
Léonard Gérard
64251c6298 Mls_mapfold fixes to iterate well on types. 2010-08-17 23:30:26 +02:00
Léonard Gérard
a3ac71174c Static exp instantiation fix. 2010-08-17 23:30:26 +02:00
Adrien Guatto
9df3f8ec54 Print unfolded programs when in verbose mode. 2010-08-17 17:51:11 +02:00
Adrien Guatto
d2979fd4dd Fixed bug in Sarray_power typing. 2010-08-17 15:26:19 +02:00
Adrien Guatto
fe1475a03e Typing fix: type static exp initializing a last. 2010-08-17 15:06:08 +02:00
Adrien Guatto
744565250e Missing new-line for const pretty-printing in Mls_printer 2010-08-17 15:06:08 +02:00
Léonard Gérard
205fa71046 Automata file cleaned a bit, still needs documentation and good comments. 2010-08-15 20:22:18 +02:00
Adrien Guatto
6b87bb5ac0 Fixed confusion in mls2obc: concatenation should be handled at the
action level.
2010-08-04 15:36:20 +02:00
Léonard Gérard
4b3c3ba8b5 Revert "Fixed problem in clocking" e3676d1e3c
Fixing the actual bug :
* static_exp should not be created without type
after or during the typing pass.
2010-08-03 22:38:42 +02:00
Léonard Gérard
79c4e2a581 Print causality constraints in a human readable shape. 2010-08-02 16:32:40 +02:00
Léonard Gérard
418b961293 Small fixes to the compilation processes.
*Locations should be pretty damn good now.
*Mlsc is up to date, still need a scoping pass (to be posted soon)
2010-08-02 16:31:57 +02:00
Adrien Guatto
e3a03806e4 Added missing boolean operator: XOR. 2010-08-02 16:14:35 +02:00
Adrien Guatto
41bad3d8c4 C backend: "bool" type mandates the inclusion of stdbool.h 2010-07-30 12:44:12 +02:00
Cédric Pasteur
8f4220e08d Made Eupdate dynamic
Modifying an array with
 [ a with [i] = v ]
should expected a dynamic (not static) value
for i (nothing happens if i is in the wrong range).
This is the same behaviour as in Scade and it is 
useful eg to modify an array in a foldi.
2010-07-28 12:34:07 +02:00
Cédric Pasteur
3f0005dba1 Open modules during scoping
We need to open Modules during scoping so that 
we can resolve consts given without a module name.
2010-07-28 10:44:32 +02:00
Cédric Pasteur
c99e29ef74 Make sure to unalias type when checking for arrays 2010-07-28 09:53:16 +02:00
Cédric Pasteur
c2ebaec784 Correct normalization of Ctuple
It was not that hard, just had to stop and really
take the time to understand the problem...
2010-07-28 09:39:47 +02:00
Cédric Pasteur
ebc1f326b4 Fixed initialization of (=) operator 2010-07-28 09:39:47 +02:00
Cédric Pasteur
7945ef9eb8 Fixed a problem with simple_exp
This enables the parser to accept both
	m.x.y
and (m.x).y
2010-07-28 09:39:47 +02:00
Adrien Guatto
d4f441ae19 Fixed missing control in node apps with resets. 2010-07-27 17:56:15 +02:00
Cédric Pasteur
627979534a Generate correct call for operators 2010-07-27 17:48:21 +02:00
Cédric Pasteur
221eea1644 Added polymorphic (=) and (<>) operators
These two operators really need to be polymorphic, 
so they cannot be in Pervasives. a <> b is translated
to not (a = b>) at parsing.
2010-07-27 17:16:49 +02:00
Cédric Pasteur
6d8556c63e Added missing cases for causality 2010-07-27 17:16:49 +02:00
Adrien Guatto
f7d08ca221 C backend: put the C code for node_decs into the same file. 2010-07-27 16:28:23 +02:00
Adrien Guatto
c328ecb9bd Obc_utils can now compute dependencies of an Obc program. 2010-07-27 16:28:23 +02:00
Cédric Pasteur
a3b271c948 Allow to write x.f.g 2010-07-27 15:32:39 +02:00
Cédric Pasteur
5b628d3c16 No need to call message directly 2010-07-27 14:14:24 +02:00
Cédric Pasteur
69270e9eb1 Open modules before typing anything 2010-07-27 14:12:27 +02:00
Cédric Pasteur
eb0db1dafc Call Modules.find_const
The exception is intercepted at the level of the
find_const that was redefined in Typing otherwise
2010-07-27 14:12:11 +02:00
Cédric Pasteur
2e44402b03 Two fixes in heptc
- Add the directory of the file as an include
- write interfaces with uncapitalized filenames,
as expected by modules.
2010-07-27 14:00:15 +02:00
Cédric Pasteur
5939673999 Catch errors raised during typing of static exp 2010-07-27 13:28:33 +02:00
Cédric Pasteur
56570f904d Fixed bug with static exp and array_fill
The power is now in the static args
2010-07-27 13:22:46 +02:00
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