Commit 6198c5bc authored by John van Groningen's avatar John van Groningen

add functions for searching hierarchical modules in module PmDirCache,

use these functions in the project manager
parent 2e45ef2f
......@@ -33,7 +33,6 @@ import Platform,PlatformObjectIO, IdePlatform
import PmDriver
import StdSystem, StdClipboard
//import dodebug
//trace_n m f :== trace_n` m f
trace_n _ f :== f
......@@ -852,7 +851,7 @@ OpenModuleNoSel pathname ps
# srcpaths = case IsABCPathname pathname of
True -> Map MakeSystemPathname srcpaths
_ -> srcpaths
# ((ok,fullpath),ps) = accFiles (SearchDisk False pathname srcpaths) ps
# ((ok,fullpath),ps) = accFiles (SearchDisk pathname srcpaths) ps
| not ok
= okNotice
[ "Clean Project Manager"
......@@ -871,7 +870,7 @@ OpenModule pathname sel ps
# srcpaths = case IsABCPathname pathname of
True -> Map MakeSystemPathname srcpaths
_ -> srcpaths
# ((ok,fullpath),ps) = accFiles (SearchDisk False pathname srcpaths) ps
# ((ok,fullpath),ps) = accFiles (SearchDisk pathname srcpaths) ps
| not ok
= okNotice
[ "Clean Project Manager"
......
......@@ -625,7 +625,7 @@ exists_module pathname ps
# srcpaths = case IsABCPathname pathname of
True -> Map MakeSystemPathname srcpaths
_ -> srcpaths
# ((ok,fullpath),ps) = accFiles (SearchDisk False pathname srcpaths) ps
# ((ok,fullpath),ps) = accFiles (SearchDisk pathname srcpaths) ps
= (ok,GetLongPathName fullpath,ps)
// pm_set: set main module
......@@ -848,7 +848,7 @@ findModule pathname ps
# srcpaths = case IsABCPathname pathname of
True -> Map MakeSystemPathname srcpaths
_ -> srcpaths
# ((ok,fullpath),ps) = accFiles (SearchDisk False pathname srcpaths) ps
# ((ok,fullpath),ps) = accFiles (SearchDisk pathname srcpaths) ps
| not ok
= (Nothing, ps)
# fullpath` = GetLongPathName fullpath
......
......@@ -420,7 +420,7 @@ where
# text = {t \\ t <- text}
= accFiles (FindDefinitionInText imp rest cleanid text) ps
= accFiles (FindDefinitionInFile imp rest cleanid modname) ps
# ((ok,path),ps) = accFiles (SearchDisk False modname (AppendLists prjpaths syspaths)) ps
# ((ok,path),ps) = accFiles (SearchDisk modname (AppendLists prjpaths syspaths)) ps
| ok
# (win,ps) = IsOpen path ps
| isJust win
......@@ -498,7 +498,7 @@ where
# text = {t \\ t <- text}
= accFiles (FindIdentifiersInText imp rest cleanid text) pstate
= accFiles (FindIdentifiersInFile imp rest cleanid modname) pstate
# ((ok,path), pstate) = accFiles (SearchDisk False modname (AppendLists prjpaths syspaths)) pstate
# ((ok,path), pstate) = accFiles (SearchDisk modname (AppendLists prjpaths syspaths)) pstate
| ok
# (win,pstate) = IsOpen path pstate
| isJust win
......
......@@ -16,9 +16,12 @@ DC_Setup :: !(List Pathname) !*Files -> (!(![String],![Warn],!.DirCache),!*Files
DC_Search :: !Modulename !*DirCache -> *(!Bool,!Pathname,!DateTime,!*DirCache)
// Find file in directory cache
DC_HSearch :: !Modulename !String !*DirCache !*Files -> *(!Bool,!Pathname,!DateTime,!*DirCache,!*Files)
DC_Update :: !.(String,String,DateTime) !*DirCache -> *DirCache
DC_Update :: !(!String,!String,!DateTime) !*DirCache -> *DirCache
// Update directory cache
DC_HUpdate :: !(!String,!String,!DateTime) !String !*DirCache !*Files -> (!*DirCache,!*Files)
SearchDisk :: !Bool !Modulename !(List Pathname) !*Files -> ((!Bool,!Pathname),!*Files)
SearchDisk :: !Modulename !(List Pathname) !*Files -> (!(!Bool,!Pathname),!*Files)
// Find file in paths (no caching)
FindHModule :: !Modulename !{#Char} !(List Pathname) !*Files -> (!(!Bool,!Pathname),!*Files)
......@@ -2,50 +2,93 @@ implementation module PmDirCache
// Search paths for a file
import StdArray, StdBool, StdEnum, StdList, StdOrdList
import StdFile, StdMaybe
import StdArray,StdBool,StdEnum,StdList,StdFile,StdOrdList,StdStrictLists,StdMaybe
from StdLibMisc import :: Date{..}, :: Time{..}
import Directory
import UtilStrictLists, PmPath, UtilIO
import Platform
:: DirCacheElem :== (String,String,DateTime) // module name, module path, module modified
:: DirCache :== {(String,String,DateTime)} // module name, module path, module modified
:: SimpleDirCache :== {!DirCacheElem}
emptyDateTime :== ({year=0,month=0,day=0,dayNr=0},{hours=0,minutes=0,seconds=0})
:: SubdirElem = { subdir_name :: !{#Char}, subdir_cache :: !.SimpleDirCache}
:: SubdirCache :== {#.SubdirElem}
:: DirCache = { root :: !.SimpleDirCache, subdirs :: !.SubdirCache, paths :: ![#Pathname!] }
:: Warn = Warn String String [(String,String,DateTime)]
emptyDateTime :== ({year=0,month=0,day=0,dayNr=0},{hours=0,minutes=0,seconds=0})
DC_Setup :: !(List Pathname) !*Files -> (!(![String],![Warn],!.DirCache),!*Files)
DC_Setup paths files
# paths = RemoveDup paths
# ((err,cache),files) = setup paths files
# cache = sortBy (\(l,_,_) (r,_,_) -> l<r) cache
// must remove duplicates otherwise binsearch gives errors...
# (wrn,cache) = removedups cache
= ((err,wrn,{dir \\ dir <- cache}),files)
# paths = remove_dup_paths paths
# paths = [|winfix path \\ path<|-paths] // local hack to fix dir names
# (err,files_in_dir,files) = setup paths files
# (wrn,cache) = make_dir_cache files_in_dir
# dir_cache = {root = cache, subdirs={}, paths=paths}
= ((err,wrn,dir_cache),files)
where
setup Nil files
= (([],[]),files)
setup (path:!paths) files
# path = winfix path // local hack to fix dir names
remove_dup_paths :: (List Pathname) -> *[#Pathname!]
remove_dup_paths paths
= u_reverse (remove_dup_paths_reversed paths [|]) [|]
where
remove_dup_paths_reversed :: !(List {#Char}) !*[#{#Char}!] -> *[#{#Char}!]
remove_dup_paths_reversed (path:!paths) unique_paths
| occurs_in path unique_paths
= remove_dup_paths_reversed paths unique_paths
= remove_dup_paths_reversed paths [|path:unique_paths]
where
occurs_in path [|path_e:paths]
= path==path_e || occurs_in path paths
occurs_in path [|]
= False
remove_dup_paths_reversed Nil unique_paths
= unique_paths
u_reverse :: *[#{#Char}!] *[#{#Char}!] -> *[#{#Char}!]
u_reverse [|] r = r
u_reverse [|e:l] r = u_reverse l [|e:r]
setup [|] files
= ([],[],files)
setup [|path:paths] files
# ((ok,path`),files) = pd_StringToPath path files
| not ok
# ((errs,cache),files) = setup paths files
= (([path:errs],cache),files)
# (errs,cache,files) = setup paths files
= ([path:errs],cache,files)
# ((err,dir),files) = getDirectoryContents path` files
| err <> NoDirError
# ((errs,cache),files) = setup paths files
= (([path:errs],cache),files)
# dir = map getinfo dir // only need common fileinfo...
# dir = filter (\(b,_,_)->not b) dir
# dir = map (\(_,n,m)->(n,path,m)) dir
# ((errs,cache),files) = setup paths files
# (errs,cache,files) = setup paths files
= ([path:errs],cache,files)
# dir = [(fileName,path,lastModified)
\\ {fileName,fileInfo={pi_fileInfo={lastModified,isDirectory}}} <- dir
| not isDirectory]
# (errs,cache,files) = setup paths files
# cache = dir ++ cache
= ((errs,cache),files)
= (errs,cache,files)
//removedups :: !.[(String,String,DateTime)] -> .[(String,String,DateTime)]
//winfix :: renames root directories
winfix s = PlatformDependant
(/*Win*/ if (size s > 0 && s.[size s - 1] == ':') (s +++. "\\") (s))
(/*Mac*/ if (findPos ':' s 0 == ~1) (s +++. ":") (s))
findPos c s i
| i >= size s = ~1
| s.[i] == c = i
= findPos c s (inc i)
make_dir_cache :: [DirCacheElem] -> (![Warn],!*SimpleDirCache)
make_dir_cache cache
# cache = sortBy (\(l,_,_) (r,_,_) -> l<r) cache
// must remove duplicates otherwise binsearch gives errors...
# (wrn,cache) = removedups cache
= (wrn,{dir \\ dir<-cache})
where
removedups :: ![DirCacheElem] -> ([Warn],[DirCacheElem])
removedups [x=:(".DS_Store",_,_):xs]
= removedups xs
removedups [x=:(l,p,_):xs]
......@@ -57,106 +100,204 @@ where
= ([Warn l p wrn:wrn`],[x:xs])
removedups _ = ([],[])
//dropWarn :: (a -> .Bool) !u:[a] -> u:[a]
dropWarn :: (a -> Bool) ![a] -> ([a],[a])
dropWarn f cons=:[a:x] | f a # (wrn,x) = dropWarn f x
= ([a:wrn],x)
= ([],cons)
dropWarn f [] = ([],[])
//winfix :: renames root directories
winfix s = PlatformDependant
(/*Win*/ if (size s > 0 && s.[size s - 1] == ':') (s +++. "\\") (s))
(/*Mac*/ if (findPos ':' s 0 == ~1) (s +++. ":") (s))
findPos c s i
| i >= size s = ~1
| s.[i] == c = i
= findPos c s (inc i)
getinfo {fileName,fileInfo=fi=:{pi_fileInfo=dummyname=:{lastModified,isDirectory}}}
= (isDirectory,fileName,lastModified)
DC_Update :: !.(String,String,DateTime) !*DirCache -> *DirCache
DC_Update (n`,p`,m`) cache
# (maxi,cache) = usize cache
DC_Update :: !(!String,!String,!DateTime) !*DirCache -> *DirCache
DC_Update (n`,p`,m`) dir_cache=:{root=cache}
# cache = update_dir_cache (n`,p`,m`) cache
= {dir_cache & root=cache}
DC_HUpdate :: !(!String,!String,!DateTime) !String !*DirCache !*Files -> (!*DirCache,!*Files)
DC_HUpdate (n`,p`,m`) file_ext dir_cache=:{root=cache,subdirs,paths} files
# last_dot_i = find_last_dot_i n`
| last_dot_i<0
# cache = update_dir_cache (n`,p`,m`) cache
= ({dir_cache & root=cache},files)
# (subdir_name,file_name) = subdir_and_file_name_of_hmodule_name last_dot_i n` file_ext
(found,subdir_i,subdirs) = bin_search_subdir subdir_name subdirs
| found
# (subdir,subdirs) = subdirs![subdir_i]
cache = update_dir_cache (n`,p`,m`) subdir.subdir_cache
subdirs & [subdir_i]={subdir & subdir_cache=cache}
= ({dir_cache & subdirs=subdirs},files)
# (errs,files_in_dir,files) = setup_h paths subdir_name files
(wrn,cache) = make_dir_cache files_in_dir
cache = update_dir_cache (n`,p`,m`) cache
new_subdirs = add_subdir subdir_i subdir_name cache subdirs
= ({dir_cache & subdirs=new_subdirs},files)
update_dir_cache :: !(!String,!String,!DateTime) !*SimpleDirCache -> *SimpleDirCache
update_dir_cache (n`,p`,m`) cache
# (maxi,cache) = usize cache
= binsearch 0 maxi maxi cache
where
binsearch :: !Int !Int !Int !*DirCache -> *DirCache
binsearch :: !Int !Int !Int !*SimpleDirCache -> *SimpleDirCache
binsearch left right max cache
| left >= right
# newcache = createArray (inc max) (n`,p`,m`)
# (newcache,cache) = copy (dec right) newcache cache 0 0
# (newcache,cache) = copy (max - right) newcache cache (inc right) right
= newcache
# mid = (left+right)/2
# ((n,p,m),cache) = uselect cache mid
# mid = (left+right)>>1
# ((n,p,m),cache) = cache![mid]
| n` == n
= update cache mid (n`,p`,m`)
= {cache & [mid]=(n`,p`,m`)}
| n` < n
= binsearch left mid max cache
// n` > n
= binsearch (inc mid) right max cache
copy :: !Int !*DirCache !*DirCache !Int !Int -> (!*DirCache, !*DirCache)
copy :: !Int !*SimpleDirCache !*SimpleDirCache !Int !Int -> (!*SimpleDirCache, !*SimpleDirCache)
copy num new old newbegin oldbegin
| num <= 0 = (new,old)
# (e,old) = uselect old oldbegin
# new = update new newbegin e
# (e,old) = old![oldbegin]
# new = {new & [newbegin]=e}
= copy (dec num) new old (inc newbegin) (inc oldbegin)
find_last_dot_i :: !{#Char} -> Int
find_last_dot_i s
= find_last_dot_i s (size s-1)
where
find_last_dot_i s i
| i>=0
| s.[i]=='.'
= i
= find_last_dot_i s (i-1)
= i
concat_paths path subdir
# size_path=size path
| size_path>0 && path.[size_path-1]==DirSeparator
= path+++subdir
= path+++DirSeparatorString+++subdir
DC_Search :: !Modulename !*DirCache -> *(!Bool,!Pathname,!DateTime,!*DirCache)
DC_Search mod cache
# (maxi,cache) = usize cache
= binsearch 0 maxi mod cache
DC_Search mod dir_cache=:{root=cache}
# (found,path_name,date_time,cache) = bin_search_file mod cache
= (found,path_name,date_time,{dir_cache & root=cache})
DC_HSearch :: !Modulename !String !*DirCache !*Files -> *(!Bool,!Pathname,!DateTime,!*DirCache,!*Files)
DC_HSearch mod file_ext dir_cache=:{root=cache,subdirs,paths} files
# last_dot_i = find_last_dot_i mod
| last_dot_i<0
# (found,path_name,date_time,cache) = bin_search_file (mod+++file_ext) cache
= (found,path_name,date_time,{dir_cache & root=cache},files)
# (subdir_name,file_name) = subdir_and_file_name_of_hmodule_name last_dot_i mod file_ext
(found,subdir_i,subdirs) = bin_search_subdir subdir_name subdirs
| found
# (subdir,subdirs) = subdirs![subdir_i]
(found,path_name,date_time,cache) = bin_search_file file_name subdir.subdir_cache
subdirs & [subdir_i]={subdir & subdir_cache=cache}
= (found,path_name,date_time,{dir_cache & subdirs=subdirs},files)
# (errs,files_in_dir,files) = setup_h paths subdir_name files
(wrn,cache) = make_dir_cache files_in_dir
(found,path_name,date_time,cache) = bin_search_file file_name cache
new_subdirs = add_subdir subdir_i subdir_name cache subdirs
= (found,path_name,date_time,{dir_cache & subdirs=new_subdirs},files)
setup_h :: ![#{#Char}!] !{#Char} !*Files -> *(![{#Char}],![DirCacheElem],!*Files)
setup_h [|] subdir files
= ([],[],files)
setup_h [|path:paths] subdir files
# subdir_path = concat_paths path subdir
# ((ok,path`),files) = pd_StringToPath subdir_path files
| not ok
# (errs,cache,files) = setup_h paths subdir files
= ([subdir_path:errs],cache,files)
# ((err,dir),files) = getDirectoryContents path` files
| err <> NoDirError
# (errs,cache,files) = setup_h paths subdir files
= ([subdir_path:errs],cache,files)
# dir = [(fileName,path,lastModified)
\\ {fileName,fileInfo={pi_fileInfo={lastModified,isDirectory}}} <- dir
| not isDirectory]
# (errs,cache,files) = setup_h paths subdir files
# cache = dir ++ cache
= (errs,cache,files)
add_subdir :: !Int !{#Char} !{!DirCacheElem} !*{#SubdirElem} -> *{#SubdirElem}
add_subdir subdir_i subdir_name cache subdirs
# (n_subdirs,subdirs) = usize subdirs
new_subdirs={{subdir_name="",subdir_cache={}} \\ i<-[0..n_subdirs]}
(new_subdirs,subdirs) = move_begin_elements 0 subdir_i new_subdirs subdirs
new_subdirs & [subdir_i]={subdir_name=subdir_name, subdir_cache=cache}
= move_end_elements_to_next subdir_i new_subdirs subdirs
where
move_begin_elements :: !Int !Int !*SubdirCache !*SubdirCache -> (!*SubdirCache,!*SubdirCache)
move_begin_elements i max_i d_a s_a
| i<max_i
# (e,s_a) = replace s_a i {subdir_name="",subdir_cache={}}
# d_a & [i]=e
= move_begin_elements (i+1) max_i d_a s_a
= (d_a,s_a)
move_end_elements_to_next :: !Int !*SubdirCache !*SubdirCache -> *SubdirCache
move_end_elements_to_next i d_a s_a
| i<size s_a
# (e,s_a) = replace s_a i {subdir_name="",subdir_cache={}}
# d_a & [i+1]=e
= move_end_elements_to_next (i+1) d_a s_a
= d_a
bin_search_file :: !Modulename !*SimpleDirCache -> *(!Bool,!Pathname,!DateTime,!*SimpleDirCache)
bin_search_file mod cache
# (cache_size,cache) = usize cache
= bin_search_file 0 cache_size mod cache
where
binsearch left right mod cache
bin_search_file :: !Int !Int !Modulename !*SimpleDirCache -> *(!Bool,!Pathname,!DateTime,!*SimpleDirCache)
bin_search_file left right mod cache
| left >= right
= (False,"",emptyDateTime,cache)
# mid = (left+right)/2
# ((n,p,m),cache) = uselect cache mid
# mid = (left+right)>>1
# ((n,p,m),cache) = cache![mid]
| mod == n
= (True,p,m,cache)
| mod < n
= binsearch left mid mod cache
= bin_search_file left mid mod cache
// mod > n
= binsearch (inc mid) right mod cache
= bin_search_file (inc mid) right mod cache
//--
SearchDisk :: !Bool !Modulename !(List Pathname) !*Files -> ((!Bool,!Pathname),!*Files)
SearchDisk def_and_imp modname dirs disk
= SearchDisk2 def_and_imp modname modname2 dirs disk
where
modname2 | not def_and_imp = modname
| IsDefPathname modname = MakeImpPathname modname
= MakeDefPathname modname
SearchDisk2 :: !Bool !Modulename !Modulename !(List Pathname) !*Files -> ((!Bool,!Pathname),!*Files)
SearchDisk2 def_and_imp modname1 modname2 Nil disk
= ((False, EmptyPathname),disk)
SearchDisk2 def_and_imp modname1 modname2 (dir:!rest) disk
# dir_modname1 = MakeFullPathname dir modname1
# (exists,disk) = FExists dir_modname1 disk
| exists
= ((True, dir_modname1),disk)
| not def_and_imp
= SearchDisk2 def_and_imp modname1 modname2 rest disk
# dir_modname2 = MakeFullPathname dir modname2
# (exists,disk) = FExists dir_modname2 disk
| exists
= ((True, dir_modname1),disk)
= SearchDisk2 def_and_imp modname1 modname2 rest disk
//--
instance toString DirError
bin_search_subdir subdir_name subdirs
# (n_subdirs,subdirs) = usize subdirs
= bin_search_subdir 0 n_subdirs subdir_name subdirs
where
toString NoDirError = "NoDirError"
toString DoesntExist = "DoesntExist"
toString BadName = "BadName"
toString NotEnoughSpace = "NotEnoughSpace"
toString AlreadyExists = "AlreadyExists"
toString NoPermission = "NoPermission"
toString MoveIntoOffspring = "MoveIntoOffspring"
toString MoveAcrossDisks = "MoveAcrossDisks"
toString NotYetRemovable = "NotYetRemovable"
toString OtherDirError = "OtherDirError"
bin_search_subdir :: !Int !Int !{#Char} !*SubdirCache -> *(!Bool,!Int,!*SubdirCache)
bin_search_subdir left right subdir cache
| left >= right
= (False,right,cache)
# mid = (left+right)>>1
# (subdir_name,cache) = cache![mid].subdir_name
| subdir == subdir_name
= (True,mid,cache)
| subdir < subdir_name
= bin_search_subdir left mid subdir cache
// subdir > subdir_name
= bin_search_subdir (inc mid) right subdir cache
SearchDisk :: !Modulename !(List Pathname) !*Files -> (!(!Bool,!Pathname),!*Files)
SearchDisk modname dirs files
= SearchDisk2 modname dirs files
FindHModule :: !Modulename !{#Char} !(List Pathname) !*Files -> (!(!Bool,!Pathname),!*Files)
FindHModule module_name file_ext dirs files
# last_dot_i = find_last_dot_i module_name
| last_dot_i<0
= SearchDisk2 (module_name+++file_ext) dirs files
# (subdir_name,file_name) = subdir_and_file_name_of_hmodule_name last_dot_i module_name file_ext
# dirs = Map (\dir->concat_paths dir subdir_name) dirs
= SearchDisk2 file_name dirs files
SearchDisk2 :: !Modulename !(List Pathname) !*Files -> (!(!Bool,!Pathname),!*Files)
SearchDisk2 modname Nil files
= ((False, EmptyPathname),files)
SearchDisk2 modname (dir:!rest) files
# dir_modname1 = MakeFullPathname dir modname
# (exists,files) = FExists dir_modname1 files
| exists
= ((True, dir_modname1),files)
= SearchDisk2 modname rest files
......@@ -115,8 +115,8 @@ GenAsmProjectModule imp_pathname project setproject ps
:: *DriverState
= DInit !Bool !Project !MTPContinuation
| DComp !Bool !*DirCache !DriverCompilingInfo ![!ModuleDirAndName] !DriverStateRecord
| DGene ![!ModuleDirAndName] !DriverCodeGenerationInfo !DriverStateRecord
| DQuitCompilers ![!ModuleDirAndName] !DriverCompilingInfo !DriverStateRecord
| DGene ![!ModuleDirAndName] !DriverCodeGenerationInfo !DriverStateRecord
| DLink !DriverStateRecord
| DDone
......@@ -987,6 +987,8 @@ compiling_info_async []
compiling_info_async current
= foldl (\s c -> s +++ " "+++c.iclModule.mdn_name) "Compiling:" current
AccTuple4 f s1 :== let (e1,e2,e3,s2) = f s1 in ((e1,e2,e3),s2)
// Scan modified modules and update the dependencies (recompile if necessary).
UpdateDependencies :: !Bool !ModuleDirAndName ![!ModuleDirAndName] !DriverCompilingInfo !*DirCache !DriverStateRecord !*GeneralSt
-> (*GeneralSt,*DirCache,Bool,Bool,[!ModuleDirAndName],DriverCompilingInfo,DriverStateRecord,Bool)
......@@ -1037,14 +1039,13 @@ UpdateDependencies force mdn rest compinfo dircache ds ps`
// can actually only occur when failed to open .abc file...
# ps = showInfo line ps
= (ps,dircache,False,False,rest,compinfo,ds,False)
# (ok,paths,dircache)
= LookupModulePaths mods dircache
# ((ok,paths,dircache),ps) = accFiles (AccTuple4 (LookupModulePaths mods dircache)) ps
| not ok
# line = Level3 ["Error: '" +++ (Hd paths).mdn_name +++ "' not found."]
# ps = showInfo line ps
= (ps,dircache,False,False,rest,compinfo,ds,False)
#! rest = rest++|paths
#! project = PR_AddABCInfo mdn objs libs defaultCO defeo impeo ds.project
#! project = PR_AddABCInfo mdn objs libs defaultCO ds.project
ds = {ds & project = project, modpaths = [!mdn : ds.modpaths]}
= (ps, dircache, True, False, rest, compinfo, ds, True)
# line = Level3 ["Error: System file: '" +++ module_name +++ "' could not be patched."]
......@@ -1057,13 +1058,13 @@ UpdateDependencies force mdn rest compinfo dircache ds ps`
# line = Level3 ["Error: Strange error parsing dependencies: '" +++ info.abcpath +++ "'."]
# ps = showInfo line ps
= (ps,dircache,False,False,rest,compinfo,ds,False)
# (ok,paths,dircache) = LookupModulePaths mods dircache
# ((ok,paths,dircache),ps) = accFiles (AccTuple4 (LookupModulePaths mods dircache)) ps
| not ok
# line = Level3 ["Error: '" +++ (Hd paths).mdn_name +++ "' not found."]
# ps = showInfo line ps
= (ps,dircache,False,False,rest,compinfo,ds,False)
#! rest = paths++|rest
#! project = PR_AddABCInfo mdn objs libs defaultCO defeo impeo ds.project
#! project = PR_AddABCInfo mdn objs libs defaultCO ds.project
ds = {ds & project = project, modpaths = [!mdn : ds.modpaths]}
= (ps, dircache, True, False, rest, compinfo, ds, False)
......@@ -1079,18 +1080,18 @@ UpdateDependencies force mdn rest compinfo dircache ds ps`
# line = Level3 ["Error: Strange error parsing dependencies: '" +++ info.abcpath +++ "'."]
# ps = showInfo line ps
= (ps,dircache,False,False,rest,compinfo,ds,False)
# (okA,whyA,dircache) = check_dependant_dates module_name info.abcpath mods xxx_md xxx_dd dircache
# ((okA,whyA,dircache),ps) = accFiles (AccTuple4 (check_dependant_dates module_name mods xxx_md xxx_dd dircache)) ps
# (use_64_bit_processor,ps) = getCurrent64BitProcessor ps
# (okC,whyC) = check_module_options module_name info co mp tp eod use_64_bit_processor version
| okA && okC
# (ok,paths,dircache) = LookupModulePaths mods dircache
# ((ok,paths,dircache),ps) = accFiles (AccTuple4 (LookupModulePaths mods dircache)) ps
| not ok
# line = Level3 ["Error: '" +++ (Hd paths).mdn_name +++ "' not found."]
# ps = showInfo line ps
= (ps,dircache,False,False,rest,compinfo,ds,False)
#! rest = paths++|rest
#! project = PR_AddABCInfo mdn objs libs co defeo impeo ds.project
#! project = PR_AddABCInfo mdn objs libs co ds.project
ds = {ds & project = project, modpaths = [!mdn : ds.modpaths]}
= (ps,dircache,True,False,rest,compinfo,ds,False)
......@@ -1110,10 +1111,6 @@ where
LM_Dynamic -> True
verbose = prefs.be_verbose
defaultCO = prefs.compopts
eo =
{ newlines = HostNativeNewlineConvention}
defeo = {pos_size = NoWindowPosAndSize, eo = eo}
impeo = {pos_size = NoWindowPosAndSize, eo = eo}
compile_module Sync mdn impname rest co dircache ds ps
= UpdateSyncDependencies mdn rest impname co dircache ds ps
......@@ -1307,7 +1304,7 @@ where
ProcessCompilerMsg cstate _ _ path abcpath SyntaxError fileinfo dircache abccache project ps
= (cstate,(fileinfo,abccache,project, False, False, abcpath,[!],dircache,ps))
ProcessCompilerMsg cstate compileOrCheckSyntax co mdn abcpath CompilerOK fileinfo dircache abccache project ps0
| compileOrCheckSyntax == SyntaxCheck
= (cstate,(fileinfo,abccache,project,True, False,EmptyPathname,[!],dircache,ps))
......@@ -1324,45 +1321,42 @@ ProcessCompilerMsg cstate compileOrCheckSyntax co mdn abcpath CompilerOK fileinf
, abcOptions = abcoptions
}
fileinfo = FI_UpdateFileInfo mdn.mdn_name update fileinfo
# (ok,paths,dircache) = LookupModulePaths mods dircache
# ((ok,paths,dircache),ps) = accFiles (AccTuple4 (LookupModulePaths mods dircache)) ps
| not ok // NO, should fix with add new paths dialogue...