Changeset 3919
- Timestamp:
- 05/26/05 23:10:37 (3 years ago)
- svk:copy_cache_prev:
- 5482
- Location:
- src
- Files:
-
- 6 modified
-
Pugs/AST/Internals.hs (modified) (1 diff)
-
Pugs/Embed.hs (modified) (1 diff)
-
Pugs/Embed/Perl5.hs (modified) (5 diffs)
-
Pugs/Prim.hs (modified) (1 diff)
-
perl5/perl5.c (modified) (2 diffs)
-
perl5/perl5.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/AST/Internals.hs
r3918 r3919 213 213 fromSV sv = do 214 214 str <- liftIO $ svToVStr sv 215 fail $ "cannot cast from SV (" ++ str ++ " to " ++ errType (undefined :: n)215 fail $ "cannot cast from SV (" ++ str ++ ") to " ++ errType (undefined :: n) 216 216 vCast :: Val -> n 217 217 vCast v@(VRef _) = castFail v -
src/Pugs/Embed.hs
r3887 r3919 30 30 evalEmbedded "Perl5" code = do 31 31 interp <- initPerl5 "" 32 evalPerl5 code 032 evalPerl5 code nullSV 0 33 33 freePerl5 interp 34 34 evalEmbedded s _ = fail $ "Cannot evaluate in " ++ s -
src/Pugs/Embed/Perl5.hs
r3918 r3919 17 17 freePerl5 _ = return () 18 18 19 evalPerl5 :: String -> CInt -> IO PerlSV20 evalPerl5 _ = constFail19 evalPerl5 :: String -> PerlSV -> CInt -> IO PerlSV 20 evalPerl5 _ _ = constFail 21 21 22 22 svToVStr :: PerlSV -> IO String … … 49 49 canPerl5 :: PerlSV -> String -> IO Bool 50 50 canPerl5 _ = constFail 51 52 nullSV :: PerlSV 53 nullSV = error "perl5 not embedded" 51 54 52 55 #else … … 93 96 perl5_can :: PerlSV -> CString -> IO Bool 94 97 foreign import ccall "perl.h perl5_eval" 95 perl5_eval :: CString -> CInt -> IO PerlSV98 perl5_eval :: CString -> PerlSV -> CInt -> IO PerlSV 96 99 foreign import ccall "perl5.h perl5_init" 97 100 perl5_init :: CInt -> Ptr CString -> IO PerlInterpreter … … 147 150 canPerl5 sv meth = withCString meth $ \cstr -> perl5_can sv cstr 148 151 149 evalPerl5 :: String -> CInt -> IO PerlSV150 evalPerl5 str cxt = withCString str $ \cstr -> perl5_eval cstrcxt152 evalPerl5 :: String -> PerlSV -> CInt -> IO PerlSV 153 evalPerl5 str env cxt = withCString str $ \cstr -> perl5_eval cstr env cxt 151 154 152 155 freePerl5 :: PerlInterpreter -> IO () … … 155 158 return () 156 159 160 nullSV :: PerlSV 161 nullSV = nullPtr 162 157 163 #endif 158 164 -
src/Pugs/Prim.hs
r3908 r3919 243 243 op1 "eval_perl5" = \v -> do 244 244 str <- fromVal v 245 cxt <- asks envContext245 env <- ask 246 246 tryIO undef $ do 247 sv <- evalPerl5 str $ enumCxt cxt 247 envSV <- valToSV (VControl $ ControlEnv env) 248 sv <- evalPerl5 str envSV $ enumCxt (envContext env) 248 249 return $ PerlSV sv 249 250 op1 "eval_haskell" = op1EvalHaskell -
src/perl5/perl5.c
r3918 r3919 190 190 191 191 SV * 192 perl5_eval(char *code, int cxt)192 perl5_eval(char *code, SV *env, int cxt) 193 193 { 194 194 dSP; 195 SV* sv = newSVpv(code, 0); 196 195 SV* sv; 196 197 ENTER; 198 199 if (env != NULL) { 200 sv = get_sv("pugs::env", 1); 201 save_item(sv); 202 sv_setsv(sv, env); 203 } 204 205 sv = newSVpv(code, 0); 197 206 eval_sv(sv, cxt); 198 207 SvREFCNT_dec(sv); … … 200 209 SPAGAIN; 201 210 sv = POPs; 202 PUTBACK; 211 SvREFCNT_inc(sv); 212 PUTBACK; 213 214 FREETMPS; 215 LEAVE; 203 216 204 217 return sv; -
src/perl5/perl5.h
r3918 r3919 12 12 SV * perl5_call(char *subname, int argc, SV** args, int cxt); 13 13 bool perl5_can(SV *inv, char *subname); 14 SV * perl5_eval(char *code, int cxt);14 SV * perl5_eval(char *code, SV *env, int cxt);
