%
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-% $Id: AbsCSyn.lhs,v 1.18 1998/12/02 13:17:16 simonm Exp $
+% $Id: AbsCSyn.lhs,v 1.21 1999/03/11 11:32:22 simonm Exp $
%
\section[AbstractC]{Abstract C: the last stop before machine code}
\begin{code}
| CAssign
- CAddrMode -- target
- CAddrMode -- source
+ !CAddrMode -- target
+ !CAddrMode -- source
| CJump
CAddrMode -- Put this in the program counter
CAddrMode -- Any base address mode
ReturnInfo -- How to get the return address from the base address
- | CSwitch CAddrMode
+ | CSwitch !CAddrMode
[(Literal, AbstractC)] -- alternatives
AbstractC -- default; if there is no real Abstract C in here
-- (e.g., all comments; see function "nonemptyAbsC"),
AbstractC
| CRetDirect -- Direct return
- Unique -- for making labels
+ !Unique -- for making labels
AbstractC -- return code
(CLabel,SRT) -- SRT info
Liveness -- stack liveness at the return point
AbstractC -- Slow entry point code
(Maybe AbstractC)
-- Fast entry point code, if any
- (CLabel,SRT) -- SRT info
String -- Closure description; NB we can't get this
-- from ClosureInfo, because the latter refers
-- to the *right* hand side of a defn, whereas
CAddrMode -- Offset
PrimRep -- For casting
- | CTemp Unique PrimRep -- Temporary locations
+ | CTemp !Unique !PrimRep -- Temporary locations
-- ``Temporaries'' correspond to local variables in C, and registers in
-- native code.