diff options
-rw-r--r-- | frontend/type_io.dcl | 9 | ||||
-rw-r--r-- | frontend/type_io.icl | 54 | ||||
-rw-r--r-- | main/compile.icl | 55 |
3 files changed, 54 insertions, 64 deletions
diff --git a/frontend/type_io.dcl b/frontend/type_io.dcl index 15962ca..d9153f3 100644 --- a/frontend/type_io.dcl +++ b/frontend/type_io.dcl @@ -3,15 +3,6 @@ */ definition module type_io -openTclFile :: !Bool !String !*Files -> (Optional .File, !*Files) -closeTclFile :: !*(Optional *File) *Files -> *(!Bool,*Files) - -baseName :: {#Char} -> {#Char} - -directoryName :: {#Char} -> {#Char} - -splitBy :: Char {#Char} -> [{#Char}] - // WARNING: It is essential to report changes in this module to martijnv@cs.kun.nl // because the binary format for type-files is used by the dynamic run-time // system. diff --git a/frontend/type_io.icl b/frontend/type_io.icl index 433346f..3c0c5d0 100644 --- a/frontend/type_io.icl +++ b/frontend/type_io.icl @@ -472,57 +472,3 @@ where = write_type_info c2 tcl_file wtis = (tcl_file,wtis) -from CoclSystemDependent import DirectorySeparator, ensureCleanSystemFilesExists - -openTclFile :: !Bool !String !*Files -> (Optional .File, !*Files) -openTclFile False icl_mod_pathname files - = (No,files) -openTclFile compile_for_dynamics icl_mod_pathname files - # csf_path - = directoryName icl_mod_pathname +++ "Clean System Files" - # tcl_path - = csf_path +++ {DirectorySeparator} +++ baseName icl_mod_pathname +++ ".tcl" - # (opened, tcl_file, files) - = fopen tcl_path FWriteData files - | opened - = (Yes tcl_file, files) - // try again after creating Clean System Files folder - # (ok, files) - = ensureCleanSystemFilesExists csf_path files - | not ok - = abort ("can't create folder \"" +++ csf_path +++"\"\n") - # (opened, tcl_file, files) - = fopen tcl_path FWriteData files - | opened - =(Yes tcl_file, files) - = abort ("couldn't open file \"" +++ tcl_path +++ "\"\n") - -closeTclFile :: !*(Optional *File) *Files -> *(!Bool,*Files) -closeTclFile (Yes tcl_file) files - = fclose tcl_file files -closeTclFile _ files - = (True,files); - -// copy from compile.icl ... -baseName :: {#Char} -> {#Char} -baseName path - = last (splitBy DirectorySeparator path) - -directoryName :: {#Char} -> {#Char} -directoryName path - = foldr (\p ps -> p +++ {DirectorySeparator} +++ ps) "" (init (splitBy DirectorySeparator path)) - -splitBy :: Char {#Char} -> [{#Char}] -splitBy char string - = splitBy` 0 0 - where - splitBy` frm to - | to >= stringSize - = [string % (frm, to-1)] - | string.[to] == char - = [string % (frm, to-1) : splitBy` (to+1) (to+1)] - // otherwise - = splitBy` frm (to+1) - stringSize - = size string -// ... copy from compile.icl
\ No newline at end of file diff --git a/main/compile.icl b/main/compile.icl index 980e239..7b04b22 100644 --- a/main/compile.icl +++ b/main/compile.icl @@ -10,7 +10,60 @@ import filesystem, CoclSystemDependent import portToNewSyntax import compilerSwitches //import RWSDebug -from type_io import openTclFile, closeTclFile, baseName, directoryName, splitBy + +from CoclSystemDependent import DirectorySeparator, ensureCleanSystemFilesExists + +baseName :: {#Char} -> {#Char} +baseName path + = last (splitBy DirectorySeparator path) + +directoryName :: {#Char} -> {#Char} +directoryName path + = foldr (\p ps -> p +++ {DirectorySeparator} +++ ps) "" (init (splitBy DirectorySeparator path)) + +splitBy :: Char {#Char} -> [{#Char}] +splitBy char string + = splitBy` 0 0 + where + splitBy` frm to + | to >= stringSize + = [string % (frm, to-1)] + | string.[to] == char + = [string % (frm, to-1) : splitBy` (to+1) (to+1)] + // otherwise + = splitBy` frm (to+1) + stringSize + = size string + +openTclFile :: !Bool !String !*Files -> (Optional .File, !*Files) +openTclFile False icl_mod_pathname files + = (No,files) +openTclFile compile_for_dynamics icl_mod_pathname files + # csf_path + = directoryName icl_mod_pathname +++ "Clean System Files" + # tcl_path + = csf_path +++ {DirectorySeparator} +++ baseName icl_mod_pathname +++ ".tcl" + # (opened, tcl_file, files) + = fopen tcl_path FWriteData files + | opened + = (Yes tcl_file, files) + // try again after creating Clean System Files folder + # (ok, files) + = ensureCleanSystemFilesExists csf_path files + | not ok + = abort ("can't create folder \"" +++ csf_path +++"\"\n") + # (opened, tcl_file, files) + = fopen tcl_path FWriteData files + | opened + =(Yes tcl_file, files) + = abort ("couldn't open file \"" +++ tcl_path +++ "\"\n") + +closeTclFile :: !*(Optional *File) *Files -> *(!Bool,*Files) +closeTclFile (Yes tcl_file) files + = fclose tcl_file files +closeTclFile _ files + = (True,files); + :: CoclOptions = |