Changeset 3919

Show
Ignore:
Timestamp:
05/26/05 23:10:37 (3 years ago)
Author:
autrijus
svk:copy_cache_prev:
5482
Message:

* marshall pugs execution environment into $pugs::env.

Location:
src
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/AST/Internals.hs

    r3918 r3919  
    213213    fromSV sv = do 
    214214        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) 
    216216    vCast :: Val -> n 
    217217    vCast v@(VRef _)    = castFail v 
  • src/Pugs/Embed.hs

    r3887 r3919  
    3030evalEmbedded "Perl5" code = do 
    3131    interp <- initPerl5 "" 
    32     evalPerl5 code 0 
     32    evalPerl5 code nullSV 0 
    3333    freePerl5 interp 
    3434evalEmbedded s _ = fail $ "Cannot evaluate in " ++ s 
  • src/Pugs/Embed/Perl5.hs

    r3918 r3919  
    1717freePerl5 _ = return () 
    1818 
    19 evalPerl5 :: String -> CInt -> IO PerlSV 
    20 evalPerl5 _ = constFail 
     19evalPerl5 :: String -> PerlSV -> CInt -> IO PerlSV 
     20evalPerl5 _ _ = constFail 
    2121 
    2222svToVStr :: PerlSV -> IO String 
     
    4949canPerl5 :: PerlSV -> String -> IO Bool 
    5050canPerl5 _ = constFail 
     51 
     52nullSV :: PerlSV 
     53nullSV = error "perl5 not embedded" 
    5154 
    5255#else 
     
    9396    perl5_can :: PerlSV -> CString -> IO Bool 
    9497foreign import ccall "perl.h perl5_eval" 
    95     perl5_eval :: CString -> CInt -> IO PerlSV 
     98    perl5_eval :: CString -> PerlSV -> CInt -> IO PerlSV 
    9699foreign import ccall "perl5.h perl5_init" 
    97100    perl5_init :: CInt -> Ptr CString -> IO PerlInterpreter 
     
    147150canPerl5 sv meth = withCString meth $ \cstr -> perl5_can sv cstr 
    148151 
    149 evalPerl5 :: String -> CInt -> IO PerlSV 
    150 evalPerl5 str cxt = withCString str $ \cstr -> perl5_eval cstr cxt 
     152evalPerl5 :: String -> PerlSV -> CInt -> IO PerlSV 
     153evalPerl5 str env cxt = withCString str $ \cstr -> perl5_eval cstr env cxt 
    151154 
    152155freePerl5 :: PerlInterpreter -> IO () 
     
    155158    return () 
    156159 
     160nullSV :: PerlSV 
     161nullSV = nullPtr 
     162 
    157163#endif 
    158164 
  • src/Pugs/Prim.hs

    r3908 r3919  
    243243op1 "eval_perl5" = \v -> do 
    244244    str <- fromVal v 
    245     cxt <- asks envContext 
     245    env <- ask 
    246246    tryIO undef $ do 
    247         sv <- evalPerl5 str $ enumCxt cxt 
     247        envSV <- valToSV (VControl $ ControlEnv env) 
     248        sv <- evalPerl5 str envSV $ enumCxt (envContext env) 
    248249        return $ PerlSV sv 
    249250op1 "eval_haskell" = op1EvalHaskell 
  • src/perl5/perl5.c

    r3918 r3919  
    190190 
    191191SV * 
    192 perl5_eval(char *code, int cxt) 
     192perl5_eval(char *code, SV *env, int cxt) 
    193193{ 
    194194    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); 
    197206    eval_sv(sv, cxt); 
    198207    SvREFCNT_dec(sv); 
     
    200209    SPAGAIN; 
    201210    sv = POPs; 
    202     PUTBACK; 
     211    SvREFCNT_inc(sv); 
     212    PUTBACK; 
     213 
     214    FREETMPS; 
     215    LEAVE; 
    203216 
    204217    return sv; 
  • src/perl5/perl5.h

    r3918 r3919  
    1212SV * perl5_call(char *subname, int argc, SV** args, int cxt); 
    1313bool perl5_can(SV *inv, char *subname); 
    14 SV * perl5_eval(char *code, int cxt); 
     14SV * perl5_eval(char *code, SV *env, int cxt);