<?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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></span> <span class='hs-conid'>Bool</span> <span class='hs-comment'>-- True <=> 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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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'>-></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 <=> 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'>-></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'>-></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'>-></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>