aboutsummaryrefslogtreecommitdiff
path: root/main/compile.icl
diff options
context:
space:
mode:
authorjohnvg2000-10-03 14:38:42 +0000
committerjohnvg2000-10-03 14:38:42 +0000
commit162cd3bbfc513df5c5d72457f6be4fffc5de9915 (patch)
treeb834dbd9d419f3edd8974bb1e6041eb10d73f161 /main/compile.icl
parentcomment before import RWSDebug (diff)
pass dcl cache using DclCache type
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@244 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'main/compile.icl')
-rw-r--r--main/compile.icl144
1 files changed, 64 insertions, 80 deletions
diff --git a/main/compile.icl b/main/compile.icl
index 3ec85dd..0e47e3d 100644
--- a/main/compile.icl
+++ b/main/compile.icl
@@ -4,49 +4,47 @@ import StdEnv
import frontend
import backendinterface
import CoclSystemDependent
-import RWSDebug
+//import RWSDebug
:: CoclOptions =
{
- moduleName
- :: {#Char}
- , pathName ::
- {#Char}
- , errorPath
- :: {#Char}
- , errorMode
- :: Int
- , outPath
- :: {#Char}
- , outMode
- :: Int
- , searchPaths
- :: SearchPaths
+ moduleName:: {#Char}
+ , pathName ::{#Char}
+ , errorPath:: {#Char}
+ , errorMode:: Int
+ , outPath:: {#Char}
+ , outMode:: Int
+ , searchPaths:: SearchPaths
}
InitialCoclOptions =
- { moduleName
- = ""
- , pathName
- = ""
- , errorPath
- = "errors"
- , errorMode
- = FWriteText
- , outPath
- = "out"
- , outMode
- = FWriteText
- , searchPaths
- = {sp_locations = [], sp_paths = []}
+ { moduleName= ""
+ , pathName= ""
+ , errorPath= "errors"
+ , errorMode= FWriteText
+ , outPath= "out"
+ , outMode= FWriteText
+ , searchPaths= {sp_locations = [], sp_paths = []}
}
-compile :: [{#Char}] *Files -> (!Bool, !*Files)
-compile args files
- # (args_without_modules,modules,cocl_options) = parseCommandLine args InitialCoclOptions
- # heaps = { hp_var_heap = newHeap, hp_expression_heap = newHeap, hp_type_heaps = { th_vars = newHeap, th_attrs = newHeap }}
+:: DclCache = {
+ dcl_modules::!{#DclModule},
+ functions_and_macros::!{#FunDef},
+ predef_symbols::!.PredefinedSymbols,
+ hash_table::!.HashTable,
+ heaps::!.Heaps
+ };
+
+empty_cache :: *DclCache
+empty_cache
+ # heaps = {hp_var_heap = newHeap, hp_expression_heap = newHeap, hp_type_heaps = {th_vars = newHeap, th_attrs = newHeap}}
# (predef_symbols, hash_table) = buildPredefinedSymbols newHashTable
- = compile_modules modules 0 cocl_options args_without_modules {} {} predef_symbols hash_table heaps files;
+ = {dcl_modules={},functions_and_macros={},predef_symbols=predef_symbols,hash_table=hash_table,heaps=heaps}
+
+compile :: ![{#Char}] !*DclCache !*Files -> (!Bool,!*DclCache,!*Files)
+compile args cache files
+ # (args_without_modules,modules,cocl_options) = parseCommandLine args InitialCoclOptions
+ = compile_modules modules 0 cocl_options args_without_modules cache files;
parseCommandLine :: [{#Char}] CoclOptions -> ([{#Char}],[{#Char}],CoclOptions)
parseCommandLine [] options
@@ -134,7 +132,7 @@ directoryName :: {#Char} -> {#Char}
directoryName path
= foldr (\p ps -> p +++ {DirectorySeparator} +++ ps) "" (init (splitBy DirectorySeparator path))
-compile_modules [module_:modules] n_compiles cocl_options args_without_modules dcl_modules functions_and_macros predef_symbols hash_table heaps files
+compile_modules [module_:modules] n_compiles cocl_options args_without_modules cache files
# cocl_options = prependModulePath {cocl_options & pathName=stripExtension ".icl" (stripQuotes module_)}
with
// RWS +++ hack, both module name and file path should be passed to frontEndInterface
@@ -144,39 +142,22 @@ compile_modules [module_:modules] n_compiles cocl_options args_without_modules d
// RWS, voor Maarten +++ , searchPaths = {searchPaths & sp_paths = [directoryName pathName : searchPaths.sp_paths]}
// , searchPaths = [directoryName pathName : searchPaths]
}
- # (ok,dcl_modules,functions_and_macros,n_functions_and_macros_in_dcl_modules,predef_symbols,hash_table,heaps,files)
- = compileModule cocl_options (args_without_modules++[module_]) dcl_modules functions_and_macros predef_symbols hash_table heaps files;
+ # (ok,cache,files)
+ = compileModule cocl_options (args_without_modules++[module_]) cache files;
| ok
-// # hash_table=remove_module_idents_from_symbol_table 0 dcl_modules hash_table;
-/* # hash_table=remove_module_ident_from_symbol_table dcl_modules.[0] hash_table;
- with
- remove_module_idents_from_symbol_table module_n dcl_modules hash_table
- | module_n==size dcl_modules
- = hash_table;
- # hash_table = remove_module_ident_from_symbol_table dcl_modules.[module_n] hash_table
- = remove_module_idents_from_symbol_table (module_n+1) dcl_modules hash_table
-
- remove_module_ident_from_symbol_table dcl_module hash_table
- # module_symbol_pointer = dcl_module.dcl_name.id_info;
- # symbol_heap=hash_table.hte_symbol_heap;
- # (hte_entry,symbol_heap) = readPtr module_symbol_pointer symbol_heap
- # symbol_heap=writePtr module_symbol_pointer {hte_entry & ste_kind=STE_Empty} symbol_heap
- = {hash_table & hte_symbol_heap=symbol_heap}
- # dcl_modules = {dcl_modules.[module_n] \\ module_n <-[1..size dcl_modules-1]}
-*/
/*
# heaps = { hp_var_heap = newHeap, hp_expression_heap = newHeap, hp_type_heaps = { th_vars = newHeap, th_attrs = newHeap }}
# (predef_symbols, hash_table) = buildPredefinedSymbols newHashTable
= compile_modules modules 0 cocl_options args_without_modules {} {} predef_symbols hash_table heaps files;
*/
- = compile_modules modules (n_compiles+1) cocl_options args_without_modules dcl_modules functions_and_macros predef_symbols hash_table heaps files;
+ = compile_modules modules (n_compiles+1) cocl_options args_without_modules cache files;
- = (ok,files);
-compile_modules [] n_compiles cocl_options args_without_modules dcl_modules functions_and_macros predef_symbols hash_table heaps files
- = (True,files);
+ = (ok,cache,files);
+compile_modules [] n_compiles cocl_options args_without_modules cache files
+ = (True,cache,files);
-compileModule :: CoclOptions [{#Char}] {#DclModule} {#FunDef} *PredefinedSymbols !*HashTable *Heaps *Files -> (!Bool,!{#DclModule},!{#FunDef},!Int,!*PredefinedSymbols,!*HashTable,!*Heaps, !*Files)
-compileModule options commandLineArgs dcl_modules functions_and_macros predef_symbols hash_table heaps files
+compileModule :: CoclOptions [{#Char}] *DclCache *Files -> (!Bool,!*DclCache,!*Files)
+compileModule options commandLineArgs {dcl_modules,functions_and_macros,predef_symbols,hash_table,heaps} files
# (opened, error, files)
= fopen options.errorPath options.errorMode files
| not opened
@@ -189,7 +170,7 @@ compileModule options commandLineArgs dcl_modules functions_and_macros predef_sy
= stdio files
// (moduleIdent, hash_table) = putIdentInHashTable options.moduleName IC_Module hash_table
# ({boxed_ident=moduleIdent}, hash_table) = putIdentInHashTable options.moduleName IC_Module hash_table
- # list_inferred_types = if (isMember "-lt" commandLineArgs) (Yes (not (isMember "-lattr" commandLineArgs))) No
+ # list_inferred_types = if (isMember "-lt" commandLineArgs) (Yes (not (isMember "-lattr" commandLineArgs))) No
# (optionalSyntaxTree,cached_functions_and_macros,n_functions_and_macros_in_dcl_modules,main_dcl_module_n,predef_symbols, hash_table, files, error, io, out,heaps)
= frontEndInterface FrontEndPhaseAll moduleIdent options.searchPaths dcl_modules functions_and_macros list_inferred_types predef_symbols hash_table files error io out heaps
# unique_copy_of_predef_symbols={predef_symbol\\predef_symbol<-:predef_symbols}
@@ -203,23 +184,24 @@ compileModule options commandLineArgs dcl_modules functions_and_macros predef_sy
= abort ("couldn't close out file \"" +++ options.outPath +++ "\"\n")
# var_heap=heaps.hp_var_heap
# (success,dcl_modules,functions_and_macros,n_functions_and_macros_in_dcl_modules,var_heap,error, files)
- = case optionalSyntaxTree of
- Yes syntaxTree
- # dcl_modules=syntaxTree.fe_dcls
- # functions_and_macros = syntaxTree.fe_icl.icl_functions
- # (success,var_heap,error, files) = backEndInterface outputPath (map appendRedirection commandLineArgs) predef_symbols syntaxTree main_dcl_module_n var_heap error files
- -> (success,dcl_modules,functions_and_macros,n_functions_and_macros_in_dcl_modules,var_heap,error, files)
- with
- appendRedirection arg
- = case arg of
- "-RE"
- -> "-RAE"
- "-RO"
- -> "-RAO"
- arg
- -> arg
- No
- -> (False,{},{},0,var_heap,error, files)
+ = case optionalSyntaxTree of
+ Yes syntaxTree
+ # dcl_modules=syntaxTree.fe_dcls
+ # functions_and_macros = syntaxTree.fe_icl.icl_functions
+ # (success,var_heap,error, files)
+ = backEndInterface outputPath (map appendRedirection commandLineArgs) predef_symbols syntaxTree main_dcl_module_n var_heap error files
+ -> (success,dcl_modules,functions_and_macros,n_functions_and_macros_in_dcl_modules,var_heap,error, files)
+ with
+ appendRedirection arg
+ = case arg of
+ "-RE"
+ -> "-RAE"
+ "-RO"
+ -> "-RAO"
+ arg
+ -> arg
+ No
+ -> (False,{},{},0,var_heap,error, files)
with
outputPath
// = /* directoryName options.pathName +++ "Clean System Files" +++ {DirectorySeparator} +++ */ baseName options.pathName
@@ -231,5 +213,7 @@ compileModule options commandLineArgs dcl_modules functions_and_macros predef_sy
= abort ("couldn't close error file \"" +++ options.errorPath +++ "\"\n")
| success
# dcl_modules={{dcl_module \\ dcl_module<-:dcl_modules} & [main_dcl_module_n].dcl_conversions=No}
- = (success,dcl_modules,cached_functions_and_macros,n_functions_and_macros_in_dcl_modules,unique_copy_of_predef_symbols,hash_table,heaps,files)
- = (success,dcl_modules,cached_functions_and_macros,n_functions_and_macros_in_dcl_modules,unique_copy_of_predef_symbols,hash_table,heaps,files)
+ # cache={dcl_modules=dcl_modules,functions_and_macros=cached_functions_and_macros,predef_symbols=unique_copy_of_predef_symbols,hash_table=hash_table,heaps=heaps}
+ = (success,cache,files)
+ # cache={dcl_modules=dcl_modules,functions_and_macros=cached_functions_and_macros,predef_symbols=unique_copy_of_predef_symbols,hash_table=hash_table,heaps=heaps}
+ = (success,cache,files)