Changeset 3887

Show
Ignore:
Timestamp:
05/26/05 02:17:16 (3 years ago)
Author:
autrijus
svk:copy_cache_prev:
5477
Message:

* Method invocation into Perl 5 now carries the current

context around.

Location:
src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Embed.hs

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

    r3883 r3887  
    1616freePerl5 _ = return () 
    1717 
    18 evalPerl5 :: String -> IO PerlSV 
     18evalPerl5 :: String -> CInt -> IO PerlSV 
    1919evalPerl5 = constFail 
    2020 
     
    6565    perl5_newSViv :: CInt -> IO PerlSV 
    6666foreign import ccall "perl5.h perl5_call" 
    67     perl5_call :: CString -> CInt -> Ptr PerlSV -> IO PerlSV 
     67    perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV 
    6868foreign import ccall "perl5.h perl5_can" 
    6969    perl5_can :: PerlSV -> CString -> IO Bool 
    7070foreign import ccall "perl.h perl5_eval" 
    71     perl5_eval :: CString -> IO PerlSV 
     71    perl5_eval :: CString -> CInt -> IO PerlSV 
    7272foreign import ccall "perl5.h perl5_init" 
    7373    perl5_init :: CInt -> Ptr CString -> IO PerlInterpreter 
     
    8888vintToSV int = perl5_newSViv (fromIntegral int) 
    8989 
    90 callPerl5 :: String -> [PerlSV] -> IO PerlSV 
    91 callPerl5 str args = do 
     90callPerl5 :: String -> [PerlSV] -> CInt -> IO PerlSV 
     91callPerl5 str args cxt = do 
    9292    withCString str $ \cstr -> do 
    9393        withArray args $ \argv -> do 
    94             perl5_call cstr (toEnum $ length args) argv 
     94            perl5_call cstr (toEnum $ length args) argv cxt 
    9595 
    9696canPerl5 :: PerlSV -> String -> IO Bool 
    9797canPerl5 sv meth = withCString meth $ \cstr -> perl5_can sv cstr 
    9898 
    99 evalPerl5 :: String -> IO PerlSV 
    100 evalPerl5 str = withCString str perl5_eval 
     99evalPerl5 :: String -> CInt -> IO PerlSV 
     100evalPerl5 str cxt = withCString str $ \cstr -> perl5_eval cstr cxt 
    101101 
    102102freePerl5 :: PerlInterpreter -> IO () 
  • src/Pugs/Types.hs

    r3210 r3887  
    7575isVoidCxt   _             = False 
    7676 
     77-- |Return the Perl 5 calling convention bit value for the context 
     78enumCxt :: (Num a) => Cxt -> a 
     79enumCxt CxtVoid       = 128 
     80enumCxt (CxtItem _)   = 0 
     81enumCxt (CxtSlurpy _) = 1 
     82 
    7783-- |Make a type value representing the type with the specified name. 
    7884-- Recognises conjunctive (&) and disjunctive (|) types. 
  • src/perl5/perl5.c

    r3876 r3887  
    139139 
    140140SV * 
    141 perl5_call(char *subname, int argc, SV** args) 
     141perl5_call(char *subname, int argc, SV** args, int cxt) 
    142142{ 
    143143    int i; 
     
    155155    PUTBACK; 
    156156 
    157     call_method(subname, G_SCALAR); 
     157    call_method(subname, cxt); 
    158158 
    159159    SPAGAIN; 
     
    169169 
    170170SV * 
    171 perl5_eval(char *code) 
    172 { 
     171perl5_eval(char *code, int cxt) 
     172{ 
     173    /* XXX - does not respect context yet */ 
    173174    return (eval_pv(code, TRUE)); 
    174175} 
  • src/perl5/perl5.h

    r3876 r3887  
    77SV * perl5_newSVpv ( char * pv ); 
    88SV * perl5_newSViv ( int iv ); 
    9 SV * perl5_call(char *subname, int argc, SV** args); 
     9SV * perl5_call(char *subname, int argc, SV** args, int cxt); 
    1010bool perl5_can(SV *inv, char *subname); 
    11 SV * perl5_eval(char *code); 
     11SV * perl5_eval(char *code, int cxt);