ajhc-0.8.0.1: lib/jhc/Jhc/Addr.hs
{-# OPTIONS_JHC -fno-prelude -fffi -funboxed-values -fm4 #-}
module Jhc.Addr(
Ptr(..),
FunPtr(..),
nullPtr,
nullFunPtr,
castPtr,
plusPtr,
minusPtr
) where
import Jhc.Basics
import Jhc.Int
import Jhc.Order
import Jhc.Type.Ptr
m4_include(Jhc/Order.m4)
nullPtr :: Ptr a
nullFunPtr :: FunPtr a
nullPtr = Ptr 0#
nullFunPtr = FunPtr 0#
INST_EQORDER((Ptr a),Ptr,Addr_,U)
INST_EQORDER((FunPtr a),FunPtr,FunAddr_,U)
{-# INLINE plusPtr #-}
plusPtr :: Ptr a -> Int -> Ptr a
plusPtr (Ptr addr) off = case unboxInt off of
off_ -> Ptr (addr `plusWordPtr` intToPtr__ off_)
{-# INLINE minusPtr #-}
minusPtr :: Ptr a -> Ptr a -> Int
minusPtr (Ptr a1) (Ptr a2) = boxInt (a1 `minusWP` a2)
foreign import primitive "Sx" intToPtr__ :: Int__ -> Addr_
foreign import primitive "I2I" ptrToInt__ :: Addr_ -> Int__
foreign import primitive "Add" plusWordPtr :: Addr_ -> Addr_ -> Addr_
foreign import primitive "Sub" minusWP :: Addr_ -> Addr_ -> Int__
castPtr :: Ptr a -> Ptr b
castPtr (Ptr addr) = Ptr addr
castFunPtr :: FunPtr a -> FunPtr b
castFunPtr (FunPtr addr) = FunPtr addr