Changeset 3887
- Timestamp:
- 05/26/05 02:17:16 (3 years ago)
- svk:copy_cache_prev:
- 5477
- Location:
- src
- Files:
-
- 5 modified
-
Pugs/Embed.hs (modified) (1 diff)
-
Pugs/Embed/Perl5.hs (modified) (3 diffs)
-
Pugs/Types.hs (modified) (1 diff)
-
perl5/perl5.c (modified) (3 diffs)
-
perl5/perl5.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Embed.hs
r3538 r3887 30 30 evalEmbedded "Perl5" code = do 31 31 interp <- initPerl5 "" 32 evalPerl5 code 32 evalPerl5 code 0 33 33 freePerl5 interp 34 34 evalEmbedded s _ = fail $ "Cannot evaluate in " ++ s -
src/Pugs/Embed/Perl5.hs
r3883 r3887 16 16 freePerl5 _ = return () 17 17 18 evalPerl5 :: String -> IO PerlSV18 evalPerl5 :: String -> CInt -> IO PerlSV 19 19 evalPerl5 = constFail 20 20 … … 65 65 perl5_newSViv :: CInt -> IO PerlSV 66 66 foreign import ccall "perl5.h perl5_call" 67 perl5_call :: CString -> CInt -> Ptr PerlSV -> IO PerlSV67 perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV 68 68 foreign import ccall "perl5.h perl5_can" 69 69 perl5_can :: PerlSV -> CString -> IO Bool 70 70 foreign import ccall "perl.h perl5_eval" 71 perl5_eval :: CString -> IO PerlSV71 perl5_eval :: CString -> CInt -> IO PerlSV 72 72 foreign import ccall "perl5.h perl5_init" 73 73 perl5_init :: CInt -> Ptr CString -> IO PerlInterpreter … … 88 88 vintToSV int = perl5_newSViv (fromIntegral int) 89 89 90 callPerl5 :: String -> [PerlSV] -> IO PerlSV91 callPerl5 str args = do90 callPerl5 :: String -> [PerlSV] -> CInt -> IO PerlSV 91 callPerl5 str args cxt = do 92 92 withCString str $ \cstr -> do 93 93 withArray args $ \argv -> do 94 perl5_call cstr (toEnum $ length args) argv 94 perl5_call cstr (toEnum $ length args) argv cxt 95 95 96 96 canPerl5 :: PerlSV -> String -> IO Bool 97 97 canPerl5 sv meth = withCString meth $ \cstr -> perl5_can sv cstr 98 98 99 evalPerl5 :: String -> IO PerlSV100 evalPerl5 str = withCString str perl5_eval99 evalPerl5 :: String -> CInt -> IO PerlSV 100 evalPerl5 str cxt = withCString str $ \cstr -> perl5_eval cstr cxt 101 101 102 102 freePerl5 :: PerlInterpreter -> IO () -
src/Pugs/Types.hs
r3210 r3887 75 75 isVoidCxt _ = False 76 76 77 -- |Return the Perl 5 calling convention bit value for the context 78 enumCxt :: (Num a) => Cxt -> a 79 enumCxt CxtVoid = 128 80 enumCxt (CxtItem _) = 0 81 enumCxt (CxtSlurpy _) = 1 82 77 83 -- |Make a type value representing the type with the specified name. 78 84 -- Recognises conjunctive (&) and disjunctive (|) types. -
src/perl5/perl5.c
r3876 r3887 139 139 140 140 SV * 141 perl5_call(char *subname, int argc, SV** args )141 perl5_call(char *subname, int argc, SV** args, int cxt) 142 142 { 143 143 int i; … … 155 155 PUTBACK; 156 156 157 call_method(subname, G_SCALAR);157 call_method(subname, cxt); 158 158 159 159 SPAGAIN; … … 169 169 170 170 SV * 171 perl5_eval(char *code) 172 { 171 perl5_eval(char *code, int cxt) 172 { 173 /* XXX - does not respect context yet */ 173 174 return (eval_pv(code, TRUE)); 174 175 } -
src/perl5/perl5.h
r3876 r3887 7 7 SV * perl5_newSVpv ( char * pv ); 8 8 SV * perl5_newSViv ( int iv ); 9 SV * perl5_call(char *subname, int argc, SV** args );9 SV * perl5_call(char *subname, int argc, SV** args, int cxt); 10 10 bool perl5_can(SV *inv, char *subname); 11 SV * perl5_eval(char *code );11 SV * perl5_eval(char *code, int cxt);
