Changeset 3975

Show
Ignore:
Timestamp:
05/27/05 16:36:18 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
5515
Message:

* refactor newSVval to handler Val->PerlSV casting.
* beginning of unifying two GCs together.

Location:
src
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Embed/Perl5.hs

    r3954 r3975  
    6060nullSV = error "perl5 not embedded" 
    6161 
     62mkSV :: IO PerlSV -> IO PerlSV 
     63mkSV = id 
     64 
    6265#else 
    6366 
     
    6669 
    6770module Pugs.Embed.Perl5 where 
     71import Pugs.Internals 
    6872import Foreign 
    6973import Foreign.C.Types 
     
    8690foreign import ccall "perl.h boot_DynaLoader" 
    8791    boot_DynaLoader :: Ptr () -> IO () 
     92foreign import ccall "perl5.h perl5_finalize" 
     93    perl5_finalize :: PerlSV -> IO () 
    8894foreign import ccall "perl5.h perl5_SvPV" 
    8995    perl5_SvPV :: PerlSV -> IO CString 
     
    173179canPerl5 sv meth = withCString meth $ \cstr -> perl5_can sv cstr 
    174180 
     181mkSV :: IO PerlSV -> IO PerlSV 
     182mkSV = id 
     183{-  
     184action = do 
     185    sv <- action  
     186    addFinalizer sv (perl5_finalize sv) 
     187    return sv 
     188-} 
     189 
    175190evalPerl5 :: String -> PugsVal -> CInt -> IO PerlSV 
    176 evalPerl5 str env cxt = withCString str $ \cstr -> perl5_eval cstr env cxt 
     191evalPerl5 str env cxt = mkSV $ withCString str $ \cstr -> perl5_eval cstr env cxt 
    177192 
    178193freePerl5 :: PerlInterpreter -> IO () 
  • src/Pugs/Run/Perl5.hs

    r3957 r3975  
    7878    val <- runEvalIO env $ 
    7979        evalExp (Cxt (cxtEnum cxt) $ App subExp (fmap Val inv) (map Val args)) 
    80     case val of 
    81         PerlSV sv   -> return sv 
    82         VStr str    -> vstrToSV str 
    83         VBool bool  -> vintToSV (fromEnum bool) 
    84         VInt int    -> vintToSV int 
    85         VRat rat    -> vnumToSV rat 
    86         VNum num    -> vnumToSV num 
    87         _           -> mkValRef val 
     80    newSVval val 
    8881 
    8982deVal :: PugsVal -> IO Val 
     
    10295    -- print "1" 
    10396    val <- deVal ptr 
    104     case val of 
    105         PerlSV sv   -> return sv 
    106         _           -> mkValRef val 
     97    newSVval val 
     98 
     99newSVval :: Val -> IO PerlSV 
     100newSVval val = case val of 
     101    PerlSV sv   -> return sv 
     102    VStr str    -> vstrToSV str 
     103    VBool bool  -> vintToSV (fromEnum bool) 
     104    VInt int    -> vintToSV int 
     105    VRat rat    -> vnumToSV rat 
     106    VNum num    -> vnumToSV num 
     107    _           -> mkValRef val 
    107108 
    108109valToIv :: PugsVal -> IO CInt 
  • src/perl5/perl5.c

    r3961 r3975  
    320320} 
    321321 
     322void perl5_finalize ( SV* sv ) 
     323{ 
     324    SvREFCNT_dec(sv); 
     325} 
  • src/perl5/perl5.h

    r3953 r3975  
    1515SV * perl5_eval(char *code, void *env, int cxt); 
    1616SV * perl5_get_sv ( const char *name ); 
     17void perl5_finalize ( SV* sv ); 
     18