summaryrefslogtreecommitdiff
path: root/compiler/cmm
diff options
context:
space:
mode:
authorEdward Z. Yang <ezyang@cs.stanford.edu>2014-10-20 16:01:45 -0700
committerEdward Z. Yang <ezyang@cs.stanford.edu>2014-10-20 16:28:42 -0700
commita3860fc4e253ecb4854e86aed78c56e72f318840 (patch)
treed04b362212bf2a4a073d1147ad583a4e92a0ec5f /compiler/cmm
parent126b0c410f2596d1bf7ba6a1af872487c5bb2b52 (diff)
downloadhaskell-a3860fc4e253ecb4854e86aed78c56e72f318840.tar.gz
Revert "BC-breaking changes to C-- CLOSURE syntax."
This reverts commit 3b5a840bba375c4c4c11ccfeb283f84c3a1ef22c.
Diffstat (limited to 'compiler/cmm')
-rw-r--r--compiler/cmm/CLabel.hs4
-rw-r--r--compiler/cmm/CmmLex.x2
-rw-r--r--compiler/cmm/CmmParse.y17
3 files changed, 10 insertions, 13 deletions
diff --git a/compiler/cmm/CLabel.hs b/compiler/cmm/CLabel.hs
index c5afa09d75..0f2c0ae7fa 100644
--- a/compiler/cmm/CLabel.hs
+++ b/compiler/cmm/CLabel.hs
@@ -333,9 +333,9 @@ data CmmLabelInfo
| CmmEntry -- ^ misc rts entry points, suffix _entry
| CmmRetInfo -- ^ misc rts ret info tables, suffix _info
| CmmRet -- ^ misc rts return points, suffix _ret
- | CmmData -- ^ misc rts data bits
+ | CmmData -- ^ misc rts data bits, eg CHARLIKE_closure
| CmmCode -- ^ misc rts code
- | CmmClosure -- ^ misc rts closures, suffix _closure
+ | CmmClosure -- ^ closures eg CHARLIKE_closure
| CmmPrimCall -- ^ a prim call to some hand written Cmm code
deriving (Eq, Ord)
diff --git a/compiler/cmm/CmmLex.x b/compiler/cmm/CmmLex.x
index dfbb751021..f56db7bd4c 100644
--- a/compiler/cmm/CmmLex.x
+++ b/compiler/cmm/CmmLex.x
@@ -135,7 +135,6 @@ data CmmToken
| CmmT_Ne
| CmmT_BoolAnd
| CmmT_BoolOr
- | CmmT_ANONYMOUS_CLOSURE
| CmmT_CLOSURE
| CmmT_INFO_TABLE
| CmmT_INFO_TABLE_RET
@@ -219,7 +218,6 @@ name span buf len =
reservedWordsFM = listToUFM $
map (\(x, y) -> (mkFastString x, y)) [
- ( "ANONYMOUS_CLOSURE", CmmT_ANONYMOUS_CLOSURE ),
( "CLOSURE", CmmT_CLOSURE ),
( "INFO_TABLE", CmmT_INFO_TABLE ),
( "INFO_TABLE_RET", CmmT_INFO_TABLE_RET ),
diff --git a/compiler/cmm/CmmParse.y b/compiler/cmm/CmmParse.y
index 3bd0053cfc..db6cc49927 100644
--- a/compiler/cmm/CmmParse.y
+++ b/compiler/cmm/CmmParse.y
@@ -300,7 +300,6 @@ import Data.Maybe
'||' { L _ (CmmT_BoolOr) }
'CLOSURE' { L _ (CmmT_CLOSURE) }
- 'ANONYMOUS_CLOSURE'{ L _ (CmmT_ANONYMOUS_CLOSURE) }
'INFO_TABLE' { L _ (CmmT_INFO_TABLE) }
'INFO_TABLE_RET'{ L _ (CmmT_INFO_TABLE_RET) }
'INFO_TABLE_FUN'{ L _ (CmmT_INFO_TABLE_FUN) }
@@ -370,10 +369,10 @@ cmmtop :: { CmmParse () }
: cmmproc { $1 }
| cmmdata { $1 }
| decl { $1 }
- | 'CLOSURE' '(' NAME lits ')' ';'
+ | 'CLOSURE' '(' NAME ',' NAME lits ')' ';'
{% withThisPackage $ \pkg ->
- do lits <- sequence $4;
- staticClosure pkg $3 (map getLit lits) }
+ do lits <- sequence $6;
+ staticClosure pkg $3 $5 (map getLit lits) }
-- The only static closures in the RTS are dummy closures like
-- stg_END_TSO_QUEUE_closure and stg_dummy_ret. We don't need
@@ -412,7 +411,7 @@ static :: { CmmParse [CmmStatic] }
| typenot8 '[' INT ']' ';' { return [CmmUninitialised
(widthInBytes (typeWidth $1) *
fromIntegral $3)] }
- | 'ANONYMOUS_CLOSURE' '(' NAME lits ')'
+ | 'CLOSURE' '(' NAME lits ')'
{ do { lits <- sequence $4
; dflags <- getDynFlags
; return $ map CmmStaticLit $
@@ -1102,11 +1101,11 @@ profilingInfo dflags desc_str ty_str
else ProfilingInfo (stringToWord8s desc_str)
(stringToWord8s ty_str)
-staticClosure :: PackageKey -> FastString -> [CmmLit] -> CmmParse ()
-staticClosure pkg label payload
+staticClosure :: PackageKey -> FastString -> FastString -> [CmmLit] -> CmmParse ()
+staticClosure pkg cl_label info payload
= do dflags <- getDynFlags
- let lits = mkStaticClosure dflags (mkCmmInfoLabel pkg label) dontCareCCS payload [] [] []
- code $ emitStaticClosure (mkCmmClosureLabel pkg label) lits
+ let lits = mkStaticClosure dflags (mkCmmInfoLabel pkg info) dontCareCCS payload [] [] []
+ code $ emitStaticClosure (mkCmmDataLabel pkg cl_label) lits
foreignCall
:: String