Refactor PackageTarget back into StaticTarget
[ghc-hetmet.git] / compiler / typecheck / TcForeign.lhs
index df3f1ef..fdb7ce5 100644 (file)
@@ -91,25 +91,10 @@ tcFImport d = pprPanic "tcFImport" (ppr d)
 ------------ Checking types for foreign import ----------------------
 \begin{code}
 tcCheckFIType :: Type -> [Type] -> Type -> ForeignImport -> TcM ForeignImport
-tcCheckFIType _ arg_tys res_ty (DNImport spec) = do
-    checkCg checkDotnet
-    dflags <- getDOpts
-    checkForeignArgs (isFFIDotnetTy dflags) arg_tys
-    checkForeignRes nonIOok (isFFIDotnetTy dflags) res_ty
-    let (DNCallSpec isStatic kind _ _ _ _) = spec
-    case kind of
-       DNMethod | not isStatic ->
-         case arg_tys of
-          [] -> addErrTc illegalDNMethodSig
-          _  
-           | not (isFFIDotnetObjTy (last arg_tys)) -> addErrTc illegalDNMethodSig
-           | otherwise -> return ()
-       _ -> return ()
-    return (DNImport (withDNTypes spec (map toDNType arg_tys) (toDNType res_ty)))
 
 tcCheckFIType sig_ty arg_tys res_ty idecl@(CImport _ safety _ (CLabel _))
   = ASSERT( null arg_tys )
-    do { checkCg checkCOrAsm
+    do { checkCg checkCOrAsmOrInterp
        ; checkSafety safety
        ; check (isFFILabelTy res_ty) (illegalForeignTyErr empty sig_ty)
        ; return idecl }             -- NB check res_ty not sig_ty!
@@ -173,14 +158,17 @@ tcCheckFIType sig_ty arg_tys res_ty idecl@(CImport cconv safety _ (CFunction tar
       checkMissingAmpersand dflags arg_tys res_ty
       return idecl
 
+
 -- This makes a convenient place to check
 -- that the C identifier is valid for C
 checkCTarget :: CCallTarget -> TcM ()
-checkCTarget (StaticTarget str) = do
+checkCTarget (StaticTarget str _) = do
     checkCg checkCOrAsmOrDotNetOrInterp
     check (isCLabelString str) (badCName str)
+
 checkCTarget DynamicTarget = panic "checkCTarget DynamicTarget"
 
+
 checkMissingAmpersand :: DynFlags -> [Type] -> Type -> TcM ()
 checkMissingAmpersand dflags arg_tys res_ty
   | null arg_tys && isFunPtrTy res_ty &&
@@ -250,7 +238,7 @@ tcFExport fo@(ForeignExport (L loc nm) hs_ty spec) =
    -- is *stable* (i.e. the compiler won't change it later),
    -- because this name will be referred to by the C code stub.
    id  <- mkStableIdFromName nm sig_ty loc mkForeignExportOcc
-   return (L loc (VarBind id rhs), ForeignExport (L loc id) undefined spec)
+   return (mkVarBind id rhs, ForeignExport (L loc id) undefined spec)
 tcFExport d = pprPanic "tcFExport" (ppr d)
 \end{code}
 
@@ -259,6 +247,7 @@ tcFExport d = pprPanic "tcFExport" (ppr d)
 \begin{code}
 tcCheckFEType :: Type -> ForeignExport -> TcM ()
 tcCheckFEType sig_ty (CExport (CExportStatic str cconv)) = do
+    checkCg checkCOrAsm
     check (isCLabelString str) (badCName str)
     checkCConv cconv
     checkForeignArgs isFFIExternalTy arg_tys
@@ -268,7 +257,6 @@ tcCheckFEType sig_ty (CExport (CExportStatic str cconv)) = do
       -- the structure of the foreign type.
     (_, t_ty) = tcSplitForAllTys sig_ty
     (arg_tys, res_ty) = tcSplitFunTys t_ty
-tcCheckFEType _ d = pprPanic "tcCheckFEType" (ppr d)
 \end{code}
 
 
@@ -309,14 +297,6 @@ checkForeignRes non_io_result_ok pred_res_ty ty
 \end{code}
 
 \begin{code}
-checkDotnet :: HscTarget -> Maybe SDoc
-#if defined(mingw32_TARGET_OS)
-checkDotnet HscC   = Nothing
-checkDotnet _      = Just (text "requires C code generation (-fvia-C)")
-#else
-checkDotnet _      = Just (text "requires .NET support (-filx or win32)")
-#endif
-
 checkCOrAsm :: HscTarget -> Maybe SDoc
 checkCOrAsm HscC   = Nothing
 checkCOrAsm HscAsm = Nothing
@@ -397,10 +377,5 @@ foreignDeclCtxt :: ForeignDecl Name -> SDoc
 foreignDeclCtxt fo
   = hang (ptext (sLit "When checking declaration:"))
          4 (ppr fo)
-
-illegalDNMethodSig :: SDoc
-illegalDNMethodSig
-  = ptext (sLit "'This pointer' expected as last argument")
-
 \end{code}