X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;ds=sidebyside;f=compiler%2FcoreSyn%2FMkExternalCore.lhs;h=82731597cddb4b8958ec660c4141498b61bbd142;hb=c04a5fe3e2867d59ce9757069fdd20c06c326724;hp=34f39a51930eef37ad8b670a89a477b3a37252c3;hpb=044805225a08d5e370b72d2efed66880912b0806;p=ghc-hetmet.git diff --git a/compiler/coreSyn/MkExternalCore.lhs b/compiler/coreSyn/MkExternalCore.lhs index 34f39a5..8273159 100644 --- a/compiler/coreSyn/MkExternalCore.lhs +++ b/compiler/coreSyn/MkExternalCore.lhs @@ -65,16 +65,9 @@ mkExternalCore :: CgGuts -> C.Module -- implicit in the data type declaration itself mkExternalCore (CgGuts {cg_module=this_mod, cg_tycons = tycons, cg_binds = binds}) - -- Note that we flatten binds at the top level: - -- every module is just a single recursive bag of declarations. - -- Rationale: since modules can be mutually recursive, - -- there's not much reason to preserve dependency info within a module. - = C.Module mname tdefs (case flattenBinds binds of - -- check for empty list so we don't create an - -- empty Rec group - [] -> [] - bs -> [(runCoreM (make_vdef True - (Rec bs)) this_mod)]) +{- Note that modules can be mutually recursive, but even so, we + print out dependency information within each module. -} + = C.Module mname tdefs (runCoreM (mapM (make_vdef True) binds) this_mod) where mname = make_mid this_mod tdefs = foldr collect_tdefs [] tycons @@ -114,7 +107,7 @@ make_tbind :: TyVar -> C.Tbind make_tbind tv = (make_var_id (tyVarName tv), make_kind (tyVarKind tv)) make_vbind :: Var -> C.Vbind -make_vbind v = (make_var_id (Var.varName v), make_ty (idType v)) +make_vbind v = (make_var_id (Var.varName v), make_ty (varType v)) make_vdef :: Bool -> CoreBind -> CoreM C.Vdefg make_vdef topLevel b = @@ -128,7 +121,7 @@ make_vdef topLevel b = let local = not topLevel || localN rhs <- make_exp e -- use local flag to determine where to add the module name - return (local, make_qid local True vName, make_ty (idType v),rhs) + return (local, make_qid local True vName, make_ty (varType v),rhs) where vName = Var.varName v make_exp :: CoreExpr -> CoreM C.Exp @@ -136,11 +129,11 @@ make_exp (Var v) = do let vName = Var.varName v isLocal <- isALocal vName return $ - case globalIdDetails v of + case idDetails v of FCallId (CCall (CCallSpec (StaticTarget nm) callconv _)) - -> C.External (unpackFS nm) (showSDoc (ppr callconv)) (make_ty (idType v)) + -> C.External (unpackFS nm) (showSDoc (ppr callconv)) (make_ty (varType v)) FCallId (CCall (CCallSpec DynamicTarget callconv _)) - -> C.DynExternal (showSDoc (ppr callconv)) (make_ty (idType v)) + -> C.DynExternal (showSDoc (ppr callconv)) (make_ty (varType v)) FCallId _ -> pprPanic "MkExternalCore died: can't handle non-{static,dynamic}-C foreign call" (ppr v)