Changeset 3933

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

* still segfaulting... WIP

Location:
src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Embed.hs

    r3930 r3933  
    2929    return () -} 
    3030evalEmbedded "Perl5" code = do 
    31     interp <- initPerl5 "" nullSV 
     31    interp <- initPerl5 "" Nothing 
    3232    evalPerl5 code nullSV 0 
    3333    freePerl5 interp 
  • 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 
  • src/Pugs/Run.hs

    r3931 r3933  
    3434runEvalMain :: Env -> Eval Val -> IO Val 
    3535runEvalMain env eval = withSocketsDo $ do 
    36     my_perl <- initPerl5 "" =<< mkValRef (VControl $ ControlEnv env) 
     36    my_perl <- initPerl5 "" (Just . VControl $ ControlEnv env) 
    3737    val     <- runEvalIO env eval 
    3838    freePerl5 my_perl 
  • src/perl5/perl5.c

    r3932 r3933  
    218218} 
    219219 
    220 void * perl5_set_sv (const char *name, SV *sv) 
    221 { 
    222     sv_setsv(get_sv(name, 1), sv); 
     220void * perl5_set_svref (const char *name, void *val) 
     221{ 
     222    SV *container = get_sv(name, TRUE); 
     223 
     224    SV *sv = newSV(0); 
     225    sv_setref_pv(sv, "pugs", val); 
     226 
     227    sv_setsv(container, sv); 
    223228} 
    224229 
  • src/perl5/perl5.h

    r3930 r3933  
    1515SV * perl5_eval(char *code, SV *env, int cxt); 
    1616SV * perl5_get_sv ( const char *name ); 
    17 void * perl5_set_sv ( const char *name, SV *sv ); 
     17void * perl5_set_svref ( const char *name, void *sv );