Changeset 8226 for src/Pugs/Prim/Eval.hs
- Timestamp:
- 12/13/05 20:35:53 (3 years ago)
- Files:
-
- 1 modified
-
src/Pugs/Prim/Eval.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Prim/Eval.hs
r8077 r8226 30 30 opRequire :: Bool -> Val -> Eval Val 31 31 opRequire dumpEnv v = do 32 file<- fromVal v32 mod <- fromVal v 33 33 incs <- fromVal =<< readVar "@*INC" 34 34 glob <- askGlobal 35 35 seen <- findSymRef "%*INC" glob 36 36 loaded <- existsFromRef seen v 37 let file = (concat $ intersperse "/" $ split "::" mod) ++ ".pm" 37 38 pathName <- requireInc incs file (errMsg file incs) 38 39 if loaded then opEval style pathName "" else do 39 -- %*INC{ file} = pathname40 -- %*INC{mod} = { relname => file, pathname => pathName } 40 41 evalExp $ Syn "=" 41 [ Syn "{}" 42 [ Var "%*INC", Val . VStr $ decodeUTF8 file ] 43 , Val . VStr $ decodeUTF8 pathName 42 [ Syn "{}" -- subscript 43 [ Var "%*INC", Val . VStr $ decodeUTF8 mod ] 44 , Syn "\\{}" -- hashref 45 [ Syn "," [ mkStrPair "pathname" (decodeUTF8 pathName) 46 , mkStrPair "relname" (decodeUTF8 file) ] 47 ] 44 48 ] 45 49 str <- liftIO $ readFile pathName … … 51 55 else EvalResultLastValue)} 52 56 errMsg file incs = "Can't locate " ++ file ++ " in @*INC (@*INC contains: " ++ unwords incs ++ ")." 57 mkStrPair :: String -> String -> Exp 58 mkStrPair key val = App (Var "&infix:=>") Nothing (map (Val . VStr) [key, val]) 53 59 54 60 requireInc :: (MonadIO m) => [FilePath] -> FilePath -> String -> m String
