Changeset 3934

Show
Ignore:
Timestamp:
05/27/05 01:30:01 (3 years ago)
Author:
autrijus
svk:copy_cache_prev:
5515
Message:

* segfault solved

Location:
src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Embed.hs

    r3933 r3934  
    2929    return () -} 
    3030evalEmbedded "Perl5" code = do 
    31     interp <- initPerl5 "" Nothing 
     31    interp <- initPerl5 "" (Nothing :: Maybe ()) 
    3232    evalPerl5 code nullSV 0 
    3333    freePerl5 interp 
  • src/Pugs/Embed/Perl5.hs

    r3933 r3934  
    114114    pugs_MkValRef :: PugsVal -> IO PerlSV 
    115115 
    116 initPerl5 :: String -> Maybe a -> IO PerlInterpreter 
     116initPerl5 :: (Show a) => String -> Maybe a -> IO PerlInterpreter 
    117117initPerl5 str env = do 
    118118    withCString "-e" $ \prog -> withCString str $ \cstr -> do 
     
    138138svToVBool = perl5_SvTRUE 
    139139 
    140 svToVal :: PerlSV -> IO a 
     140svToVal :: (Show a) => PerlSV -> IO a 
    141141svToVal sv = do 
    142142    ptr <- pugs_SvToVal sv 
  • src/Pugs/Run/Perl5.hs

    r3928 r3934  
    6262pugs_apply subPtr invPtr argsPtr = do 
    6363    env     <- askPerl5Env 
     64    -- print "DEREF #1" 
    6465    sub     <- deVal subPtr 
     66    -- print "DEREF #2" 
    6567    inv     <- deValMaybe invPtr 
     68    -- print "DEREF #3" 
    6669    args    <- mapM deVal =<< peekArray0 nullPtr argsPtr 
    6770    let subExp = case sub of 
     
    7578 
    7679deVal :: PugsVal -> IO Val 
    77 deVal ptr = deRefStablePtr (castPtrToStablePtr ptr) 
     80deVal ptr = do 
     81    -- print ("DEVAL", ptr) 
     82    x <- deRefStablePtr (castPtrToStablePtr ptr) 
     83    -- print ("INTO", x) 
     84    return x 
    7885 
    7986deValMaybe :: PugsVal -> IO (Maybe Val) 
     
    8390valToSv :: PugsVal -> IO PerlSV 
    8491valToSv ptr = do 
     92    -- print "1" 
    8593    val <- deVal ptr 
    8694    case val of 
     
    9098valToIv :: PugsVal -> IO CInt 
    9199valToIv ptr = do 
     100    -- print "2" 
    92101    val     <- deVal ptr 
    93102    env     <- askPerl5Env 
     
    97106valToNv :: PugsVal -> IO CDouble 
    98107valToNv ptr = do 
     108    -- print "3" 
    99109    val     <- deVal ptr 
    100110    env     <- askPerl5Env 
     
    104114valToPv :: PugsVal -> IO CString 
    105115valToPv ptr = do 
     116    -- print "4" 
    106117    val     <- deVal ptr 
    107118    env     <- askPerl5Env 
     
    119130 
    120131pvToVal :: CString -> IO PugsVal 
    121 pvToVal = (mkVal . VStr =<<) . peekCString 
     132pvToVal cstr = do 
     133    str <- peekCString cstr 
     134    ptr <- mkVal $ VStr str 
     135    -- print ("PVTOVAL", str, ptr) 
     136    return ptr 
    122137 
    123138#endif 
  • src/perl5/perl5.c

    r3933 r3934  
    215215perl5_get_sv(const char *name) 
    216216{ 
    217     return (get_sv(name, 1)); 
     217    SV *sv = get_sv(name, 1); 
     218    /* sv_dump(sv); */ 
     219    return sv; 
    218220} 
    219221 
    220222void * perl5_set_svref (const char *name, void *val) 
    221223{ 
    222     SV *container = get_sv(name, TRUE); 
     224    /* fprintf(stderr, "setsvref: name: %s, mkvalref: %p\n", name, val); */ 
     225 
     226    SV *container = get_sv("pugs::env", TRUE); 
    223227 
    224228    SV *sv = newSV(0); 
  • src/perl5/pugsembed.c

    r3932 r3934  
    1919    isa[0] = pugs_PvToVal("Code"); 
    2020    isa[1] = NULL; 
    21     if (pugs_ValToIv(pugs_Apply("&isa", val, isa))) { 
     21    if (pugs_ValToIv(pugs_Apply(pugs_PvToVal("&isa"), val, isa))) { 
    2222        fprintf(stderr, "got a code!!\n"); 
    2323    }