X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2FcodeGen%2FCgClosure.lhs;h=3c8066ba97ddf255b20922ee1154abd8ad1cfc9d;hb=153b9cb9b11e05c4edb1b6bc0a7b972660e41f70;hp=0c6ca4b76f4a0fdadc6acc49d746fc0e35b9a544;hpb=23f40f0e9be6d4aa5cf9ea31d73f4013f8e7b4bd;p=ghc-hetmet.git diff --git a/ghc/compiler/codeGen/CgClosure.lhs b/ghc/compiler/codeGen/CgClosure.lhs index 0c6ca4b..3c8066b 100644 --- a/ghc/compiler/codeGen/CgClosure.lhs +++ b/ghc/compiler/codeGen/CgClosure.lhs @@ -1,7 +1,7 @@ % % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -% $Id: CgClosure.lhs,v 1.64 2004/09/30 10:35:39 simonpj Exp $ +% $Id: CgClosure.lhs,v 1.66 2004/12/08 14:32:29 simonpj Exp $ % \section[CgClosure]{Code generation for closures} @@ -40,8 +40,7 @@ import MachOp ( MachHint(..) ) import Cmm import CmmUtils ( CmmStmts, mkStmts, oneStmt, plusStmts, noStmts, mkLblExpr ) -import CLabel ( mkRtsDataLabel, mkClosureLabel, mkRednCountsLabel, - mkSlowEntryLabel, mkIndStaticInfoLabel ) +import CLabel import StgSyn import CmdLineOpts ( opt_DoTickyProfiling ) import CostCentre @@ -83,7 +82,7 @@ cgTopRhsClosure id ccs binder_info srt upd_flag args body = do ; mod_name <- moduleName ; let descr = closureDescription mod_name name closure_info = mkClosureInfo True id lf_info 0 0 srt_info descr - closure_label = mkClosureLabel name + closure_label = mkLocalClosureLabel name cg_id_info = stableIdInfo id (mkLblExpr closure_label) lf_info closure_rep = mkStaticClosureFields closure_info ccs True [] @@ -238,7 +237,7 @@ So it should set up an update frame (if it is shared). NB: Thunks cannot have a primitive type! \begin{code} -closureCodeBody binder_info cl_info cc [] body = do +closureCodeBody binder_info cl_info cc [{- No args i.e. thunk -}] body = do { body_absC <- getCgStmts $ do { tickyEnterThunk cl_info ; ldvEnter (CmmReg nodeReg) -- NB: Node always points when profiling @@ -262,8 +261,9 @@ argSatisfactionCheck (by calling fetchAndReschedule). There info if Node points to closure is available. -- HWL \begin{code} -closureCodeBody binder_info cl_info cc args body = do - { -- Get the current virtual Sp (it might not be zero, +closureCodeBody binder_info cl_info cc args body + = ASSERT( length args > 0 ) + do { -- Get the current virtual Sp (it might not be zero, -- eg. if we're compiling a let-no-escape). vSp <- getVirtSp ; let (reg_args, other_args) = assignCallRegs (addIdReps args) @@ -366,7 +366,7 @@ mkSlowEntryCode cl_info reg_args stk_adj_pop = CmmAssign spReg (cmmRegOffW spReg final_stk_offset) stk_adj_push = CmmAssign spReg (cmmRegOffW spReg (- final_stk_offset)) - jump_to_entry = CmmJump (mkLblExpr (enterIdLabel name)) [] + jump_to_entry = CmmJump (mkLblExpr (enterLocalIdLabel name)) [] \end{code}