Changeset 3210

Show
Ignore:
Timestamp:
05/14/05 12:35:26 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
4718
Message:

* fix regression reported by gaal: my $s = <a>; my @a = <<$s>>;

Location:
src/Pugs
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Eval.hs

    r3195 r3210  
    536536        flag_g  <- fromAdverb hv ["g", "global"] 
    537537        flag_i  <- fromAdverb hv ["i", "ignorecase"] 
    538         let rx | p5 = (`MkRulePCRE` g) . mkRegexWithPCRE (encodeUTF8 str) $ 
     538        flag_s  <- fromAdverb hv ["stringify"] -- XXX hack 
     539        let rx | p5 = MkRulePCRE p5re g flag_s  
     540               | otherwise = MkRulePGE str g flag_s 
     541            g = ('g' `elem` p5flags || flag_g) 
     542            p5re = mkRegexWithPCRE (encodeUTF8 str) $ 
    539543                        [ pcreUtf8 
    540544                        , ('i' `elem` p5flags || flag_i) `implies` pcreCaseless 
     
    543547                        , ('x' `elem` p5flags) `implies` pcreExtended 
    544548                        ] 
    545                | otherwise = MkRulePGE str g 
    546             g = ('g' `elem` p5flags || flag_g) 
    547549        retVal $ VRule rx 
    548550        where 
     
    808810    val <- evalExp exp 
    809811    evalValType val 
    810 evalExpType exp = 
    811     let exp' = unwrap exp in 
    812     if exp == exp' 
    813         then return $ mkType "Any" 
    814         else evalExpType exp' 
     812evalExpType (Cxt cxt _) = return $ typeOfCxt cxt 
     813evalExpType (Pos _ exp) = evalExpType exp 
     814evalExpType (Pad _ _ exp) = evalExpType exp 
     815evalExpType (Sym _ _ exp) = evalExpType exp 
     816evalExpType (Stmts _ exp) = evalExpType exp 
     817evalExpType _ = return $ mkType "Any" 
    815818 
    816819-- OK... Now let's implement the hideously clever autothreading algorithm. 
  • src/Pugs/Parser.hs

    r3209 r3210  
    14031403    doSplit (Cxt (CxtItem _) (Val (VStr str))) = doSplitStr str 
    14041404     
    1405     doSplit expr = Cxt cxtSlurpyAny $ App (Var "&infix:~~") [expr, rxSplit] [] 
     1405    doSplit expr = App (Var "&infix:~~") [expr, rxSplit] [] 
    14061406    rxSplit = Syn "rx" $ 
    14071407        [ Val $ VStr "(\\S+)" 
     
    14091409            [ castV (VStr "P5", VInt 1) 
    14101410            , castV (VStr "g", VInt 1) 
     1411            , castV (VStr "stringify", VInt 1) 
    14111412            ] 
    14121413        ] 
  • src/Pugs/Prim/Match.hs

    r3119 r3210  
    120120    str     <- fromVal x 
    121121    rv      <- matchOnce str 
    122     ifListContext 
    123         (return $ VList rv) 
    124         (return . VInt $ genericLength rv) 
     122    cxt     <- asks envContext 
     123    if (not $ isSlurpyCxt cxt) 
     124        then return (VInt $ genericLength rv) 
     125        else return . VList $ if rxStringify rx 
     126            then map (VStr . vCast) rv 
     127            else rv 
    125128    where 
    126129    matchOnce :: String -> Eval [Val] 
  • src/Pugs/Types.hs

    r2956 r3210  
    128128        { rxRegex     :: !Regex -- ^ The \'regular\' expression 
    129129        , rxGlobal    :: !Bool  -- ^ Flag indicating \'global\' (match-all) 
     130        , rxStringify :: !Bool 
    130131        } 
    131132    | MkRulePGE 
    132133        { rxRule      :: !String -- ^ The \'rule\' expression 
    133134        , rxGlobal    :: !Bool   -- ^ Flag indicating \'global\' (match-all) 
     135        , rxStringify :: !Bool 
    134136        } 
    135137    deriving (Show, Eq, Ord, Typeable)