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

Show
Ignore:
Timestamp:
06/22/05 20:57:31 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
6641
Message:

* 01-sanity/07-test.t is now working!

Files:
1 modified

Legend:

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

    r4790 r4914  
    22    -- used by Pugs.Prim 
    33    op1EvalHaskell, 
    4     opEval, opEvalfile, 
    5     opRequire, 
     4    opEval, opEvalFile, 
     5    opRequire, requireInc, 
    66    EvalError(..), EvalResult(..), EvalStyle(..), 
    77    -- used by Pugs.Eval -- needs factored somewhere bettwen 
     
    2828opRequire :: Bool -> Val -> Eval Val 
    2929opRequire dumpEnv v = do 
    30     file    <- fromVal v 
    31     incs    <- fromVal =<< readVar "@*INC" 
    32     requireInc incs file (errMsg file incs) 
     30    file        <- fromVal v 
     31    incs        <- fromVal =<< readVar "@*INC" 
     32    pathName    <- requireInc incs file (errMsg file incs) 
     33    -- %*INC{file} = pathname 
     34    evalExp $ Syn "=" 
     35        [ Syn "{}" 
     36            [ Var "%*INC", Val . VStr $ decodeUTF8 file ] 
     37            , Val . VStr $ decodeUTF8 pathName 
     38        ] 
     39    str         <- liftIO $ readFile pathName 
     40    opEval style pathName (decodeUTF8 str) 
    3341    where 
    3442    style = MkEvalStyle 
     
    3745                                           else EvalResultLastValue)} 
    3846    errMsg file incs = "Can't locate " ++ file ++ " in @*INC (@*INC contains: " ++ unwords incs ++ ")." 
    39     requireInc [] _ msg = fail msg 
    40     requireInc (p:ps) file msg = do 
    41         let pathName = p ++ "/" ++ file 
    42         ok <- liftIO $ doesFileExist pathName 
    43         if (not ok) 
    44             then requireInc ps file msg 
    45             else do 
    46                 -- %*INC{file} = pathname 
    47                 evalExp $ 
    48                     Syn "=" [ Syn "{}" [ Var "%*INC", Val . VStr $ decodeUTF8 file ] 
    49                             , Val . VStr $ decodeUTF8 pathName 
    50                             ] 
    51                 str <- liftIO $ readFile pathName 
    52                 opEval style pathName (decodeUTF8 str) 
    5347 
    54 opEvalfile :: String -> Eval Val 
    55 opEvalfile filename = do 
     48requireInc :: (MonadIO m) => [FilePath] -> FilePath -> String -> m String  
     49requireInc [] _ msg = fail msg 
     50requireInc (p:ps) file msg = do 
     51    let pathName = p ++ "/" ++ file 
     52    ok <- liftIO $ doesFileExist pathName 
     53    if (not ok) 
     54        then requireInc ps file msg 
     55        else return pathName 
     56 
     57opEvalFile :: String -> Eval Val 
     58opEvalFile filename = do 
    5659    ok <- liftIO $ doesFileExist filename 
    5760    if (not ok)