Commit Graph

1278 Commits

Author SHA1 Message Date
Neil Brown
23650da2ff Fixed the findMain pass to use a proper nonce 2007-08-23 10:17:30 +00:00
Neil Brown
0913ab655c Adjusted the tests for findMain to allow a nonce to be using during name mangling 2007-08-23 10:05:54 +00:00
Neil Brown
0c28f6255c Added an initial crude implementation of name mangling for the main function 2007-08-22 22:40:50 +00:00
Neil Brown
1e06768c20 Added channel-end support to the C++CSP backend
I have added two helper functions, but since they are used in contexts that are already specific to C++CSP (i.e. the channel-ends have the ">>" and "<<" operators applied to them) I have not added them to the dictionary of functions.
  
This patch allows C++CSP to actually use the direction of channels to pass around channel-ends rather than channel pointers, just as C++CSP was designed for.
2007-08-22 22:27:04 +00:00
Neil Brown
63d18373b8 Changed tlpInterface to also return the direction of each channel, so that the (C++CSP) backend knows whether to pass it a whole channel, or just an end 2007-08-22 22:07:42 +00:00
Neil Brown
7c61208c93 Added a check to ensure that the channel parameters of the main function have the correct direction if they are specified 2007-08-22 21:49:33 +00:00
Adam Sampson
9efa008443 Add Set rules to PrettyShow.
As Neil pointed out, I'd already added some rules to PrettyShow to handle the
Maps in CompState; this does the same for the Sets, which means it's pshow-able
again.
2007-08-22 23:06:50 +00:00
Adam Sampson
36262fc55e Rework the mechanism that GenerateC uses to get externs from AnalyseAsm.
Neil spotted that I'd broken the C++CSP backend with these changes, and I
wasn't very happy with what I'd done anyway, so this is take 2. Now there's a
separate pass that runs before GenerateC which builds a set of functions used
in PARs.
2007-08-22 22:26:26 +00:00
Adam Sampson
929745f05e Tidy up how Main decides which passes to run.
Since the set of passes that runs now depends on several variables, there's now
an expression which builds a list of passes to run; this should be easier to
extend in the future.
2007-08-22 22:24:08 +00:00
Neil Brown
d90f0aa680 Rain: corrected the transformation of foreach loops to use ValAbbrev when looping over an expression 2007-08-22 17:03:47 +00:00
Neil Brown
9e8dd73149 Fixed the C++CSP backend by allowing it to override the tock_support.h header file with tock_support_cppcsp.h (the latter includes the former, but only after defining some preprocessor directives) 2007-08-22 16:10:47 +00:00
Neil Brown
d065338efe Rain: Added to the resolving pass to make it pass all the tests 2007-08-22 15:54:34 +00:00
Neil Brown
1620528958 Rain: corrected the testUnique4 test to be as I intended 2007-08-22 15:54:05 +00:00
Neil Brown
412a746e25 Rain: added a test for recording and resolving process parameters 2007-08-22 15:20:40 +00:00
Neil Brown
a897712033 Rain: added a pass for finding and tagging the main function 2007-08-22 13:07:59 +00:00
Neil Brown
29f1aa0f2f Rain: extended the resolving pass to include process declarations 2007-08-22 12:40:20 +00:00
Neil Brown
79678055bc Rain: added a test for resolving/recording process names 2007-08-22 12:36:42 +00:00
Neil Brown
96145add21 Rain: combined two passes into one to allow them to work properly in future, and changed the tests accordingly 2007-08-22 12:24:12 +00:00
Neil Brown
9714385eba Rain: added another test for a pass 2007-08-22 11:49:04 +00:00
Neil Brown
d681cd5d95 Rain: corrected the pass transforming the each loops so that it records the nonce names properly in the state 2007-08-22 11:12:57 +00:00
Neil Brown
289b1c79a7 Rain: corrected the tests checking the each-loop transformation to make sure that the nonce names are recorded properly 2007-08-22 11:12:35 +00:00
Neil Brown
914f4cbb2b Rain: tweaked a few tests to use a specific integer type 2007-08-22 11:09:32 +00:00
Neil Brown
849a41fcdd Where head is used (in this case on csMainLocals), protected it with a condition so that it gives a more useful error message than simply head: empty list 2007-08-22 11:07:56 +00:00
Neil Brown
017cb51bd8 Corrected what appeared to be a small bug in defineNonce 2007-08-22 10:55:57 +00:00
Neil Brown
262913fabd Rain: added parsing of output statements 2007-08-22 10:21:20 +00:00
Neil Brown
a39d95add4 Rain: refactored the parser a little (drawing out the each loops) 2007-08-22 10:14:51 +00:00
Neil Brown
005066e3d4 Rain: correcting numbering on some of the parse tests 2007-08-22 10:14:05 +00:00
Neil Brown
ce84ae3db6 Rain: added parsing of all the integer types (along with associated tests) 2007-08-22 10:04:21 +00:00
Neil Brown
7e51ad1b1c Started using the stopCaringPattern function to easily use assertPatternMatch (which pretty-prints its output) instead of assertEqual (which just uses Show) 2007-08-22 09:44:56 +00:00
Neil Brown
d514d40943 Changed the Rain parser to use the new LexRain tokens
This is similar (but not identical) to the change Adam was doing at the same type for occam.
I think the main difference is that rather than returning () from parsing a reserved word,
I return Meta so that you can easily write rules like:
  do { m <- sSemiColon ; return $ A.Skip m}

The tests have also been updated to use the new parser, and fail on either a lexing or a
parsing error.
2007-08-22 09:41:08 +00:00
Neil Brown
b1469fa65b Added LexRain, based heavily on (a slightly older version of) LexOccam 2007-08-22 09:37:27 +00:00
Neil Brown
1890b281fe Rain: moved the resolution of int (to a 64-bit signed integer) out to a pass 2007-08-21 11:00:41 +00:00
Neil Brown
5b19a7658f Rain: added support for parsing channel-end types 2007-08-21 10:53:07 +00:00
Neil Brown
2c26a8eab8 Rain: wrote some tests for parsing channel-end types 2007-08-21 10:47:52 +00:00
Neil Brown
a1ba7b3ef6 Added a useful function to TreeUtil that allows you to replace a given sub-pattern of a Pattern with the DontCare value 2007-08-21 18:32:25 +00:00
Neil Brown
16177f1153 Added better Eq implementation for Pattern, taking account of the poor Eq implementation of Constr 2007-08-21 18:31:39 +00:00
Adam Sampson
51ecf04a90 Move assignment simplification into a pass.
This is the code that expands array and record assignments out into multiple
assignments. Having it done as a pass means it can do a better job -- this
fixes some problems with cgtest56 where the old version of the code couldn't
handle record assignments from literals.

This is the first pass that's had to add a replicator to the tree, so this also
introduces a helper function for generating new replicator counters.
2007-08-22 19:55:52 +00:00
Adam Sampson
15a8f95647 Use show rather than pshow on CompState.
CompState now contains Sets and Maps, which aren't instances of Data and thus
break pshow. This could be fixed in the future by providing instance
definitions, assuming the GHC library maintainers don't beat us to it.
2007-08-22 19:18:26 +00:00
Adam Sampson
9829183a7a Apply unique naming to unscoped names too.
This means that field names end up as "foo_u123" rather than "foo" in the
generated source -- which is a good thing, because some of the cgtests use
field names like "bool" and "int".
2007-08-22 16:41:03 +00:00
Adam Sampson
95e01e54d5 Make underlyingType merge array dimensions.
This fixes a bug that cgtest56 exposed, where an array of a user-defined type
that was itself an array wound up being an array of arrays rather than a single
array.

As part of this, makeArrayType is now called addDimensions, and takes a list of
dimensions to add rather than just one.
2007-08-22 15:00:54 +00:00
Adam Sampson
01929b3f35 Fix handling of array-of-record literals.
isValidLiteralType was a bit too simplistic before; it needs to look at array
types one dimension at a time rather than trying to do the whole lot at once.
2007-08-22 12:55:41 +00:00
Adam Sampson
da89323dbc Rename Parse to ParseOccam. 2007-08-22 01:59:51 +00:00
Adam Sampson
e17db34eb6 Some Haddock tweaks. 2007-08-22 01:43:52 +00:00
Adam Sampson
95001681d4 Tidy up comments in AST.
This also makes the show instance for types print UINT32 etc. for the types
Neil's added, since that'd be the likely syntax for them in occam.
2007-08-22 01:40:51 +00:00
Neil Brown
96f6bc39fd Added a signed 8-bit type and unsigned 16-,32- and 64-bit types to the AST, adjusting all other code accordingly
The types have been added to the AST.  Beyond the obvious trivial changes (extra cases in functions, etc), the only
significant change was that isSafeConversion needed to be changed.  I took the opportunity to totally rewrite the 
function into a graph-like mechanism rather than just using a list.  To demonstrate its correctness I also wrote an
exhaustive test for it.
2007-08-21 12:43:00 +00:00
Neil Brown
3b14eec036 Added direction specifiers and further attributes (such as whether the channel is shared) to the Chan type in the AST 2007-08-21 10:35:18 +00:00
Adam Sampson
dfefcdfd41 Refactor AnalyseAsm to use a state monad.
This makes the code quite a bit cleaner, and since it can keep track of which
functions it's already analysed it goes a lot quicker on big files.
2007-08-22 00:11:20 +00:00
Adam Sampson
6f00d4f4a7 Make the label regex more specific.
This makes it only generate legal labels in the .post.c file.
2007-08-21 22:19:54 +00:00
Adam Sampson
bd44a1c748 Add a few bytes of stack to every function.
This also makes sure that every function gets a stack size constant.

There are some functions which don't do any stack adjustment -- where GCC's
smart enough to just compile them to a "ret" (because it knows it needs a
function pointer, but also that the function does nothing). CCSP doesn't like
it when you ask for a stack size of 0; I haven't yet investigated why, but this is likely to change anyway once Carl's changes go into CCSP trunk.
2007-08-21 22:06:21 +00:00
Adam Sampson
10b0b556d2 Update the Makefile for the new cgtests branch. 2007-08-21 21:36:35 +00:00