Changeset 21673 for src/Pugs/Eval.hs

Show
Ignore:
Timestamp:
08/01/08 13:56:05 (4 months ago)
Author:
audreyt
Message:

* Import Pugs 6.2.13.11 from Hackage into our source tree.
* Highlights:

  • Much faster startup time
  • Slightly faster compilation time (mostly due to refactored Pugs.AST.Internals)
  • Portable-to-Win32 readline thanks to Haskeline
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Eval.hs

    r20058 r21673  
    2828import Prelude hiding ( exp ) 
    2929import qualified Data.Map as Map 
     30import qualified StringTable.AtomMap as AtomMap 
    3031 
    3132import Pugs.AST 
     
    4142import DrIFT.YAML () 
    4243import GHC.PArr 
    43 import qualified UTF8 as Buf 
     44import qualified Data.ByteString.UTF8 as Str 
     45import qualified Data.ByteString.Char8 as Buf 
    4446 
    4547 
     
    809811    adverbHash  <- reduce adverbs 
    810812    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                ] 
    818826        p6re = combine 
    819827            [ if flag_s then (\x -> ":sigspace(1)[" ++ x ++ "]") else id 
     
    825833             | otherwise     = p6reAdvs ++ "::" ++ str 
    826834        -} 
    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 
    829836           | otherwise = return $ MkRulePGE p6re g flag_tilde adverbHash 
    830     return . VRule =<< rx 
     837    io $ fmap VRule rx 
    831838    where 
    832839    implies True  = id 
     
    10781085    where 
    10791086    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 ] 
    10811088    feed = concatFeeds (c_feeds capt) 
    10821089    inv  = case capt of  
     
    11151122        resFeed = feed res 
    11161123    feed res = maybe emptyFeed id res 
    1117     addNamed :: (Map ID [:a:]) -> VStr -> a -> Map ID [:a:] 
     1124    addNamed :: AtomMap [:a:] -> VStr -> a -> AtomMap [:a:] 
    11181125    addNamed mp k v = 
    11191126        let id = cast k in 
    1120         Map.insertWith (flip (+:+)) id [:v:] mp 
     1127        AtomMap.insertWith (flip (+:+)) id [:v:] mp 
    11211128 
    11221129dummyVar :: Var 
     
    11711178interpolateVal (VV vv) | Just (CaptSub{ c_feeds = feeds } :: ValCapt) <- castVal vv = return . fromP $ 
    11721179    [: 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 :] 
    11741181    where 
    11751182    concatNamed [:x:] = castV x