亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? getdep.hs

?? Haskell是一種程序語言。特別的
?? HS
字號:
-----------------------------------------------------------------------------
-- |
-- Module      :  GetDep
-- Copyright   :  Thomas Hallgren and Malcolm Wallace
-- 
-- Maintainer  :  Malcolm Wallace <Malcolm.Wallace@cs.york.ac.uk>
-- Stability   :  Stable
-- Portability :  All
--
-- Get the module dependencies, including the ability to output to a
-- Makefile.
-----------------------------------------------------------------------------

module GetDep(showdep,showdebug,showmake,dependency,When,FileInfo) where

import Getmodtime(When(..))
import Imports(getImports)
import FileName
import Unlit(unlit)
import Argv
import PreProcessor
import Config

#if defined(__HBC__)
import FileStat
#endif
#if defined(__HASKELL98__)
import Directory
#endif
import IO
import Time
import List (intersperse)

#if !defined(__HASKELL98__)
#define ioError fail
#endif

showdebug (f,(((tpp,ths,thi,tobj),p,s,cpp,pp),i)) =
  let cppflag = if cpp then "*" else ""
  in show f ++ cppflag ++ "\n  ppTime= " ++ show tpp
                       ++ "\n  hsTime= " ++ show ths
                       ++ "\n  hiTime= " ++ show thi
                       ++ "\n  oTime=  " ++ show tobj
     ++ "\n  p= " ++ show p
     ++ "\n  srcfile= " ++ show s
     ++ "\n  imports= " ++ show i
     ++ "\n  preproc= " ++ show (ppExecutableName pp) ++ "\n"

showdep (f,(((tpp,ths,thi,tobj),p,s,cpp,pp),i)) =
  f ++ ": " ++ mix i ++ "\n"
  where mix = foldr (\a b-> a++' ':b) ""

-- showmake opts goaldir (f,(((ths,thi,tobj),p,s,cpp),i)) =
--   dotO f ++ ": " ++ s ++ " " ++ mix i
--   where mix = foldr (\a b-> dotO a ++ ' ':b) "\n"
--         dotO f = fixFile opts goaldir f (oSuffix opts)

showmake opts goaldir ((f,p,s),i) =
  dotO p f ++ ": " ++ s ++ " " ++ mix i
  where mix = foldr (\(a,p) b-> dotO p a ++ ' ':b) "\n"
        tmod = if hat opts then ("Hat/"++) else id
        dotO p f = fixFile opts (if null goaldir then p else goaldir)
                                (tmod f) (oSuffix opts)

-- | Information about a single file, including its location, whether
--   it needs a preprocessor, etc.
--
-- * file timestamps
--
-- * directory path to file
--
-- * source file name, inc path
--
-- * cpp required?
--
-- * applicable preprocessor
type FileInfo = ( (When,When,When,When)	-- ^ file timestamps
                , FilePath		-- ^ directory path to file
                , FilePath		-- ^ source file name, inc path
                , Bool			-- ^ cpp required?
                , PreProcessor)		-- ^ applicable preprocessor

-- | Given a list of targets, determine all import dependencies by reading
--   the source modules, and checking timestamps etc.
dependency :: DecodedArgs
              -> [( String		-- module name
                  , ( FileInfo		-- timestamps, filepaths, cpp, etc
                    , [String]		-- imports
                    )
                  )]	-- ^ accumulator: (module name, FileInfo, imports)
              -> [(String,FilePath)]	-- ^(module, imported by which file?)
              -> IO [( String		-- module name
                     , ( FileInfo	-- timestamps, filepaths, cpp, etc
                       , [String]	-- imports
                       )
                     )] -- ^ (module name, FileInfo, imports)
dependency opts done [] = return done
dependency opts done ((f,demand):fs) =
  if f `elem` (ignoreHi opts) || f `elem` (map fst done)
   then dependency opts done fs
   else readFirst opts f demand >>= \res ->
         case res of 
           Nothing -> dependency opts done fs	-- a Prelude/StdLib file
           Just (times,path,source,preproc,plainfile,unlitfile) ->
               let
                   cpp = hash ('\n':plainfile)
                   hash ('\n':'#':_) = True
                   hash (_:xs)       = hash xs
                   hash  []          = False
                   i = filter (`notElem` (ignoreHi opts))
                              (getImports source (zdefs opts ++ defs opts)
                                          (pathSrc opts) unlitfile)
                   moredone = (f,((times,path,source,cpp,preproc),i)):done
                   needed = map (\x->(x,source)) i
               in
{- Originally, the next line was #ifdef sun, but apparently FreeBSD doesn't
   like too many open files either. -}
                  cpp `seq`	-- force read and discard of plainfile
                  dependency opts moredone (needed ++ fs)


-- | Attempt to read the given file from some location within the search path.
--   Determine if it needs any preprocessing, read the timestamps, etc.
--   Basically populates a FileInfo type.
readFirst :: DecodedArgs -> String -> String
             -> IO (Maybe ( (When,When,When,When)	-- file timestamps
                          , FilePath		-- directory path to file
                          , FilePath		-- source file name, inc path
                          , PreProcessor	-- applicable pre-processor
                          , String		-- plain file contents
                          , String		-- unliterated file contents
                          ))
-- ^ (timestamps, path to file, source file name, pp, plain file
--    contents, unliterated file contents)

readFirst opts name demand =
  watch ("readFirst " ++ show (pathSrc opts) ++
              "\n   " ++ show (pathPrel opts)) >>
  rN ("":pathSrc opts)
 where
  ff = fixFileName name
  watch = debug opts

#if defined(__HBC__) && !defined(__HASKELL98__)
  -- this code is obsolete
  -- various changes to hmake have not been tracked here
  rN [] = rP (pathPrel opts) 
  rN (p:ps) =
    let source = fixFile opts p ff "gc"
    in watch ("Trying (N)" ++ source) >>
       catch
         (readFile source >>= \file-> readData p source file ppNone)
         (\_-> let source = fixFile opts p ff "hs"
               in watch ("Trying (N)" ++ source) >>
                  catch
                    (readFile source >>= \file -> readData p source file ppNone)
                    (\_ -> let source = fixFile opts p ff "lhs"
	                   in watch ("Trying (N)" ++ source) >>
                              catch (readFile source >>= \file ->
                                     readData p source (unlit name file) ppNone)
                                    (\_ -> rN ps)))

  rP [] = error ("Can't find module "++name++" in user directories\n\t"++
                 concat (intersperse "\n\t" (".":pathSrc opts))++
                 "\n  Or in installed libraries/packages at\n\t"++
                 concat (intersperse "\n\t" (pathPrel opts))++
                 "\n  Asked for by: "++demand++
                 "\n  Fix using the -I, -P, or -package flags.\n")
  rP (p:ps) =
     let source = fixFile opts p ff (hiSuffix opts)
     in watch ("Trying (P)" ++ source) >>
        catch (readFile source >>= \file -> return Nothing)
              (\_ -> rP ps)
#else
  rN [] = rP (pathPrel opts) 
  rN (p:ps) = try PreProcessor.knownSuffixes
    where try  []  = rN ps
          try ((suf,lit,pp):xs) = do
            let src = fixFile opts p ff suf
            watch ("Trying (N)" ++ src)
            if ppSuitable pp (compilerStyle (compiler opts))
              then do
                ok <- doesFileExist src
                if ok
                  then do
                    watch ("Got (N)" ++ src)
                    readData p src pp (lit name)
                  else try xs
              else try xs

  rP [] = error ("Can't find module "++name++" in user directories\n\t"++
                 concat (intersperse "\n\t" (".":pathSrc opts))++
                 "\n  Or in installed libraries/packages at\n\t"++
                 concat (intersperse "\n\t" (pathPrel opts))++
                 "\n  Asked for by: "++demand++
                 "\n  Fix using the -I, -P, or -package flags.\n")
  rP (p:ps) = do
     let hinterface = fixFile opts p ff (hiSuffix opts)
     watch ("Trying (P)" ++ hinterface)
     ok <- doesFileExist hinterface
     if ok then do
         watch ("Got (P)" ++ hinterface)
         return Nothing
       else rP ps

#endif

  readData :: FilePath -> FilePath -> PreProcessor -> (String->String)
              -> IO (Maybe ( (When,When,When,When)	-- file timestamps
                           , FilePath		-- directory path to file
                           , FilePath		-- source file name, inc path
                           , PreProcessor	-- applicable pre-processor
                           , String		-- plain file contents
                           , String		-- unliterated file contents
                           ))
  readData path source pp lit = do
     tpp  <- readTime source	-- in many cases, identical to `ths' below
     ths  <- readTime (fixFile opts path  (tmod ff) "hs")
     thi  <- readTime (fixFile opts ipath (tmod ff) (hiSuffix opts))
     tobj <- readTime (fixFile opts opath (tmod ff) (oSuffix  opts))
     file <- readFile source
     return (Just ((tpp,ths,thi,tobj),path,source,pp,file,lit file))
   where opath = maybe path id (goalDir opts)
         ipath = maybe path id (hiDir opts)
         tmod = if hat opts then ("Hat/"++) else id


-- | Get the modification time of this file
readTime :: FilePath -> IO When
#ifdef __HBC__
readTime f = catch (getFileStat f >>= \sf->
                    return (At ((st_mtime sf)::ClockTime)))
                   (\_ -> return Never)
#endif
#if defined(__NHC__) || defined (__GLASGOW_HASKELL__)
readTime f = --hPutStr stderr ("readTime "++f++"\n") >>
             doesFileExist f >>= \so->
             if so then getModificationTime f >>= \mt -> return (At mt)
             else return Never
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产在线观看| 夜夜嗨av一区二区三区网页| 丁香一区二区三区| 奇米777欧美一区二区| 亚洲精品videosex极品| 国产精品电影院| 亚洲小少妇裸体bbw| 欧美性欧美巨大黑白大战| 韩国精品久久久| 日本高清视频一区二区| 国产成人综合自拍| 自拍偷在线精品自拍偷无码专区| 久久久久久9999| 成人av在线资源网站| 久久99久久99小草精品免视看| 精品在线观看视频| 99久久国产综合精品麻豆| 久久免费美女视频| 亚洲视频一区二区在线观看| 国产呦精品一区二区三区网站| 国产精品一区在线观看乱码| 国产片一区二区三区| www.综合网.com| 国产亚洲1区2区3区| 懂色av一区二区三区蜜臀| 欧美极品另类videosde| 亚洲一区二区三区激情| 国产成人啪免费观看软件| 91免费版pro下载短视频| 91高清在线观看| 国产亚洲一区二区三区四区| 一区二区三区欧美久久| 亚洲精品一二三| 亚洲一区在线视频观看| 免费在线观看成人| 欧美日韩亚洲综合一区| 国产精品护士白丝一区av| 精品久久久久久亚洲综合网| 欧美日韩综合一区| 亚洲一本大道在线| 色999日韩国产欧美一区二区| 欧美专区日韩专区| 久久精品免费在线观看| 综合电影一区二区三区| 久久99精品一区二区三区三区| 国产精品69毛片高清亚洲| 一本色道久久综合精品竹菊| 精品国产乱码久久久久久闺蜜| 日韩一区二区在线观看| 国产三级精品在线| 国产精品免费人成网站| 中文字幕+乱码+中文字幕一区| 一区二区中文视频| 久久精品国产网站| 欧美一级日韩免费不卡| 亚洲综合无码一区二区| 欧美色视频在线| 亚洲最大色网站| 亚洲视频一二三| 色婷婷久久久亚洲一区二区三区| 韩国v欧美v日本v亚洲v| 日韩高清中文字幕一区| 奇米精品一区二区三区在线观看 | 成人综合婷婷国产精品久久| 国产欧美一区二区精品久导航 | 国产精品一二三四五| 一区在线观看视频| 在线精品视频免费播放| eeuss鲁片一区二区三区在线看| 蜜桃视频在线观看一区二区| 久久久精品免费免费| 国产精品一区免费视频| 久久精品国产澳门| 日韩视频一区二区| 美女视频黄免费的久久| 色综合亚洲欧洲| 美女诱惑一区二区| 久久丝袜美腿综合| 欧美午夜一区二区三区| 99热精品国产| 在线中文字幕一区| 国产精品丝袜黑色高跟| 国产精品久久久久久久久搜平片 | 欧美国产精品中文字幕| 亚洲精品欧美专区| 成人综合婷婷国产精品久久| 91麻豆免费看片| 日本道在线观看一区二区| 欧美性受xxxx黑人xyx| 欧美美女黄视频| 日韩欧美精品在线| 久久亚洲综合av| 伊人性伊人情综合网| 最新高清无码专区| 久色婷婷小香蕉久久| 日本vs亚洲vs韩国一区三区二区| 国产乱人伦偷精品视频不卡| 国产欧美日韩在线观看| 久久精品一区二区| 久久综合色之久久综合| 亚洲国产高清aⅴ视频| 日韩伦理电影网| 亚洲国产一区二区视频| 日本亚洲天堂网| 午夜欧美大尺度福利影院在线看| 丝袜诱惑制服诱惑色一区在线观看 | 久久亚洲一区二区三区明星换脸| 久久青草欧美一区二区三区| 国产精品乱码人人做人人爱| 一区二区三区欧美久久| 精品一区二区三区在线观看| 99国产精品一区| 欧美主播一区二区三区| 日本一区二区三区国色天香| 国产精品影音先锋| 国产精品美女久久久久久久久| 国产亚洲人成网站| 18成人在线观看| 久久精品72免费观看| 欧美人妖巨大在线| 亚洲1区2区3区4区| 国产精品网站一区| 国产精品一二三| 日欧美一区二区| 久久色视频免费观看| 欧美影视一区在线| 成人精品鲁一区一区二区| 日韩经典中文字幕一区| 日本不卡视频在线| 亚洲一区二区综合| 中文字幕久久午夜不卡| 欧美日韩欧美一区二区| 国产原创一区二区| 91天堂素人约啪| 久久国产尿小便嘘嘘| 亚洲一卡二卡三卡四卡五卡| 精品在线一区二区三区| 欧美私人免费视频| 国产精品每日更新在线播放网址 | 国产精品久久看| 粉嫩久久99精品久久久久久夜| 欧美日韩在线播| 天堂午夜影视日韩欧美一区二区| 欧美日韩亚洲综合一区 | 亚洲一区二区在线免费看| 欧美视频一区二| 日韩黄色在线观看| 欧美成人综合网站| 国产精品自拍av| 欧美韩国日本综合| 一本大道久久精品懂色aⅴ| 一区二区三区免费看视频| 欧美日韩综合不卡| 日韩一区欧美二区| 亚洲精品一区二区三区影院| 经典三级在线一区| 中日韩免费视频中文字幕| 97精品电影院| 天堂久久一区二区三区| 亚洲精品一区二区在线观看| 不卡av在线网| 一区二区三区四区乱视频| 欧美高清www午色夜在线视频| 免费成人小视频| 亚洲国产高清不卡| 欧美丝袜丝nylons| 精品一区二区三区影院在线午夜 | 樱桃视频在线观看一区| 欧美男男青年gay1069videost | 成人av电影免费在线播放| 亚洲国产精品视频| 精品久久免费看| 色婷婷综合久久久久中文一区二区 | 国产精品久久毛片a| 欧美日韩电影一区| 国产精品一区二区久久精品爱涩| 成人免费在线播放视频| 欧美麻豆精品久久久久久| 国产精品亚洲第一区在线暖暖韩国 | 久久精品国产99国产| 国产精品另类一区| 欧美理论在线播放| 日韩视频免费观看高清完整版| 国产一区二区三区香蕉| 亚洲综合在线视频| 久久亚洲欧美国产精品乐播| 色一情一伦一子一伦一区| 国产最新精品免费| 亚洲图片有声小说| 日本一区二区免费在线观看视频| 欧美日韩综合在线免费观看| 从欧美一区二区三区| 久久精工是国产品牌吗| 亚洲国产一区二区三区| 亚洲国产精华液网站w| 91麻豆精品国产91久久久久久久久| 成人av资源站| 国产精品91xxx| 久久疯狂做爰流白浆xx| 香蕉成人啪国产精品视频综合网|