rationalTyConName,
ratioDataConName,
ratioTyConName,
- byteArrayTyConName,
- mutableByteArrayTyConName,
integerTyConName, smallIntegerDataConName, largeIntegerDataConName,
-- Classes. *Must* include:
pREL_IO_BASE = mkModule "GHC.IOBase"
pREL_ST = mkModule "GHC.ST"
pREL_ARR = mkModule "GHC.Arr"
-pREL_BYTEARR = mkModule "PrelByteArr"
pREL_STABLE = mkModule "GHC.Stable"
pREL_ADDR = mkModule "GHC.Addr"
pREL_PTR = mkModule "GHC.Ptr"
ptrTyConName = tcQual pREL_PTR FSLIT("Ptr") ptrTyConKey
funPtrTyConName = tcQual pREL_PTR FSLIT("FunPtr") funPtrTyConKey
--- Byte array types
-byteArrayTyConName = tcQual pREL_BYTEARR FSLIT("ByteArray") byteArrayTyConKey
-mutableByteArrayTyConName = tcQual pREL_BYTEARR FSLIT("MutableByteArray") mutableByteArrayTyConKey
-
-- Foreign objects and weak pointers
stablePtrTyConName = tcQual pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey
newStablePtrName = varQual pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey
statePrimTyConKey = mkPreludeTyConUnique 50
stableNamePrimTyConKey = mkPreludeTyConUnique 51
stableNameTyConKey = mkPreludeTyConUnique 52
-mutableByteArrayTyConKey = mkPreludeTyConUnique 53
mutVarPrimTyConKey = mkPreludeTyConUnique 55
ioTyConKey = mkPreludeTyConUnique 56
-byteArrayTyConKey = mkPreludeTyConUnique 57
wordPrimTyConKey = mkPreludeTyConUnique 58
wordTyConKey = mkPreludeTyConUnique 59
word8TyConKey = mkPreludeTyConUnique 60
cCallishTyKeys =
[ addrTyConKey
, wordTyConKey
- , byteArrayTyConKey
- , mutableByteArrayTyConKey
, stablePtrTyConKey
, int8TyConKey
, int16TyConKey
isFFIDotnetTy :: DynFlags -> Type -> Bool
isFFIDotnetTy dflags ty
- = checkRepTyCon (\ tc -> not (isByteArrayLikeTyCon tc) &&
- (legalFIResultTyCon dflags tc ||
+ = checkRepTyCon (\ tc -> (legalFIResultTyCon dflags tc ||
isFFIDotnetObjTy ty || isStringTy ty)) ty
-- Support String as an argument or result from a .NET FFI call.
\begin{code}
legalFEArgTyCon :: TyCon -> Bool
--- It's illegal to return foreign objects and (mutable)
--- bytearrays from a _ccall_ / foreign declaration
--- (or be passed them as arguments in foreign exported functions).
legalFEArgTyCon tc
- | isByteArrayLikeTyCon tc
- = False
- -- It's also illegal to make foreign exports that take unboxed
+ -- It's illegal to make foreign exports that take unboxed
-- arguments. The RTS API currently can't invoke such things. --SDM 7/2000
- | otherwise
= boxedMarshalableTyCon tc
legalFIResultTyCon :: DynFlags -> TyCon -> Bool
legalFIResultTyCon dflags tc
- | isByteArrayLikeTyCon tc = False
| tc == unitTyCon = True
| otherwise = marshalableTyCon dflags tc
legalFEResultTyCon :: TyCon -> Bool
legalFEResultTyCon tc
- | isByteArrayLikeTyCon tc = False
| tc == unitTyCon = True
| otherwise = boxedMarshalableTyCon tc
legalOutgoingTyCon :: DynFlags -> Safety -> TyCon -> Bool
-- Checks validity of types going from Haskell -> external world
legalOutgoingTyCon dflags safety tc
- | playSafe safety && isByteArrayLikeTyCon tc
- = False
- | otherwise
= marshalableTyCon dflags tc
legalFFITyCon :: TyCon -> Bool
, addrTyConKey, ptrTyConKey, funPtrTyConKey
, charTyConKey
, stablePtrTyConKey
- , byteArrayTyConKey, mutableByteArrayTyConKey
, boolTyConKey
]
-
-isByteArrayLikeTyCon :: TyCon -> Bool
-isByteArrayLikeTyCon tc =
- getUnique tc `elem` [byteArrayTyConKey, mutableByteArrayTyConKey]
\end{code}