Changeset 3925
- Timestamp:
- 05/27/05 00:14:36 (4 years ago)
- svk:copy_cache_prev:
- 5515
- Location:
- src
- Files:
-
- 4 modified
-
Pugs/Embed/Perl5.hs (modified) (1 diff)
-
Pugs/Run/Perl5.hs (modified) (3 diffs)
-
perl5/perl5.c (modified) (1 diff)
-
perl5/perl5.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Embed/Perl5.hs
r3924 r3925 96 96 foreign import ccall "perl5.h perl5_newSVnv" 97 97 perl5_newSVnv :: CDouble -> IO PerlSV 98 foreign import ccall "perl5.h perl5_get_sv" 99 perl5_get_sv :: CString -> IO PerlSV 98 100 foreign import ccall "perl5.h perl5_call" 99 101 perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV -
src/Pugs/Run/Perl5.hs
r3924 r3925 7 7 import Pugs.Internals 8 8 import Pugs.AST 9 import Pugs.Prim.Eval 9 10 import Pugs.Embed.Perl5 10 11 import Foreign 11 12 import Foreign.C.Types 12 13 import Foreign.C.String 14 import Foreign.Marshal.Array 15 16 foreign export ccall "pugs_Eval" 17 pugs_eval :: CString -> IO PugsVal 18 19 foreign export ccall "pugs_Apply" 20 pugs_apply :: PugsVal -> PugsVal -> Ptr PugsVal -> IO PugsVal 13 21 14 22 foreign export ccall "pugs_ValToSv" … … 27 35 pvToVal :: CString -> IO PugsVal 28 36 37 askPerl5Env :: IO Env 38 askPerl5Env = do 39 sv <- withCString "pugs::env" perl5_get_sv 40 val <- svToVal sv 41 case val of 42 VControl (ControlEnv env) -> return env 43 _ -> fail "cannot fetch $pugs::env" 44 45 pugs_eval :: CString -> IO PugsVal 46 pugs_eval cstr = do 47 str <- peekCString cstr 48 env <- askPerl5Env 49 val <- runEvalIO env $ opEval Nothing "<eval>" str 50 mkVal val 51 52 pugs_apply :: PugsVal -> PugsVal -> Ptr PugsVal -> IO PugsVal 53 pugs_apply subPtr invPtr argsPtr = do 54 env <- askPerl5Env 55 sub <- deVal subPtr 56 inv <- deValMaybe invPtr 57 args <- mapM deVal =<< peekArray0 nullPtr argsPtr 58 let subExp = case sub of 59 VStr name -> Var name 60 _ -> Val sub 61 val <- runEvalIO env $ evalExp (App subExp (fmap Val inv) (map Val args)) 62 mkVal val 63 29 64 mkVal :: Val -> IO PugsVal 30 65 mkVal val = fmap castStablePtrToPtr $ newStablePtr val … … 32 67 deVal :: PugsVal -> IO Val 33 68 deVal ptr = deRefStablePtr (castPtrToStablePtr ptr) 69 70 deValMaybe :: PugsVal -> IO (Maybe Val) 71 deValMaybe ptr | ptr == nullPtr = return Nothing 72 deValMaybe ptr = fmap Just (deVal ptr) 34 73 35 74 valToSv :: PugsVal -> IO PerlSV -
src/perl5/perl5.c
r3924 r3925 196 196 197 197 SV * 198 perl5_get_sv(const char *name) 199 { 200 return (get_sv(name, 1)); 201 } 202 203 SV * 198 204 perl5_eval(char *code, SV *env, int cxt) 199 205 { -
src/perl5/perl5.h
r3924 r3925 14 14 bool perl5_can(SV *inv, char *subname); 15 15 SV * perl5_eval(char *code, SV *env, int cxt); 16 SV * perl5_get_sv ( const char *name );
