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

* Perl5Embed: .kv, .keys, .values, .pairs etc now works on Perl hashrefs.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim/Keyed.hs

    r4085 r4102  
    1616 
    1717pairsFromVal :: Val -> Eval [Val] 
     18pairsFromVal (PerlSV sv) = do 
     19    keys    <- hash_fetchKeys sv 
     20    return $ VList (map castV keys) 
     21    elems   <- mapM (hash_fetchElem sv) keys 
     22    return $ map (VRef . MkRef . IPair) (keys `zip` elems) 
    1823pairsFromVal v = do 
    1924    ref  <- fromVal v 
     
    2227 
    2328keysFromVal :: Val -> Eval Val 
     29keysFromVal (PerlSV sv) = do 
     30    keys    <- hash_fetchKeys sv 
     31    return $ VList (map castV keys) 
    2432keysFromVal (VList vs) = return . VList $ map VInt [0 .. (genericLength vs) - 1] 
    2533keysFromVal (VRef ref) = do 
    2634    vals <- keysFromRef ref 
    2735    return $ VList vals 
    28 keysFromVal (PerlSV sv) = do 
    29     keys    <- hash_fetchKeys sv 
    30     return $ VList (map castV keys) 
    3136keysFromVal v = retError "Not a keyed reference" v 
    3237 
     
    3742    vals <- valuesFromRef ref 
    3843    return $ VList vals 
     44valuesFromVal (PerlSV sv) = do 
     45    pairs <- hash_fetch sv 
     46    return . VList $ Map.elems pairs 
    3947valuesFromVal v = retError "Not a keyed reference" v 
    4048