Sophie

Sophie

distrib > Fedora > 14 > i386 > by-pkgid > 8d1ef08c9e0d44c69764afc615a03d0d > files > 1856

ghc-ghc-devel-6.12.3-5.fc14.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>codeGen/SMRep.lhs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
%
% (c) The University of Glasgow 2006
% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%

Storage manager representation of closures

This is here, rather than in ClosureInfo, just to keep nhc happy.
Other modules should access this info through ClosureInfo.

\begin{code}
<pre><a name="line-1"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>SMRep</span> <span class='hs-layout'>(</span>
<a name="line-2"></a>	<span class='hs-comment'>-- Words and bytes</span>
<a name="line-3"></a>	<span class='hs-conid'>StgWord</span><span class='hs-layout'>,</span> <span class='hs-conid'>StgHalfWord</span><span class='hs-layout'>,</span> 
<a name="line-4"></a>	<span class='hs-varid'>hALF_WORD_SIZE</span><span class='hs-layout'>,</span> <span class='hs-varid'>hALF_WORD_SIZE_IN_BITS</span><span class='hs-layout'>,</span>
<a name="line-5"></a>	<span class='hs-conid'>WordOff</span><span class='hs-layout'>,</span> <span class='hs-conid'>ByteOff</span><span class='hs-layout'>,</span>
<a name="line-6"></a>
<a name="line-7"></a>	<span class='hs-comment'>-- Argument/return representations</span>
<a name="line-8"></a>	<span class='hs-conid'>CgRep</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>nonVoidArg</span><span class='hs-layout'>,</span>
<a name="line-9"></a>	<span class='hs-varid'>argMachRep</span><span class='hs-layout'>,</span> <span class='hs-varid'>primRepToCgRep</span><span class='hs-layout'>,</span> 
<a name="line-10"></a><span class='hs-comment'>-- Temp primRepHint, typeHint,</span>
<a name="line-11"></a>	<span class='hs-varid'>isFollowableArg</span><span class='hs-layout'>,</span> <span class='hs-varid'>isVoidArg</span><span class='hs-layout'>,</span> 
<a name="line-12"></a>	<span class='hs-varid'>isFloatingArg</span><span class='hs-layout'>,</span> <span class='hs-varid'>is64BitArg</span><span class='hs-layout'>,</span>
<a name="line-13"></a>	<span class='hs-varid'>separateByPtrFollowness</span><span class='hs-layout'>,</span>
<a name="line-14"></a>	<span class='hs-varid'>cgRepSizeW</span><span class='hs-layout'>,</span> <span class='hs-varid'>cgRepSizeB</span><span class='hs-layout'>,</span>
<a name="line-15"></a>	<span class='hs-varid'>retAddrSizeW</span><span class='hs-layout'>,</span>
<a name="line-16"></a>
<a name="line-17"></a>	<span class='hs-varid'>typeCgRep</span><span class='hs-layout'>,</span> <span class='hs-varid'>idCgRep</span><span class='hs-layout'>,</span> <span class='hs-varid'>tyConCgRep</span><span class='hs-layout'>,</span> 
<a name="line-18"></a>
<a name="line-19"></a>	<span class='hs-comment'>-- Closure repesentation</span>
<a name="line-20"></a>	<span class='hs-conid'>SMRep</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>ClosureType</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span>
<a name="line-21"></a>	<span class='hs-varid'>isStaticRep</span><span class='hs-layout'>,</span>
<a name="line-22"></a>	<span class='hs-varid'>fixedHdrSize</span><span class='hs-layout'>,</span> <span class='hs-varid'>arrWordsHdrSize</span><span class='hs-layout'>,</span> <span class='hs-varid'>arrPtrsHdrSize</span><span class='hs-layout'>,</span>
<a name="line-23"></a>	<span class='hs-varid'>profHdrSize</span><span class='hs-layout'>,</span> <span class='hs-varid'>thunkHdrSize</span><span class='hs-layout'>,</span>
<a name="line-24"></a>	<span class='hs-varid'>smRepClosureType</span><span class='hs-layout'>,</span> <span class='hs-varid'>smRepClosureTypeInt</span><span class='hs-layout'>,</span>
<a name="line-25"></a>
<a name="line-26"></a>	<span class='hs-varid'>rET_SMALL</span><span class='hs-layout'>,</span> <span class='hs-varid'>rET_BIG</span>
<a name="line-27"></a>    <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-28"></a>
<a name="line-29"></a><span class='hs-cpp'>#include "../includes/MachDeps.h"</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>CmmExpr</span>	<span class='hs-comment'>-- CmmType and friends</span>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Id</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Type</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>TyCon</span>
<a name="line-35"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>StaticFlags</span>
<a name="line-36"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Constants</span>
<a name="line-37"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Outputable</span>
<a name="line-38"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>FastString</span>
<a name="line-39"></a>
<a name="line-40"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Word</span>
</pre>\end{code}


%************************************************************************
%*									*
		Words and bytes
%*									*
%************************************************************************

\begin{code}
<pre><a name="line-1"></a><a name="WordOff"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>WordOff</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Int</span>	<span class='hs-comment'>-- Word offset, or word count</span>
<a name="line-2"></a><a name="ByteOff"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>ByteOff</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Int</span>	<span class='hs-comment'>-- Byte offset, or byte count</span>
</pre>\end{code}

StgWord is a type representing an StgWord on the target platform.

\begin{code}
<pre><a name="line-1"></a><span class='hs-cpp'>#</span><span class='hs-keyword'>if</span> <span class='hs-conid'>SIZEOF_HSWORD</span> <span class='hs-varop'>==</span> <span class='hs-num'>4</span>
<a name="line-2"></a><a name="StgWord"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>StgWord</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Word32</span>
<a name="line-3"></a><a name="StgHalfWord"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>StgHalfWord</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Word16</span>
<a name="line-4"></a><a name="hALF_WORD_SIZE"></a><span class='hs-definition'>hALF_WORD_SIZE</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteOff</span>
<a name="line-5"></a><span class='hs-definition'>hALF_WORD_SIZE</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>2</span>
<a name="line-6"></a><a name="hALF_WORD_SIZE_IN_BITS"></a><span class='hs-definition'>hALF_WORD_SIZE_IN_BITS</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>
<a name="line-7"></a><span class='hs-definition'>hALF_WORD_SIZE_IN_BITS</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>16</span>
<a name="line-8"></a><span class='hs-cpp'>#elif SIZEOF_HSWORD == 8</span>
<a name="line-9"></a><a name="StgWord"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>StgWord</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Word64</span>
<a name="line-10"></a><a name="StgHalfWord"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>StgHalfWord</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Word32</span>
<a name="line-11"></a><span class='hs-definition'>hALF_WORD_SIZE</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteOff</span>
<a name="line-12"></a><span class='hs-definition'>hALF_WORD_SIZE</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>4</span>
<a name="line-13"></a><span class='hs-definition'>hALF_WORD_SIZE_IN_BITS</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>
<a name="line-14"></a><span class='hs-definition'>hALF_WORD_SIZE_IN_BITS</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>32</span>
<a name="line-15"></a><span class='hs-cpp'>#else</span>
<a name="line-16"></a><span class='hs-cpp'>#error unknown SIZEOF_HSWORD</span>
<a name="line-17"></a><span class='hs-cpp'>#endif</span>
</pre>\end{code}


%************************************************************************
%*									*
			CgRep
%*									*
%************************************************************************

An CgRep is an abstraction of a Type which tells the code generator
all it needs to know about the calling convention for arguments (and
results) of that type.  In particular, the ArgReps of a function's
arguments are used to decide which of the RTS's generic apply
functions to call when applying an unknown function.

It contains more information than the back-end data type MachRep,
so one can easily convert from CgRep -> MachRep.  (Except that
there's no MachRep for a VoidRep.)

It distinguishes 
	pointers from non-pointers (we sort the pointers together
	when building closures)

	void from other types: a void argument is different from no argument

All 64-bit types map to the same CgRep, because they're passed in the
same register, but a PtrArg is still different from an NonPtrArg
because the function's entry convention has to take into account the
pointer-hood of arguments for the purposes of describing the stack on
entry to the garbage collector.

\begin{code}
<pre><a name="line-1"></a><a name="CgRep"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>CgRep</span> 
<a name="line-2"></a>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>VoidArg</span> 	<span class='hs-comment'>-- Void</span>
<a name="line-3"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>PtrArg</span> 	<span class='hs-comment'>-- Word-sized heap pointer, followed</span>
<a name="line-4"></a>		<span class='hs-comment'>-- by the garbage collector</span>
<a name="line-5"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>NonPtrArg</span> 	<span class='hs-comment'>-- Word-sized non-pointer</span>
<a name="line-6"></a>		<span class='hs-comment'>-- (including addresses not followed by GC)</span>
<a name="line-7"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>LongArg</span>	<span class='hs-comment'>-- 64-bit non-pointer</span>
<a name="line-8"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>FloatArg</span> 	<span class='hs-comment'>-- 32-bit float</span>
<a name="line-9"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>DoubleArg</span> 	<span class='hs-comment'>-- 64-bit float</span>
<a name="line-10"></a>  <span class='hs-keyword'>deriving</span> <span class='hs-conid'>Eq</span>
<a name="line-11"></a>
<a name="line-12"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Outputable</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyword'>where</span>
<a name="line-13"></a>    <span class='hs-varid'>ppr</span> <span class='hs-conid'>VoidArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ptext</span> <span class='hs-layout'>(</span><span class='hs-varid'>sLit</span> <span class='hs-str'>"V_"</span><span class='hs-layout'>)</span>
<a name="line-14"></a>    <span class='hs-varid'>ppr</span> <span class='hs-conid'>PtrArg</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ptext</span> <span class='hs-layout'>(</span><span class='hs-varid'>sLit</span> <span class='hs-str'>"P_"</span><span class='hs-layout'>)</span>
<a name="line-15"></a>    <span class='hs-varid'>ppr</span> <span class='hs-conid'>NonPtrArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ptext</span> <span class='hs-layout'>(</span><span class='hs-varid'>sLit</span> <span class='hs-str'>"I_"</span><span class='hs-layout'>)</span>
<a name="line-16"></a>    <span class='hs-varid'>ppr</span> <span class='hs-conid'>LongArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ptext</span> <span class='hs-layout'>(</span><span class='hs-varid'>sLit</span> <span class='hs-str'>"L_"</span><span class='hs-layout'>)</span>
<a name="line-17"></a>    <span class='hs-varid'>ppr</span> <span class='hs-conid'>FloatArg</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ptext</span> <span class='hs-layout'>(</span><span class='hs-varid'>sLit</span> <span class='hs-str'>"F_"</span><span class='hs-layout'>)</span>
<a name="line-18"></a>    <span class='hs-varid'>ppr</span> <span class='hs-conid'>DoubleArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ptext</span> <span class='hs-layout'>(</span><span class='hs-varid'>sLit</span> <span class='hs-str'>"D_"</span><span class='hs-layout'>)</span>
<a name="line-19"></a>
<a name="line-20"></a><a name="argMachRep"></a><span class='hs-definition'>argMachRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>CmmType</span>
<a name="line-21"></a><span class='hs-definition'>argMachRep</span> <span class='hs-conid'>PtrArg</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>gcWord</span>
<a name="line-22"></a><span class='hs-definition'>argMachRep</span> <span class='hs-conid'>NonPtrArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>bWord</span>
<a name="line-23"></a><span class='hs-definition'>argMachRep</span> <span class='hs-conid'>LongArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>b64</span>
<a name="line-24"></a><span class='hs-definition'>argMachRep</span> <span class='hs-conid'>FloatArg</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f32</span>
<a name="line-25"></a><span class='hs-definition'>argMachRep</span> <span class='hs-conid'>DoubleArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f64</span>
<a name="line-26"></a><span class='hs-definition'>argMachRep</span> <span class='hs-conid'>VoidArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>panic</span> <span class='hs-str'>"argMachRep:VoidRep"</span>
<a name="line-27"></a>
<a name="line-28"></a><a name="primRepToCgRep"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>PrimRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>CgRep</span>
<a name="line-29"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>VoidRep</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>VoidArg</span>
<a name="line-30"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>PtrRep</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>PtrArg</span>
<a name="line-31"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>IntRep</span>	  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonPtrArg</span>
<a name="line-32"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>WordRep</span>	  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonPtrArg</span>
<a name="line-33"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>Int64Rep</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LongArg</span>
<a name="line-34"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>Word64Rep</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LongArg</span>
<a name="line-35"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>AddrRep</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NonPtrArg</span>
<a name="line-36"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>FloatRep</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FloatArg</span>
<a name="line-37"></a><span class='hs-definition'>primRepToCgRep</span> <span class='hs-conid'>DoubleRep</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>DoubleArg</span>
<a name="line-38"></a>
<a name="line-39"></a><a name="idCgRep"></a><span class='hs-definition'>idCgRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Id</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>CgRep</span>
<a name="line-40"></a><span class='hs-definition'>idCgRep</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>typeCgRep</span> <span class='hs-varop'>.</span> <span class='hs-varid'>idType</span> <span class='hs-varop'>$</span> <span class='hs-varid'>x</span>
<a name="line-41"></a>
<a name="line-42"></a><a name="tyConCgRep"></a><span class='hs-definition'>tyConCgRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>TyCon</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>CgRep</span>
<a name="line-43"></a><span class='hs-definition'>tyConCgRep</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>primRepToCgRep</span> <span class='hs-varop'>.</span> <span class='hs-varid'>tyConPrimRep</span>
<a name="line-44"></a>
<a name="line-45"></a><a name="typeCgRep"></a><span class='hs-definition'>typeCgRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Type</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>CgRep</span>
<a name="line-46"></a><span class='hs-definition'>typeCgRep</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>primRepToCgRep</span> <span class='hs-varop'>.</span> <span class='hs-varid'>typePrimRep</span> 
</pre>\end{code}

Whether or not the thing is a pointer that the garbage-collector
should follow. Or, to put it another (less confusing) way, whether
the object in question is a heap object. 

Depending on the outcome, this predicate determines what stack
the pointer/object possibly will have to be saved onto, and the
computation of GC liveness info.

\begin{code}
<pre><a name="line-1"></a><a name="isFollowableArg"></a><span class='hs-definition'>isFollowableArg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>  <span class='hs-comment'>-- True &lt;=&gt; points to a heap object</span>
<a name="line-2"></a><span class='hs-definition'>isFollowableArg</span> <span class='hs-conid'>PtrArg</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-3"></a><span class='hs-definition'>isFollowableArg</span> <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-4"></a>
<a name="line-5"></a><a name="isVoidArg"></a><span class='hs-definition'>isVoidArg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-6"></a><span class='hs-definition'>isVoidArg</span> <span class='hs-conid'>VoidArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-7"></a><span class='hs-definition'>isVoidArg</span> <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-8"></a>
<a name="line-9"></a><a name="nonVoidArg"></a><span class='hs-definition'>nonVoidArg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-10"></a><span class='hs-definition'>nonVoidArg</span> <span class='hs-conid'>VoidArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-11"></a><span class='hs-definition'>nonVoidArg</span> <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-12"></a>
<a name="line-13"></a><span class='hs-comment'>-- isFloatingArg is used to distinguish @Double@ and @Float@ which</span>
<a name="line-14"></a><span class='hs-comment'>-- cause inadvertent numeric conversions if you aren't jolly careful.</span>
<a name="line-15"></a><span class='hs-comment'>-- See codeGen/CgCon:cgTopRhsCon.</span>
<a name="line-16"></a>
<a name="line-17"></a><a name="isFloatingArg"></a><span class='hs-definition'>isFloatingArg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-18"></a><span class='hs-definition'>isFloatingArg</span> <span class='hs-conid'>DoubleArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-19"></a><span class='hs-definition'>isFloatingArg</span> <span class='hs-conid'>FloatArg</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-20"></a><span class='hs-definition'>isFloatingArg</span> <span class='hs-keyword'>_</span>         <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-21"></a>
<a name="line-22"></a><a name="is64BitArg"></a><span class='hs-definition'>is64BitArg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-23"></a><span class='hs-definition'>is64BitArg</span> <span class='hs-conid'>LongArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-24"></a><span class='hs-definition'>is64BitArg</span> <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
</pre>\end{code}

\begin{code}
<pre><a name="line-1"></a><a name="separateByPtrFollowness"></a><span class='hs-definition'>separateByPtrFollowness</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>CgRep</span><span class='hs-layout'>,</span><span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>CgRep</span><span class='hs-layout'>,</span><span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>CgRep</span><span class='hs-layout'>,</span><span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span>
<a name="line-2"></a><span class='hs-comment'>-- Returns (ptrs, non-ptrs)</span>
<a name="line-3"></a><span class='hs-definition'>separateByPtrFollowness</span> <span class='hs-varid'>things</span>
<a name="line-4"></a>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sep_things</span> <span class='hs-varid'>things</span> <span class='hs-conid'>[]</span> <span class='hs-conid'>[]</span>
<a name="line-5"></a>    <span class='hs-comment'>-- accumulating params for follow-able and don't-follow things...</span>
<a name="line-6"></a>  <span class='hs-keyword'>where</span>
<a name="line-7"></a>    <span class='hs-varid'>sep_things</span> <span class='hs-conid'>[]</span>    	       <span class='hs-varid'>bs</span> <span class='hs-varid'>us</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>reverse</span> <span class='hs-varid'>bs</span><span class='hs-layout'>,</span> <span class='hs-varid'>reverse</span> <span class='hs-varid'>us</span><span class='hs-layout'>)</span>
<a name="line-8"></a>    <span class='hs-varid'>sep_things</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>PtrArg</span><span class='hs-layout'>,</span><span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-conop'>:</span><span class='hs-varid'>ts</span><span class='hs-layout'>)</span> <span class='hs-varid'>bs</span> <span class='hs-varid'>us</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sep_things</span> <span class='hs-varid'>ts</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-conid'>PtrArg</span><span class='hs-layout'>,</span><span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-conop'>:</span><span class='hs-varid'>bs</span><span class='hs-layout'>)</span> <span class='hs-varid'>us</span>
<a name="line-9"></a>    <span class='hs-varid'>sep_things</span> <span class='hs-layout'>(</span><span class='hs-varid'>t</span>         <span class='hs-conop'>:</span><span class='hs-varid'>ts</span><span class='hs-layout'>)</span> <span class='hs-varid'>bs</span> <span class='hs-varid'>us</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sep_things</span> <span class='hs-varid'>ts</span> <span class='hs-varid'>bs</span>		     <span class='hs-layout'>(</span><span class='hs-varid'>t</span><span class='hs-conop'>:</span><span class='hs-varid'>us</span><span class='hs-layout'>)</span>
</pre>\end{code}

\begin{code}
<pre><a name="line-1"></a><a name="cgRepSizeB"></a><span class='hs-definition'>cgRepSizeB</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ByteOff</span>
<a name="line-2"></a><span class='hs-definition'>cgRepSizeB</span> <span class='hs-conid'>DoubleArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>dOUBLE_SIZE</span>
<a name="line-3"></a><span class='hs-definition'>cgRepSizeB</span> <span class='hs-conid'>LongArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wORD64_SIZE</span>
<a name="line-4"></a><span class='hs-definition'>cgRepSizeB</span> <span class='hs-conid'>VoidArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-5"></a><span class='hs-definition'>cgRepSizeB</span> <span class='hs-keyword'>_</span>         <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wORD_SIZE</span>
<a name="line-6"></a>
<a name="line-7"></a><a name="cgRepSizeW"></a><span class='hs-definition'>cgRepSizeW</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CgRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>ByteOff</span>
<a name="line-8"></a><span class='hs-definition'>cgRepSizeW</span> <span class='hs-conid'>DoubleArg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>dOUBLE_SIZE</span> <span class='hs-varop'>`quot`</span> <span class='hs-varid'>wORD_SIZE</span>
<a name="line-9"></a><span class='hs-definition'>cgRepSizeW</span> <span class='hs-conid'>LongArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>wORD64_SIZE</span> <span class='hs-varop'>`quot`</span> <span class='hs-varid'>wORD_SIZE</span>
<a name="line-10"></a><span class='hs-definition'>cgRepSizeW</span> <span class='hs-conid'>VoidArg</span>   <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-11"></a><span class='hs-definition'>cgRepSizeW</span> <span class='hs-keyword'>_</span>         <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span>
<a name="line-12"></a>
<a name="line-13"></a><a name="retAddrSizeW"></a><span class='hs-definition'>retAddrSizeW</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WordOff</span>
<a name="line-14"></a><span class='hs-definition'>retAddrSizeW</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span>	<span class='hs-comment'>-- One word</span>
</pre>\end{code}

%************************************************************************
%*									*
\subsubsection[SMRep-datatype]{@SMRep@---storage manager representation}
%*									*
%************************************************************************

\begin{code}
<pre><a name="line-1"></a><a name="SMRep"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SMRep</span>
<a name="line-2"></a>     <span class='hs-comment'>-- static closure have an extra static link field at the end.</span>
<a name="line-3"></a>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GenericRep</span>		<span class='hs-comment'>-- GC routines consult sizes in info tbl</span>
<a name="line-4"></a>	<span class='hs-conid'>Bool</span>		<span class='hs-comment'>-- True &lt;=&gt; This is a static closure.  Affects how </span>
<a name="line-5"></a>			<span class='hs-comment'>-- 	    we garbage-collect it</span>
<a name="line-6"></a>	<span class='hs-varop'>!</span><span class='hs-conid'>Int</span>		<span class='hs-comment'>--  # ptr words</span>
<a name="line-7"></a>	<span class='hs-varop'>!</span><span class='hs-conid'>Int</span>		<span class='hs-comment'>--  # non-ptr words</span>
<a name="line-8"></a>	<span class='hs-conid'>ClosureType</span>	<span class='hs-comment'>-- closure type</span>
<a name="line-9"></a>
<a name="line-10"></a>  <span class='hs-keyglyph'>|</span> <span class='hs-conid'>BlackHoleRep</span>
<a name="line-11"></a>
<a name="line-12"></a><a name="ClosureType"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>ClosureType</span>	<span class='hs-comment'>-- Corresponds 1-1 with the varieties of closures</span>
<a name="line-13"></a>			<span class='hs-comment'>-- implemented by the RTS.  Compare with includes/rts/storage/ClosureTypes.h</span>
<a name="line-14"></a>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Constr</span>
<a name="line-15"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ConstrNoCaf</span>
<a name="line-16"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Fun</span>
<a name="line-17"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Thunk</span>
<a name="line-18"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>ThunkSelector</span>
</pre>\end{code}

Size of a closure header.

\begin{code}
<pre><a name="line-1"></a><a name="fixedHdrSize"></a><span class='hs-definition'>fixedHdrSize</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WordOff</span>
<a name="line-2"></a><span class='hs-definition'>fixedHdrSize</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sTD_HDR_SIZE</span> <span class='hs-varop'>+</span> <span class='hs-varid'>profHdrSize</span>
<a name="line-3"></a>
<a name="line-4"></a><a name="profHdrSize"></a><span class='hs-definition'>profHdrSize</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WordOff</span>
<a name="line-5"></a><span class='hs-definition'>profHdrSize</span>  <span class='hs-keyglyph'>|</span> <span class='hs-varid'>opt_SccProfilingOn</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>pROF_HDR_SIZE</span>
<a name="line-6"></a>	     <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>	    <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-7"></a>
<a name="line-8"></a><a name="arrWordsHdrSize"></a><span class='hs-definition'>arrWordsHdrSize</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteOff</span>
<a name="line-9"></a><span class='hs-definition'>arrWordsHdrSize</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fixedHdrSize</span><span class='hs-varop'>*</span><span class='hs-varid'>wORD_SIZE</span> <span class='hs-varop'>+</span> <span class='hs-varid'>sIZEOF_StgArrWords_NoHdr</span>
<a name="line-10"></a>
<a name="line-11"></a><a name="arrPtrsHdrSize"></a><span class='hs-definition'>arrPtrsHdrSize</span>    <span class='hs-keyglyph'>::</span> <span class='hs-conid'>ByteOff</span>
<a name="line-12"></a><span class='hs-definition'>arrPtrsHdrSize</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fixedHdrSize</span><span class='hs-varop'>*</span><span class='hs-varid'>wORD_SIZE</span> <span class='hs-varop'>+</span> <span class='hs-varid'>sIZEOF_StgMutArrPtrs_NoHdr</span>
<a name="line-13"></a>
<a name="line-14"></a><a name="thunkHdrSize"></a><span class='hs-comment'>-- Thunks have an extra header word on SMP, so the update doesn't </span>
<a name="line-15"></a><span class='hs-comment'>-- splat the payload.</span>
<a name="line-16"></a><span class='hs-definition'>thunkHdrSize</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>WordOff</span>
<a name="line-17"></a><span class='hs-definition'>thunkHdrSize</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fixedHdrSize</span> <span class='hs-varop'>+</span> <span class='hs-varid'>smp_hdr</span>
<a name="line-18"></a>	<span class='hs-keyword'>where</span> <span class='hs-varid'>smp_hdr</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sIZEOF_StgSMPThunkHeader</span> <span class='hs-varop'>`quot`</span> <span class='hs-varid'>wORD_SIZE</span>
</pre>\end{code}

\begin{code}
<pre><a name="line-1"></a><a name="isStaticRep"></a><span class='hs-definition'>isStaticRep</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SMRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-2"></a><span class='hs-definition'>isStaticRep</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-varid'>is_static</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>is_static</span>
<a name="line-3"></a><span class='hs-definition'>isStaticRep</span> <span class='hs-conid'>BlackHoleRep</span>	         <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
</pre>\end{code}

\begin{code}
<pre><a name="line-1"></a><span class='hs-cpp'>#</span><span class='hs-varid'>include</span> <span class='hs-str'>"../includes/rts/storage/ClosureTypes.h"</span>
<a name="line-2"></a><span class='hs-comment'>-- Defines CONSTR, CONSTR_1_0 etc</span>
<a name="line-3"></a>
<a name="line-4"></a><a name="smRepClosureType"></a><span class='hs-comment'>-- krc: only called by tickyDynAlloc in CgTicky; return</span>
<a name="line-5"></a><span class='hs-comment'>-- Nothing for a black hole so we can at least make something work.</span>
<a name="line-6"></a><span class='hs-definition'>smRepClosureType</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SMRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>ClosureType</span>
<a name="line-7"></a><span class='hs-definition'>smRepClosureType</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>ty</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>ty</span>
<a name="line-8"></a><span class='hs-definition'>smRepClosureType</span> <span class='hs-conid'>BlackHoleRep</span>	       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Nothing</span>
<a name="line-9"></a>
<a name="line-10"></a><a name="smRepClosureTypeInt"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SMRep</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>StgHalfWord</span>
<a name="line-11"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>1</span> <span class='hs-num'>0</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_1_0</span>
<a name="line-12"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>0</span> <span class='hs-num'>1</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_0_1</span>
<a name="line-13"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>2</span> <span class='hs-num'>0</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_2_0</span>
<a name="line-14"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>1</span> <span class='hs-num'>1</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_1_1</span>
<a name="line-15"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>0</span> <span class='hs-num'>2</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_0_2</span>
<a name="line-16"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR</span>
<a name="line-17"></a>
<a name="line-18"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>1</span> <span class='hs-num'>0</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN_1_0</span>
<a name="line-19"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>0</span> <span class='hs-num'>1</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN_0_1</span>
<a name="line-20"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>2</span> <span class='hs-num'>0</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN_2_0</span>
<a name="line-21"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>1</span> <span class='hs-num'>1</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN_1_1</span>
<a name="line-22"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>0</span> <span class='hs-num'>2</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN_0_2</span>
<a name="line-23"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN</span>
<a name="line-24"></a>
<a name="line-25"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>1</span> <span class='hs-num'>0</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK_1_0</span>
<a name="line-26"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>0</span> <span class='hs-num'>1</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK_0_1</span>
<a name="line-27"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>2</span> <span class='hs-num'>0</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK_2_0</span>
<a name="line-28"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>1</span> <span class='hs-num'>1</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK_1_1</span>
<a name="line-29"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-num'>0</span> <span class='hs-num'>2</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK_0_2</span>
<a name="line-30"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>False</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>ThunkSelector</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>  <span class='hs-conid'>THUNK_SELECTOR</span>
<a name="line-33"></a>
<a name="line-34"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>True</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Constr</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_STATIC</span>
<a name="line-35"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>True</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>ConstrNoCaf</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>CONSTR_NOCAF_STATIC</span>
<a name="line-36"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>True</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Fun</span><span class='hs-layout'>)</span>         <span class='hs-keyglyph'>=</span> <span class='hs-conid'>FUN_STATIC</span>
<a name="line-37"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-layout'>(</span><span class='hs-conid'>GenericRep</span> <span class='hs-conid'>True</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Thunk</span><span class='hs-layout'>)</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>THUNK_STATIC</span>
<a name="line-38"></a>
<a name="line-39"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-conid'>BlackHoleRep</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>BLACKHOLE</span>
<a name="line-40"></a>
<a name="line-41"></a><span class='hs-definition'>smRepClosureTypeInt</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>panic</span> <span class='hs-str'>"smRepClosuretypeint"</span>
<a name="line-42"></a>
<a name="line-43"></a>
<a name="line-44"></a><a name="rET_SMALL"></a><span class='hs-comment'>-- We export these ones</span>
<a name="line-45"></a><span class='hs-definition'>rET_SMALL</span><span class='hs-layout'>,</span> <span class='hs-varid'>rET_BIG</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>StgHalfWord</span>
<a name="line-46"></a><span class='hs-definition'>rET_SMALL</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RET_SMALL</span>
<a name="line-47"></a><a name="rET_BIG"></a><span class='hs-definition'>rET_BIG</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>RET_BIG</span>
</pre>\end{code}

</body>
</html>