Show
Ignore:
Timestamp:
05/26/05 17:22:54 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
5482
Message:

* new pugsembed API with code!

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Embed/Perl5.hs

    r3911 r3918  
    2323svToVStr = constFail 
    2424 
     25svToVInt :: (Num a) => PerlSV -> IO a 
     26svToVInt = constFail 
     27 
     28svToVNum :: (Fractional a) => PerlSV -> IO a 
     29svToVNum = constFail 
     30 
    2531svToVBool :: PerlSV -> IO Bool 
    2632svToVBool = constFail 
    2733 
    28 svToAny :: PerlSV -> IO (Maybe a) 
    29 svToAny = constFail 
     34svToVal :: PerlSV -> IO (Maybe a) 
     35svToVal = constFail 
    3036 
    31 anyToSV :: a -> IO PerlSV 
    32 anyToSV = constFail 
     37valToSV :: a -> IO PerlSV 
     38valToSV = constFail 
    3339 
    3440vstrToSV :: String -> IO PerlSV 
     
    4753 
    4854{-# INCLUDE <perl5.h> #-} 
     55{-# INCLUDE <pugsembed.h> #-} 
    4956 
    5057module Pugs.Embed.Perl5 where 
     
    5562type PerlInterpreter = Ptr () 
    5663type PerlSV = Ptr () 
     64type PugsVal = Ptr () 
    5765 
    5866foreign import ccall "perl.h perl_alloc" 
     
    7078foreign import ccall "perl5.h perl5_SvPV" 
    7179    perl5_SvPV :: PerlSV -> IO CString 
     80foreign import ccall "perl5.h perl5_SvIV" 
     81    perl5_SvIV :: PerlSV -> IO CInt 
     82foreign import ccall "perl5.h perl5_SvNV" 
     83    perl5_SvNV :: PerlSV -> IO CDouble 
    7284foreign import ccall "perl5.h perl5_SvTRUE" 
    7385    perl5_SvTRUE :: PerlSV -> IO Bool 
    74 foreign import ccall "perl5.h perl5_SvPtr" 
    75     perl5_SvPtr :: PerlSV -> IO (Ptr ()) 
    7686foreign import ccall "perl5.h perl5_newSVpv" 
    7787    perl5_newSVpv :: CString -> IO PerlSV 
    7888foreign import ccall "perl5.h perl5_newSViv" 
    7989    perl5_newSViv :: CInt -> IO PerlSV 
    80 foreign import ccall "perl5.h perl5_newSVptr" 
    81     perl5_newSVptr :: Ptr () -> IO PerlSV 
    8290foreign import ccall "perl5.h perl5_call" 
    8391    perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV 
     
    8896foreign import ccall "perl5.h perl5_init" 
    8997    perl5_init :: CInt -> Ptr CString -> IO PerlInterpreter 
     98 
     99foreign import ccall "pugsembed.h pugs_SvToVal" 
     100    pugs_SvToVal :: PerlSV -> IO PugsVal 
     101foreign import ccall "pugsembed.h pugs_MkValRef" 
     102    pugs_MkValRef :: PugsVal -> IO PerlSV 
    90103 
    91104initPerl5 :: String -> IO PerlInterpreter 
     
    98111svToVStr sv = peekCString =<< perl5_SvPV sv 
    99112 
     113svToVInt :: (Num a) => PerlSV -> IO a 
     114svToVInt sv = fmap fromIntegral $ perl5_SvIV sv 
     115 
     116svToVNum :: (Fractional a) => PerlSV -> IO a 
     117svToVNum sv = fmap realToFrac $ perl5_SvNV sv 
     118 
    100119svToVBool :: PerlSV -> IO Bool 
    101120svToVBool = perl5_SvTRUE 
    102121 
    103 anyToSV :: a -> IO PerlSV 
    104 anyToSV x = do 
    105     ptr <- fmap castStablePtrToPtr $ newStablePtr x 
    106     perl5_newSVptr ptr 
    107  
    108 svToAny :: PerlSV -> IO (Maybe a) 
    109 svToAny sv = do 
    110     ptr <- perl5_SvPtr sv 
     122svToVal :: PerlSV -> IO (Maybe a) 
     123svToVal sv = do 
     124    ptr <- pugs_SvToVal sv 
    111125    if ptr == nullPtr 
    112126        then return Nothing 
    113         else fmap Just . deRefStablePtr $ castPtrToStablePtr ptr 
     127        else fmap Just $ deRefStablePtr (castPtrToStablePtr ptr) 
     128 
     129valToSV :: a -> IO PerlSV 
     130valToSV x = do 
     131    ptr <- fmap castStablePtrToPtr $ newStablePtr x 
     132    pugs_MkValRef ptr 
    114133 
    115134vstrToSV :: String -> IO PerlSV