Changeset 3296 for src/Pugs/Prim/Eval.hs
- Timestamp:
- 05/16/05 16:57:02 (4 years ago)
- svk:copy_cache_prev:
- 4878
- Files:
-
- 1 modified
-
src/Pugs/Prim/Eval.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/Eval.hs
r2970 r3296 3 3 op1EvalHaskell, 4 4 opEval, 5 opRequire, 5 6 -- used by Pugs.Eval -- needs factored somewhere bettwen 6 7 retEvalResult, 7 8 ) where 8 import Control.Monad.Reader9 9 import Pugs.AST 10 10 import Pugs.Parser 11 11 import Pugs.Embed 12 import Pugs.Internals 13 14 opRequire :: Bool -> Val -> Eval Val 15 opRequire dumpEnv v = do 16 file <- fromVal v 17 incs <- fromVal =<< readVar "@*INC" 18 requireInc incs file (errMsg file incs) 19 where 20 errMsg file incs = "Can't locate " ++ file ++ " in @INC (@INC contains: " ++ unwords incs ++ ")." 21 requireInc [] _ msg = fail msg 22 requireInc (p:ps) file msg = do 23 let pathName = p ++ "/" ++ file 24 ok <- liftIO $ doesFileExist pathName 25 if (not ok) 26 then requireInc ps file msg 27 else do 28 str <- liftIO $ readFile pathName 29 opEval (Just dumpEnv) pathName (decodeUTF8 str) 12 30 13 31 op1EvalHaskell :: Val -> Eval Val … … 25 43 retEmpty 26 44 27 opEval :: Bool -> String -> String -> Eval Val28 opEval f atalname str = do45 opEval :: Maybe Bool -> String -> String -> Eval Val 46 opEval flag name str = do 29 47 env <- ask 30 48 let env' = runRule env id ruleProgram name str 49 trans | flag == Just True = (`mergeStmts` Syn "env" []) 50 | otherwise = id 31 51 val <- resetT $ local (const env') $ do 32 52 evl <- asks envEval 33 evl ( envBody env')34 retEvalResult fatalval53 evl (trans $ envBody env') 54 retEvalResult (maybe False id flag) val 35 55 36 56 retEvalResult :: Bool -> Val -> Eval Val 37 retEvalResult fatal val = do57 retEvalResult external val = do 38 58 glob <- askGlobal 39 59 errSV <- findSymRef "$!" glob 40 60 case val of 41 VError str _ | not fatal -> do61 VError str _ | not external -> do 42 62 writeRef errSV (VStr str) 43 63 retEmpty
