Changeset 21673 for src/Pugs/Eval.hs
- Timestamp:
- 08/01/08 13:56:05 (4 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Eval.hs (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval.hs
r20058 r21673 28 28 import Prelude hiding ( exp ) 29 29 import qualified Data.Map as Map 30 import qualified StringTable.AtomMap as AtomMap 30 31 31 32 import Pugs.AST … … 41 42 import DrIFT.YAML () 42 43 import GHC.PArr 43 import qualified UTF8 as Buf 44 import qualified Data.ByteString.UTF8 as Str 45 import qualified Data.ByteString.Char8 as Buf 44 46 45 47 … … 809 811 adverbHash <- reduce adverbs 810 812 let g = ('g' `elem` p5flags || flag_g) 811 p5re = mkRegexWithPCRE (encodeUTF8 str) $ 812 [ pcreUtf8 813 , ('i' `elem` p5flags || flag_i) `implies` pcreCaseless 814 , ('m' `elem` p5flags) `implies` pcreMultiline 815 , ('s' `elem` p5flags) `implies` pcreDotall 816 , ('x' `elem` p5flags) `implies` pcreExtended 817 ] 813 mkP5RE = do 814 rv <- compilePCRE compOpts execBlank (encodeUTF8 str) 815 case rv of 816 Left err -> fail (show err) 817 Right rx -> return rx 818 where 819 compOpts = sum 820 [ compUTF8 821 , ('i' `elem` p5flags || flag_i) `implies` compCaseless 822 , ('m' `elem` p5flags) `implies` compMultiline 823 , ('s' `elem` p5flags) `implies` compDotAll 824 , ('x' `elem` p5flags) `implies` compExtended 825 ] 818 826 p6re = combine 819 827 [ if flag_s then (\x -> ":sigspace(1)[" ++ x ++ "]") else id … … 825 833 | otherwise = p6reAdvs ++ "::" ++ str 826 834 -} 827 rx | p5 = do ns <- io $ numSubs p5re 828 return $ MkRulePCRE p5re g ns flag_tilde str adverbHash 835 rx | p5 = mkP5RE >>= \p5re -> return $ MkRulePCRE p5re g (getNumSubs p5re) flag_tilde str adverbHash 829 836 | otherwise = return $ MkRulePGE p6re g flag_tilde adverbHash 830 return . VRule =<<rx837 io $ fmap VRule rx 831 838 where 832 839 implies True = id … … 1078 1085 where 1079 1086 argsPos = mapP (Val . castV) (f_positionals feed) 1080 argsNam = [ Syn "named" [Val (VStr (cast k)), Val (castV (vs !: lst))] | (k, vs) <- Map.toList (f_nameds feed), let lst = lengthP vs - 1, lst >= 0 ]1087 argsNam = [ Syn "named" [Val (VStr (cast k)), Val (castV (vs !: lst))] | (k, vs) <- AtomMap.toList (f_nameds feed), let lst = lengthP vs - 1, lst >= 0 ] 1081 1088 feed = concatFeeds (c_feeds capt) 1082 1089 inv = case capt of … … 1115 1122 resFeed = feed res 1116 1123 feed res = maybe emptyFeed id res 1117 addNamed :: (Map ID [:a:]) -> VStr -> a -> Map ID[:a:]1124 addNamed :: AtomMap [:a:] -> VStr -> a -> AtomMap [:a:] 1118 1125 addNamed mp k v = 1119 1126 let id = cast k in 1120 Map.insertWith (flip (+:+)) id [:v:] mp1127 AtomMap.insertWith (flip (+:+)) id [:v:] mp 1121 1128 1122 1129 dummyVar :: Var … … 1171 1178 interpolateVal (VV vv) | Just (CaptSub{ c_feeds = feeds } :: ValCapt) <- castVal vv = return . fromP $ 1172 1179 [: Val (castV v) | v <- concatMapP f_positionals feeds :] 1173 +:+ [: Syn "named" [Val (VStr $ cast k), Val (concatNamed v)] | (k, v) <- concatMapP (toP . Map.toList . f_nameds) feeds :]1180 +:+ [: Syn "named" [Val (VStr $ cast k), Val (concatNamed v)] | (k, v) <- concatMapP (toP . AtomMap.toList . f_nameds) feeds :] 1174 1181 where 1175 1182 concatNamed [:x:] = castV x
