X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2FcoreSyn%2FMkExternalCore.lhs;h=9b9ca5e7c90bf90b80958de13f91a407f4fd13d0;hb=5e218036aabd1666ff2b509436e4e88491596c37;hp=82731597cddb4b8958ec660c4141498b61bbd142;hpb=7a410061004cedc1de8856b4f049a58c09ee6c38;p=ghc-hetmet.git diff --git a/compiler/coreSyn/MkExternalCore.lhs b/compiler/coreSyn/MkExternalCore.lhs index 8273159..9b9ca5e 100644 --- a/compiler/coreSyn/MkExternalCore.lhs +++ b/compiler/coreSyn/MkExternalCore.lhs @@ -26,15 +26,14 @@ import Outputable import Encoding import ForeignCall import DynFlags -import StaticFlags import FastString -import IO import Data.Char +import System.IO emitExternalCore :: DynFlags -> CgGuts -> IO () emitExternalCore dflags cg_guts - | opt_EmitExternalCore + | dopt Opt_EmitExternalCore dflags = (do handle <- openFile corename WriteMode hPutStrLn handle (show (mkExternalCore cg_guts)) hClose handle) @@ -130,26 +129,23 @@ make_exp (Var v) = do isLocal <- isALocal vName return $ case idDetails v of - FCallId (CCall (CCallSpec (StaticTarget nm) callconv _)) + FCallId (CCall (CCallSpec (StaticTarget nm _) callconv _)) -> C.External (unpackFS nm) (showSDoc (ppr callconv)) (make_ty (varType v)) FCallId (CCall (CCallSpec DynamicTarget callconv _)) -> C.DynExternal (showSDoc (ppr callconv)) (make_ty (varType v)) - FCallId _ - -> pprPanic "MkExternalCore died: can't handle non-{static,dynamic}-C foreign call" - (ppr v) -- Constructors are always exported, so make sure to declare them -- with qualified names DataConWorkId _ -> C.Var (make_var_qid False vName) DataConWrapId _ -> C.Var (make_var_qid False vName) _ -> C.Var (make_var_qid isLocal vName) -make_exp (Lit (MachLabel s _)) = return $ C.Label (unpackFS s) +make_exp (Lit (MachLabel s _ _)) = return $ C.Label (unpackFS s) make_exp (Lit l) = return $ C.Lit (make_lit l) make_exp (App e (Type t)) = make_exp e >>= (\ b -> return $ C.Appt b (make_ty t)) make_exp (App e1 e2) = do rator <- make_exp e1 rand <- make_exp e2 return $ C.App rator rand -make_exp (Lam v e) | isTyVar v = make_exp e >>= (\ b -> +make_exp (Lam v e) | isTyCoVar v = make_exp e >>= (\ b -> return $ C.Lam (C.Tb (make_tbind v)) b) make_exp (Lam v e) | otherwise = make_exp e >>= (\ b -> return $ C.Lam (C.Vb (make_vbind v)) b) @@ -164,7 +160,6 @@ make_exp (Case e v ty alts) = do return $ C.Case scrut (make_vbind v) (make_ty ty) newAlts make_exp (Note (SCC _) e) = make_exp e >>= (return . C.Note "SCC") -- temporary make_exp (Note (CoreNote s) e) = make_exp e >>= (return . C.Note s) -- hdaume: core annotations -make_exp (Note InlineMe e) = make_exp e >>= (return . C.Note "InlineMe") make_exp _ = error "MkExternalCore died: make_exp" make_alt :: CoreAlt -> CoreM C.Alt @@ -174,7 +169,7 @@ make_alt (DataAlt dcon, vs, e) = do (map make_tbind tbs) (map make_vbind vbs) newE - where (tbs,vbs) = span isTyVar vs + where (tbs,vbs) = span isTyCoVar vs make_alt (LitAlt l,_,e) = make_exp e >>= (return . (C.Alit (make_lit l))) make_alt (DEFAULT,[],e) = make_exp e >>= (return . C.Adefault) -- This should never happen, as the DEFAULT alternative binds no variables,