Changeset 3924

Show
Ignore:
Timestamp:
05/26/05 23:54:07 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
5515
Message:

* iv/nv/pv two-way casting all done.

Location:
src
Files:
8 modified

Legend:

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

    r3920 r3924  
    437437    fromVal (VStr str) = liftIO $ vstrToSV str 
    438438    fromVal (VInt int) = liftIO $ vintToSV int 
    439     fromVal v = liftIO $ valToSV v 
     439    fromVal (VRat int) = liftIO $ vnumToSV int 
     440    fromVal (VNum int) = liftIO $ vnumToSV int 
     441    fromVal v = liftIO $ mkValRef v 
    440442 
    441443showNum :: Show a => a -> String 
  • src/Pugs/Embed/Perl5.hs

    r3920 r3924  
    3535svToVal = constFail 
    3636 
    37 valToSV :: a -> IO PerlSV 
    38 valToSV = constFail 
     37mkValRef :: a -> IO PerlSV 
     38mkValRef = constFail 
    3939 
    4040vstrToSV :: String -> IO PerlSV 
    4141vstrToSV = constFail 
    4242 
    43 vintToSV :: Integer -> IO PerlSV 
     43vintToSV :: (Integral a) => a -> IO PerlSV 
    4444vintToSV = constFail 
     45 
     46vnumToSV :: (Real a) => a -> IO PerlSV 
     47vnumToSV = constFail 
    4548 
    4649callPerl5 :: String -> [PerlSV] -> CInt -> IO PerlSV 
     
    9194foreign import ccall "perl5.h perl5_newSViv" 
    9295    perl5_newSViv :: CInt -> IO PerlSV 
     96foreign import ccall "perl5.h perl5_newSVnv" 
     97    perl5_newSVnv :: CDouble -> IO PerlSV 
    9398foreign import ccall "perl5.h perl5_call" 
    9499    perl5_call :: CString -> CInt -> Ptr PerlSV -> CInt -> IO PerlSV 
     
    128133    deRefStablePtr (castPtrToStablePtr ptr) 
    129134 
    130 valToSV :: a -> IO PerlSV 
    131 valToSV x = do 
     135mkValRef :: a -> IO PerlSV 
     136mkValRef x = do 
    132137    ptr <- fmap castStablePtrToPtr $ newStablePtr x 
    133138    pugs_MkValRef ptr 
     
    136141vstrToSV str = withCString str perl5_newSVpv  
    137142 
    138 vintToSV :: Integer -> IO PerlSV 
     143vintToSV :: (Integral a) => a -> IO PerlSV 
    139144vintToSV int = perl5_newSViv (fromIntegral int) 
     145 
     146vnumToSV :: (Real a) => a -> IO PerlSV 
     147vnumToSV int = perl5_newSVnv (realToFrac int) 
    140148 
    141149callPerl5 :: String -> [PerlSV] -> CInt -> IO PerlSV 
  • src/Pugs/Prim.hs

    r3919 r3924  
    245245    env <- ask 
    246246    tryIO undef $ do 
    247         envSV <- valToSV (VControl $ ControlEnv env) 
     247        envSV <- mkValRef (VControl $ ControlEnv env) 
    248248        sv <- evalPerl5 str envSV $ enumCxt (envContext env) 
    249249        return $ PerlSV sv 
  • src/Pugs/Run/Perl5.hs

    r3922 r3924  
    1111import Foreign.C.Types 
    1212import Foreign.C.String 
     13 
     14foreign export ccall "pugs_ValToSv" 
     15    valToSv :: PugsVal -> IO PerlSV 
    1316 
    1417foreign export ccall "pugs_MkSvRef" 
     
    2730mkVal val = fmap castStablePtrToPtr $ newStablePtr val 
    2831 
     32deVal :: PugsVal -> IO Val 
     33deVal ptr = deRefStablePtr (castPtrToStablePtr ptr) 
     34 
     35valToSv :: PugsVal -> IO PerlSV 
     36valToSv ptr = do 
     37    val <- deVal ptr 
     38    case val of 
     39        PerlSV sv   -> return sv 
     40        _           -> mkValRef val 
     41 
    2942mkSvRef :: PerlSV -> IO PugsVal 
    3043mkSvRef = mkVal . PerlSV 
  • src/perl5/perl5.c

    r3919 r3924  
    160160 
    161161SV * 
     162perl5_newSVnv ( double iv ) 
     163{ 
     164    return(newSVnv(iv)); 
     165} 
     166 
     167SV * 
    162168perl5_call(char *subname, int argc, SV** args, int cxt) 
    163169{ 
  • src/perl5/perl5.h

    r3919 r3924  
    1010SV * perl5_newSVpv ( char * pv ); 
    1111SV * perl5_newSViv ( int iv ); 
     12SV * perl5_newSVnv ( double iv ); 
    1213SV * perl5_call(char *subname, int argc, SV** args, int cxt); 
    1314bool perl5_can(SV *inv, char *subname); 
  • src/perl5/pugsembed.c

    r3921 r3924  
    2020 
    2121Val *pugs_Eval ( char *code ) { return NULL; } 
    22  
    2322Val *pugs_Apply ( Val *sub, Val *inv, Val **args ) { return NULL; } 
    24  
    25 SV  *pugs_ValToSv ( Val *val ) { return NULL; } 
  • src/perl5/pugsembed.h

    r3921 r3924  
    1616extern Val *pugs_PvToVal ( char *pv ); 
    1717 
    18 PUGS_EXTERN SV  *pugs_ValToSv ( Val *val ); 
    19  
    2018Val *pugs_SvToVal ( SV *sv ); 
    2119SV  *pugs_MkValRef ( Val *val ); 
    2220 
    2321extern Val *pugs_MkSvRef  ( SV *sv ); 
     22extern SV  *pugs_ValToSv ( Val *val ); 
     23