Changeset 3296 for src/Pugs/Prim/Eval.hs

Show
Ignore:
Timestamp:
05/16/05 16:57:02 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
4878
Message:

* use ClassName; ClassName.new is now parsed correctly.
* hence, changing ::Tree.new to Tree.new in Tree's tests.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/Prim/Eval.hs

    r2970 r3296  
    33    op1EvalHaskell, 
    44    opEval, 
     5    opRequire, 
    56    -- used by Pugs.Eval -- needs factored somewhere bettwen 
    67    retEvalResult,  
    78) where 
    8 import Control.Monad.Reader 
    99import Pugs.AST 
    1010import Pugs.Parser 
    1111import Pugs.Embed 
     12import Pugs.Internals 
     13 
     14opRequire :: Bool -> Val -> Eval Val 
     15opRequire 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) 
    1230 
    1331op1EvalHaskell :: Val -> Eval Val 
     
    2543            retEmpty 
    2644 
    27 opEval :: Bool -> String -> String -> Eval Val 
    28 opEval fatal name str = do 
     45opEval :: Maybe Bool -> String -> String -> Eval Val 
     46opEval flag name str = do 
    2947    env <- ask 
    3048    let env' = runRule env id ruleProgram name str 
     49        trans | flag == Just True = (`mergeStmts` Syn "env" []) 
     50              | otherwise         = id 
    3151    val <- resetT $ local (const env') $ do 
    3252        evl <- asks envEval 
    33         evl (envBody env') 
    34     retEvalResult fatal val 
     53        evl (trans $ envBody env') 
     54    retEvalResult (maybe False id flag) val 
    3555 
    3656retEvalResult :: Bool -> Val -> Eval Val 
    37 retEvalResult fatal val = do 
     57retEvalResult external val = do 
    3858    glob <- askGlobal 
    3959    errSV <- findSymRef "$!" glob 
    4060    case val of 
    41         VError str _ | not fatal  -> do 
     61        VError str _ | not external  -> do 
    4262            writeRef errSV (VStr str) 
    4363            retEmpty