Changeset 3933
- Timestamp:
- 05/27/05 01:06:48 (3 years ago)
- svk:copy_cache_prev:
- 5515
- Location:
- src
- Files:
-
- 5 modified
-
Pugs/Embed.hs (modified) (1 diff)
-
Pugs/Embed/Perl5.hs (modified) (3 diffs)
-
Pugs/Run.hs (modified) (1 diff)
-
perl5/perl5.c (modified) (1 diff)
-
perl5/perl5.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Embed.hs
r3930 r3933 29 29 return () -} 30 30 evalEmbedded "Perl5" code = do 31 interp <- initPerl5 "" nullSV31 interp <- initPerl5 "" Nothing 32 32 evalPerl5 code nullSV 0 33 33 freePerl5 interp -
src/Pugs/Embed/Perl5.hs
r3930 r3933 11 11 constFail = const $ fail "perl5 not embedded" 12 12 13 initPerl5 :: String -> PerlSV-> IO PerlInterpreter13 initPerl5 :: String -> Maybe a -> IO PerlInterpreter 14 14 initPerl5 _ _ = return () 15 15 … … 98 98 foreign import ccall "perl5.h perl5_get_sv" 99 99 perl5_get_sv :: CString -> IO PerlSV 100 foreign import ccall "perl5.h perl5_set_sv "101 perl5_set_sv :: CString -> PerlSV -> IO PerlSV100 foreign import ccall "perl5.h perl5_set_svref" 101 perl5_set_svref :: CString -> PugsVal -> IO () 102 102 foreign import ccall "perl5.h perl5_call" 103 103 perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV … … 114 114 pugs_MkValRef :: PugsVal -> IO PerlSV 115 115 116 initPerl5 :: String -> PerlSV-> IO PerlInterpreter116 initPerl5 :: String -> Maybe a -> IO PerlInterpreter 117 117 initPerl5 str env = do 118 118 withCString "-e" $ \prog -> withCString str $ \cstr -> do 119 119 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 123 127 124 128 svToVStr :: PerlSV -> IO String -
src/Pugs/Run.hs
r3931 r3933 34 34 runEvalMain :: Env -> Eval Val -> IO Val 35 35 runEvalMain env eval = withSocketsDo $ do 36 my_perl <- initPerl5 "" =<< mkValRef (VControl $ ControlEnv env)36 my_perl <- initPerl5 "" (Just . VControl $ ControlEnv env) 37 37 val <- runEvalIO env eval 38 38 freePerl5 my_perl -
src/perl5/perl5.c
r3932 r3933 218 218 } 219 219 220 void * perl5_set_sv (const char *name, SV *sv) 221 { 222 sv_setsv(get_sv(name, 1), sv); 220 void * 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); 223 228 } 224 229 -
src/perl5/perl5.h
r3930 r3933 15 15 SV * perl5_eval(char *code, SV *env, int cxt); 16 16 SV * perl5_get_sv ( const char *name ); 17 void * perl5_set_sv ( const char *name, SV*sv );17 void * perl5_set_svref ( const char *name, void *sv );
