Changeset 6109
- Timestamp:
- 08/07/05 20:12:10 (3 years ago)
- Location:
- src
- Files:
-
- 4 modified
-
Pugs/AST/Internals.hs (modified) (1 diff)
-
Pugs/Eval.hs (modified) (3 diffs)
-
Pugs/Prim/Match.hs (modified) (2 diffs)
-
RRegex/PCRE.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/AST/Internals.hs
r6067 r6109 1651 1651 -- 'Regex' object) 1652 1652 , rxGlobal :: !Bool -- ^ Flag indicating \'global\' (match-all) 1653 , rxNumSubs :: !Int -- ^ The number of subpatterns present. 1653 1654 , rxStringify :: !Bool 1654 1655 , rxRuleStr :: !String -- ^ The rule string, for user reference. -
src/Pugs/Eval.hs
r6061 r6109 40 40 import Pugs.External 41 41 import Pugs.Eval.Var 42 43 import RRegex.PCRE as PCRE 42 44 43 45 {-| … … 633 635 flag_s <- fromAdverb hv ["stringify"] -- XXX hack 634 636 adverbHash <- reduce adverbs 635 let rx | p5 = MkRulePCRE p5re g flag_s str adverbHash 637 let p5re = mkRegexWithPCRE (encodeUTF8 str) $ 638 [ pcreUtf8 639 , ('i' `elem` p5flags || flag_i) `implies` pcreCaseless 640 , ('m' `elem` p5flags) `implies` pcreMultiline 641 , ('s' `elem` p5flags) `implies` pcreDotall 642 , ('x' `elem` p5flags) `implies` pcreExtended 643 ] 644 ns <- liftIO $ PCRE.numSubs p5re 645 let rx | p5 = MkRulePCRE p5re g ns flag_s str adverbHash 636 646 | otherwise = MkRulePGE p6re g flag_s adverbHash 637 647 g = ('g' `elem` p5flags || flag_g) … … 640 650 ':':_ -> ":w" ++ str 641 651 _ -> ":w::" ++ str 642 p5re = mkRegexWithPCRE (encodeUTF8 str) $643 [ pcreUtf8644 , ('i' `elem` p5flags || flag_i) `implies` pcreCaseless645 , ('m' `elem` p5flags) `implies` pcreMultiline646 , ('s' `elem` p5flags) `implies` pcreDotall647 , ('x' `elem` p5flags) `implies` pcreExtended648 ]649 652 retVal $ VRule rx 650 653 where -
src/Pugs/Prim/Match.hs
r6010 r6109 144 144 else return (VList rv) 145 145 where 146 hasSubpatterns = case rx of 147 MkRulePGE{} -> True -- bogus 148 MkRulePCRE{rxNumSubs=n} -> not (n == 0) 146 149 matchOnce :: String -> Eval [Val] 147 150 matchOnce str = do … … 149 152 if not (matchOk match) then return [] else do 150 153 rest <- matchOnce (genericDrop (matchTo match) str) 151 return $ matchSubPos match ++ rest 154 return $ if hasSubpatterns 155 then (matchSubPos match) ++ rest 156 else (VMatch match):rest 152 157 153 158 op2Match x (VRule rx) = do -
src/RRegex/PCRE.hs
r3372 r6109 23 23 pcreUtf8, -- UTF-8 semantics 24 24 25 numSubs, 26 25 27 getVersion 26 28 ) where … … 59 61 return $ Left (fi eo,es) 60 62 else fmap (Right . Regex) (newForeignPtr_ v) 63 64 numSubs :: Regex -> IO Int 65 numSubs (Regex pcre_fptr) = withForeignPtr pcre_fptr $ \pcre_ptr -> do 66 nsub <- getNumSubs pcre_ptr 67 return $ fromIntegral nsub 61 68 62 69 getNumSubs :: Ptr PCRE -> IO CInt
