Changeset 4914
- Timestamp:
- 06/22/05 20:57:31 (4 years ago)
- svk:copy_cache_prev:
- 6641
- Location:
- src
- Files:
-
- 4 modified
-
Main.hs (modified) (3 diffs)
-
Pugs/Compile/PIR.hs (modified) (1 diff)
-
Pugs/Prim.hs (modified) (1 diff)
-
Pugs/Prim/Eval.hs (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Main.hs
r4913 r4914 29 29 import Pugs.Trans 30 30 import Pugs.Embed 31 import Pugs.Prim.Eval (requireInc) 31 32 import qualified Data.Map as Map 32 33 import Data.IORef … … 74 75 75 76 run ("-C":backend:"-e":prog:_) = doCompileDump backend "-e" prog 76 run ("-C":backend:file:_) = readFile file >>= doCompileDump backend file77 run ("-C":backend:file:_) = slurpFile file >>= doCompileDump backend file 77 78 78 79 run ("-B":backend:"-e":prog:_) = doCompileRun backend "-e" prog 79 run ("-B":backend:file:_) = readFile file >>= doCompileRun backend file80 run ("-B":backend:file:_) = slurpFile file >>= doCompileRun backend file 80 81 81 82 run ("--external":mod:"-e":prog:_) = doExternal mod "-e" prog … … 312 313 writeFile "a.pir" pir 313 314 evalParrotFile "a.pir" 315 316 slurpFile :: FilePath -> IO String 317 slurpFile file = do 318 prog <- readFile file 319 libs <- getLibs 320 file <- expandInc libs prog 321 -- writeFile "ZZZ" file 322 return file 323 where 324 expandInc :: [FilePath] -> String -> IO String 325 expandInc incs str = case breakOnGlue "\nuse " str of 326 Nothing -> return str 327 Just (pre, post) -> do 328 let (mod, (_:rest)) = span isAlphaNum (dropWhile isSpace post) 329 mod' <- includeInc incs mod 330 rest' <- expandInc incs rest 331 return $ pre ++ mod' ++ rest' 332 includeInc :: [FilePath] -> String -> IO String 333 includeInc _ ('v':_) = return [] 334 includeInc incs name = do 335 let name' = concat (intersperse "/" names) ++ ".pm" 336 names = split "::" name 337 pathName <- requireInc incs name' (errMsg name incs) 338 readFile pathName 339 errMsg file incs = "Can't locate " ++ file ++ " in @*INC (@*INC contains: " ++ unwords incs ++ ")." 340 -
src/Pugs/Compile/PIR.hs
r4913 r4914 114 114 rhsC <- trans rhs 115 115 return $ lhsC `KEYED` rhsC 116 trans (PApp cxtfun args) = do116 trans (PApp _ fun args) = do 117 117 funC <- trans fun {- case fun of 118 118 PExp (PVar name) -> return $ lit name -
src/Pugs/Prim.hs
r4868 r4914 253 253 op1 "evalfile" = \v -> do 254 254 filename <- fromVal v 255 opEval file filename255 opEvalFile filename 256 256 op1 "Pugs::Internals::eval_perl5" = \v -> do 257 257 str <- fromVal v -
src/Pugs/Prim/Eval.hs
r4790 r4914 2 2 -- used by Pugs.Prim 3 3 op1EvalHaskell, 4 opEval, opEval file,5 opRequire, 4 opEval, opEvalFile, 5 opRequire, requireInc, 6 6 EvalError(..), EvalResult(..), EvalStyle(..), 7 7 -- used by Pugs.Eval -- needs factored somewhere bettwen … … 28 28 opRequire :: Bool -> Val -> Eval Val 29 29 opRequire 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) 33 41 where 34 42 style = MkEvalStyle … … 37 45 else EvalResultLastValue)} 38 46 errMsg file incs = "Can't locate " ++ file ++ " in @*INC (@*INC contains: " ++ unwords incs ++ ")." 39 requireInc [] _ msg = fail msg40 requireInc (p:ps) file msg = do41 let pathName = p ++ "/" ++ file42 ok <- liftIO $ doesFileExist pathName43 if (not ok)44 then requireInc ps file msg45 else do46 -- %*INC{file} = pathname47 evalExp $48 Syn "=" [ Syn "{}" [ Var "%*INC", Val . VStr $ decodeUTF8 file ]49 , Val . VStr $ decodeUTF8 pathName50 ]51 str <- liftIO $ readFile pathName52 opEval style pathName (decodeUTF8 str)53 47 54 opEvalfile :: String -> Eval Val 55 opEvalfile filename = do 48 requireInc :: (MonadIO m) => [FilePath] -> FilePath -> String -> m String 49 requireInc [] _ msg = fail msg 50 requireInc (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 57 opEvalFile :: String -> Eval Val 58 opEvalFile filename = do 56 59 ok <- liftIO $ doesFileExist filename 57 60 if (not ok)
