Neil Brown
7e7a437a3b
Switched to using a different kind of pragma for occam externals, and munged the names to avoid collisions
...
The separately compiled occam PROCs now use #PRAGMA OCCAMEXTERNAL, which also discards the "= number" thing at the end. These PROCs then need to be processed differently when adding on the sizes (C externals have one size per dimension, occam externals have the normal array of sizes).
We also now record which processes were originally at the top-level, and keep their original names (i.e. minus the _u43 suffixes) plus an "occam_" prefix to avoid collisions.
2009-04-01 19:21:40 +00:00
Neil Brown
8153cfc659
Added code for full compilation mode to include the relevant C files from occam #USE directives, and link to the relevant object files
2009-04-01 18:32:39 +00:00
Neil Brown
d457b793c0
Added code that allows any external PROCs not beginning with B or C to be handled as normal
...
This shows that my current scheme is a bit of a hack; if an occam programmer starts a normal PROC with B or C, it will be treated funny during separate compilation. In future I probably need some new form of #PRAGMA to support separate compilation, different from that used to interface with C.
2009-04-01 17:29:32 +00:00
Neil Brown
db9b8e9d91
Changed where we generate the .inc file from being in the backend, to being a pass just after type-checking
...
We need to generate the externals after we've inferred channel directions, but before we do further work (like adding _sizes parameters and so on).
2009-04-01 16:54:07 +00:00
Neil Brown
abce001bab
Added a command line option to indicate that there is no main PROC
2009-04-01 15:29:22 +00:00
Neil Brown
219bfd9ce1
Modified the C backend so that it will put the forward declarations into a header file and include that
2009-04-01 14:35:47 +00:00
Neil Brown
e9730bfe1e
Got the C++ backend working again, on the cgtests at least
2009-04-01 15:25:18 +00:00
Neil Brown
e91c075bcf
Fixed up a lot of the failing tests
...
I changed a little bit of the code, but mainly the tests. Several of the remaining failures are actually real failures, so I need to dig through the rest carefully. A lot are failing because the C++ backend is broken.
2009-04-01 11:49:37 +00:00
Neil Brown
bea4dcfd80
Took out some C garbage, which gets around 200 more tests passing
2009-03-31 18:02:39 +00:00
Neil Brown
56e5b8da8e
A mega-patch that gets tocktest compiling again
...
However, around a quarter of the tests currently fail...
2009-03-31 17:56:56 +00:00
Neil Brown
2941cbd049
Fixed a problem with record abbreviations being pulled all the way up to the top (which C doesn't like)
2009-03-31 16:50:42 +00:00
Neil Brown
91ce2fe960
Fixed generation of actuals that are ActualExpression (ExprVariable {})
2009-03-31 16:08:37 +00:00
Neil Brown
3566c6206f
Fixed retyping non-packed records into arrays
2009-03-31 16:08:24 +00:00
Neil Brown
edc336de7a
Fixed a bug when generating some no-arg PROCs
2009-03-31 10:50:52 +00:00
Neil Brown
dbf886996a
Removed various bits of old code relating to the old sizes mechanism
2009-03-31 10:50:04 +00:00
Neil Brown
4d2cdc0a9d
Altered the backend passes to use all the new VariableSizes mechanisms rather than the old stuff
...
This is quite a big patch, as it reworks a large pass. The three backend passes dealing with sizes stuff have now been merged into one (because the traversal order is important).
Instead of generating sizes arrays by blindly appending "_sizes", we now create nonces and store them in the csArraySizes map in CompState, which is a bit less hacky.
Added to that, we also generate constant-size arrays (e.g. for [8]) -- which are needed in case we pass the array to a PROC that has a flexible dimension -- at the top of the whole program, and use that array for every variable with that size (so if foo and bar have the same size, we use the same sizes array from the top of the program).
2009-03-31 10:22:34 +00:00
Neil Brown
a10921d53a
Fixed the last few uses of genSizeSuffix in GenerateC to use the new system instead
2009-03-31 09:35:59 +00:00
Neil Brown
f749967af4
Added some cases inside genVariable to handle the VariableSizes item
...
For mobile arrays, this uses the ->dimensions member. For normal arrays, it uses the associated sizes array (by looking it up in CompState).
2009-03-31 09:34:36 +00:00
Neil Brown
298ba6465a
Removed genSizeSuffix and turned most uses of it into calls to genDynamicDim
2009-03-31 09:29:55 +00:00
Neil Brown
b8daebfbc3
Made genDynamicDim a top-level function, and change its implementation to use VariableSizes rather than C-specific stuff
2009-03-31 09:28:45 +00:00
Neil Brown
ecc42f704d
Fixed all the nasty hacks from earlier relating to running processes in parallel
2009-03-27 21:35:28 +00:00
Neil Brown
0ca5bb17d7
A collection of nasty hacks to get Tock's replicated PARs working, and to stop memory leaking
...
All the changes in this patch should be undone as soon as possible (building the list of workspaces, and how we sort out the enrollment counts -- that should be done by pulling up PAR replicator counts outside the whole PAR), but for now, it works.
2009-03-27 17:26:37 +00:00
Neil Brown
2237d15247
Various fixes in the C backend to get oak working
2009-03-27 16:29:06 +00:00
Neil Brown
dbf0b90601
Fixed array sizes for external procs to have one extra formal per dimension, rather than passing the whole array in a single formal (this is now how it should work!)
2009-03-27 16:28:23 +00:00
Neil Brown
574694d078
Fixed some stuff on external PROCs (the adding of sizes parameters)
2009-03-26 23:58:08 +00:00
Neil Brown
6e66cf7521
Added a command-line option to change how much stack the unknown functions are given
2009-03-26 22:49:38 +00:00
Neil Brown
eb99480484
Finished off the support for external C functions
2009-03-26 22:37:28 +00:00
Neil Brown
733293745e
Added a work-around for generating infinity and NaN in the C backend
2009-03-26 18:39:23 +00:00
Neil Brown
1c4d44b739
Fixed generation of C types for channels (somewhere, one is being abbreviated with ValAbbrev, so I'll allow it for now)
2009-03-25 18:27:13 +00:00
Neil Brown
45b22472c3
Changed the rest of tock to reflect the changes to the Is constructor
2009-03-24 23:57:24 +00:00
Neil Brown
eaa8ece954
Fixed allocation of mobile channel bundles, as apparently a clone is unnecessary
2009-03-24 23:54:13 +00:00
Neil Brown
e269efe388
Added some quick hacks to make recursive PROCs work
...
This is along the lines of the Tock ticket. cgtest90 (recursive FUNCTIONs) now passes, but cgtest91 (recursive PROCs) doesn't, because it uses barriers.
2009-03-24 00:14:14 +00:00
Neil Brown
e08197bbef
Added various bits for shared channels, which now means that cgtest86 compiles and passes
2009-03-24 00:08:02 +00:00
Neil Brown
10b4cd7cfc
Realised that allocating mobile arrays as arrays of bytes screws up the resize intrinsic, and gave it a helping hand
2009-03-23 21:28:28 +00:00
Neil Brown
d3f4ff1a9a
Corrected BYTESIN for mobile arrays
2009-03-23 21:18:52 +00:00
Neil Brown
658bfd08e4
Added some code to deal with channel bundles
2009-03-23 21:14:10 +00:00
Neil Brown
7458014c2c
Fixed the C types for records, again
2009-03-23 21:13:55 +00:00
Neil Brown
585a5ed477
Realised that mobile arrays should be allocated after all, unless they are missing a dimension
2009-03-23 21:13:13 +00:00
Neil Brown
3739ff7cbd
Added some extra paranoid bracketing
2009-03-23 21:12:46 +00:00
Neil Brown
9c433b248a
Tried using my new CCSP helper function to allocate arrays
2009-03-23 18:59:57 +00:00
Neil Brown
e8fec8585b
Stopped mobile arrays being allocated after declaration (with random size!)
2009-03-23 15:56:04 +00:00
Neil Brown
919781eabc
Fixed the generation of mobile array dereferences
2009-03-23 15:55:38 +00:00
Neil Brown
4493b3d9e4
Removed some of the mobile passes at Carl's suggestion that I didn't need them anyway
2009-03-23 15:51:11 +00:00
Neil Brown
228523e7e7
Added the generation of IsDefined checks, and stopped them being applied to derefenced arrays
2009-03-23 15:48:24 +00:00
Neil Brown
fae0d6d6a2
Made intrinsic PROCs take the workspace as a parameter, and turned . to _ in their names (and implemented the RESIZE.MOBILE.ARRAY.1D intrinsic)
2009-03-23 15:46:24 +00:00
Neil Brown
3ae4824184
Added a missing case to the C backend
2009-03-22 22:49:10 +00:00
Neil Brown
0fc7266c29
Fixed various things to do with abbreviating sizes arrays, and corrected array assignment and the mobile type for Bool
2009-03-22 22:32:56 +00:00
Neil Brown
8492dc03d4
Introduced a ShareMode in the AST, and used it in the channel attributes (rather than Bool)
2009-03-22 22:29:39 +00:00
Neil Brown
7b52565270
Fixed a few things that work around the user data types problem
2009-03-22 21:06:31 +00:00
Neil Brown
0a97946fbf
Fixed various type-checking things related to mobile types
2009-03-22 21:05:36 +00:00
Neil Brown
12b3c4cd89
Added a pass (and adjusted the backends) to deal with the move-in move-out semantics of mobiles
...
Also known as communication semantics, I think. The pass adds an extra channel parameter per mobile (perhaps in future this could be a single extra channel?) that is used to send back the mobile value, and hacked the backend so that the communications to receive these mobiles are done in the right place (after the processes have been run, but before waiting on the barrier for them to complete).
cgtest83 now compiles, runs and passes without a segfault.
2009-03-22 18:28:42 +00:00
Neil Brown
d12d630de1
Added some code to allocate a mobile before a dereferenced input
2009-03-22 18:28:19 +00:00
Neil Brown
20f2fb2c14
Renamed squashArrays to backendPasses, since that's what it has become
2009-03-22 18:27:10 +00:00
Neil Brown
4f6050069c
Moved isMobileType into the Types module where it belongs
2009-03-22 18:26:14 +00:00
Neil Brown
854a1fca50
Fixed various things in the C backend and made genVariable more flexible, for functions that want to specify the C type desired
2009-03-22 14:49:35 +00:00
Neil Brown
3801857817
Fixed a bug in the C backend (using the wrong type in a call)
2009-03-22 14:27:46 +00:00
Neil Brown
2fc327287a
Fixed various conflicts in the backends directory while merging one of my branches
2009-03-21 23:43:04 +00:00
Neil Brown
90634ff1d6
Improved the error message for getting the C type to leave the mobile wrapper on
2009-03-21 23:41:54 +00:00
Neil Brown
f5fa5e5caf
Fiddled with the code supplying the mobile types to MTAlloc
2009-03-20 21:20:43 +00:00
Neil Brown
1d43b9d7bd
Poked the mobile and record stuff until cgtest83 compiles (it blows up on running, but it compiles)
2009-03-20 19:24:54 +00:00
Neil Brown
bbabef868c
Moved the comma-related helper functions to the GenerateCBased module
2009-03-20 19:24:20 +00:00
Neil Brown
1044a94730
Changed most of the rest of Tock (except some tests) to understand the new record attributes
2009-03-20 15:18:29 +00:00
Neil Brown
e79fa43fa2
Fixed the last few of the channel uses to request abbreviations of channels when using them
2009-03-21 23:24:21 +00:00
Neil Brown
e0bec17672
Fixed the tests enough to get them to compile, but a lot fail
2009-03-21 23:05:11 +00:00
Neil Brown
e4bed22b7e
Various fixes to the C++ backend to at least get it compiling (not tested it much yet)
2009-03-21 23:04:25 +00:00
Neil Brown
bf2f50ba2c
Removed a lot of commented out old code in the C backend
2009-03-21 23:03:46 +00:00
Neil Brown
defca6e34d
Started simplifying some of the C backend in light of the new changes, and made a few fixes
...
The first few cgtests (at least) now pass with the new system in the C backend.
2009-03-21 22:59:25 +00:00
Neil Brown
b6b0577ecd
Fixed directed variables (for the C++ backend)
2009-03-21 21:01:25 +00:00
Neil Brown
8e768e2b25
Started fixing up the new variable stuff to work with mobiles
2009-03-21 20:50:06 +00:00
Neil Brown
87fefcb66d
Fiddled with the new variable stuff in the C backend, and now variable subscripts seem to work
2009-03-21 19:30:29 +00:00
Neil Brown
ca207f7291
Quickly implemented the first version of a revamp of the genVariable code in the C backend
...
Surprisingly, the generated code seems to be compiled by GCC without warnings. Array subscripts are currently unimplemented (a star, i.e. equivalent of subscript 0) is used wherever there should be a subscript.
The new mechanism is based on working out the C type of the original variable/abbrev-mode, the C type of the desired variable/abbrev-mode, and works out how many *s or &s to insert to coerce it to the right type.
2009-03-21 18:43:32 +00:00
Neil Brown
936dc29fde
Fixed some of the tests, and added another testcase for array passing, based on one of Carl's examples
2009-03-20 12:59:16 +00:00
Neil Brown
56cd7d73c4
Changed the channel-output code generation so that it knows the desired type being sent
2009-03-20 11:37:52 +00:00
Neil Brown
65550b705e
Added an AllSizesVariable item to the AST so that the backend inserts the right code for mobiles and non-mobiles
2009-03-20 11:31:14 +00:00
Neil Brown
3c4f76ed46
Fixed the memory leaks arising from not clearing mobiles before an input
2009-03-19 18:18:17 +00:00
Neil Brown
7d3e9e8648
Stopped MTRelease being called with a NULL pointer
2009-03-19 16:59:19 +00:00
Neil Brown
65875f523f
Added mobile cloning rather than using dereferencing to copy mobiles
2009-03-19 16:47:31 +00:00
Neil Brown
8e5e73e3a2
Fixed the support in the backends for mobile channel stuff
2009-03-19 15:23:35 +00:00
Neil Brown
a995d29c32
Moved the mobile stuff across to use the CCSP API
2009-03-19 11:33:09 +00:00
Neil Brown
4bc15aae48
Bashed the backend until it works with the new mobility passes (standard occam may be broken though)
2009-02-27 17:12:17 +00:00
Neil Brown
2dd8867c91
Removed C++CSP's mobile stuff so that I only have one unified system to deal with for now
2009-02-27 17:04:11 +00:00
Neil Brown
9614d5f7f9
Fixed the intrinsic PROCs to be generated correctly
2009-02-27 17:13:18 +00:00
Neil Brown
4041284feb
Renamed a slightly confusing backend pass
2009-02-27 17:04:41 +00:00
Neil Brown
cd1b409f96
Removed cppremoveSpec, since it was doing the same as cremoveSpec
2009-02-27 10:49:45 +00:00
Adam Sampson
deedad4268
Add kyb as another possible name for the keyboard channel.
2009-03-21 15:22:58 +00:00
Neil Brown
d0d5cf6779
Fixed the C++ backend where I was trying to be too clever with the sizes
2009-02-11 14:19:34 +00:00
Neil Brown
18f23bf767
Fixed a small problem with the types of arrays of channel-ends in the C++ generation
2009-02-10 22:21:13 +00:00
Neil Brown
14df1e09b7
Corrected some problems caused by moving the direction specifiers up to the whole array (the array wasn't then being pulled up)
2009-02-10 00:28:45 +00:00
Neil Brown
6afbb80e9f
Fixed some of the test modules to work with the new array literals and constructors
2009-02-03 11:19:21 +00:00
Neil Brown
1cde2bd959
Added a few useful error messages in the C backend
2009-02-02 18:26:12 +00:00
Neil Brown
cbeeef486e
Fixed the C backend putting too many braces in array literals, and removed some old comments
2009-02-01 22:27:43 +00:00
Neil Brown
3458a9197a
Adjusted the backends and transformations module to match the new array literal changes
2009-02-01 21:53:17 +00:00
Neil Brown
4f83187549
Fixed up all the tests in light of the new recursive procs
2009-01-29 00:56:32 +00:00
Neil Brown
8a28d765e7
Implemented recursive procs
...
This works fine in the C++ backend, not tested with the C backend yet
2009-01-29 00:43:24 +00:00
Neil Brown
3e8273f4f6
Adjusted the C backend to work with the new step count
2009-01-28 23:51:19 +00:00
Neil Brown
a4f0e85c72
Fixed a bug involving abbreviation of arrays of channels into arrays of channel-ends in the C++ backend
...
The array for the channel-ends was not being allocated storage, so the array (a pointer to some random location) was being written to and causing a seg-fault
2009-01-28 23:16:31 +00:00
Neil Brown
9b1368ffe7
Implemented all but one (RAN) of the intrinsic functions in appendix N by mapping them directly to the C versions
2009-01-27 13:38:00 +00:00
Neil Brown
dbc75ef0b1
Added a pass that helps stop some GCC warnings about literals equivalent to INT_MIN and similar
2009-01-27 13:00:08 +00:00
Neil Brown
0b2708b2ed
Fixed a few small things related to generating intrinsic calls in the C and C++ backends
2009-01-25 20:43:39 +00:00
Neil Brown
0189ba3793
Began implementing the occam intrinsics (some of them, at least) in the C support header
2009-01-23 19:20:26 +00:00