Show
Ignore:
Timestamp:
05/27/05 01:06:48 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
5515
Message:

* still segfaulting... WIP

Files:
1 modified

Legend:

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

    r3930 r3933  
    1111constFail = const $ fail "perl5 not embedded" 
    1212 
    13 initPerl5 :: String -> PerlSV -> IO PerlInterpreter 
     13initPerl5 :: String -> Maybe a -> IO PerlInterpreter 
    1414initPerl5 _ _ = return () 
    1515 
     
    9898foreign import ccall "perl5.h perl5_get_sv" 
    9999    perl5_get_sv :: CString -> IO PerlSV 
    100 foreign import ccall "perl5.h perl5_set_sv" 
    101     perl5_set_sv :: CString -> PerlSV -> IO PerlSV 
     100foreign import ccall "perl5.h perl5_set_svref" 
     101    perl5_set_svref :: CString -> PugsVal -> IO () 
    102102foreign import ccall "perl5.h perl5_call" 
    103103    perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV 
     
    114114    pugs_MkValRef :: PugsVal -> IO PerlSV 
    115115 
    116 initPerl5 :: String -> PerlSV -> IO PerlInterpreter 
     116initPerl5 :: String -> Maybe a -> IO PerlInterpreter 
    117117initPerl5 str env = do 
    118118    withCString "-e" $ \prog -> withCString str $ \cstr -> do 
    119119        withArray [prog, prog, cstr] $ \argv -> do 
    120             perl5_init 3 argv 
    121             withCString "pugs::env" $ \name -> do 
    122                 perl5_set_sv name env 
     120            interp <- perl5_init 3 argv 
     121            case env of 
     122                Just val -> withCString "pugs::env" $ \name -> do 
     123                    ptr <- fmap castStablePtrToPtr $ newStablePtr val 
     124                    perl5_set_svref name ptr 
     125                Nothing -> return () 
     126            return interp 
    123127 
    124128svToVStr :: PerlSV -> IO String