aboutsummaryrefslogtreecommitdiff
path: root/main/Unix
diff options
context:
space:
mode:
authorronny2002-06-11 09:22:25 +0000
committerronny2002-06-11 09:22:25 +0000
commit23157c8f7f90c1185dac1d7403efebdb1a454936 (patch)
tree0649705a1fb5905a5302e04cdbc8b43cb3db7f17 /main/Unix
parent- bug fix:types scopes (diff)
Moved system dependent code from coclmain to CoclSystemDependent
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@1090 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
Diffstat (limited to 'main/Unix')
-rw-r--r--main/Unix/CoclSystemDependent.dcl7
-rw-r--r--main/Unix/CoclSystemDependent.icl104
2 files changed, 105 insertions, 6 deletions
diff --git a/main/Unix/CoclSystemDependent.dcl b/main/Unix/CoclSystemDependent.dcl
index 7469dd6..c07763b 100644
--- a/main/Unix/CoclSystemDependent.dcl
+++ b/main/Unix/CoclSystemDependent.dcl
@@ -22,5 +22,10 @@ SystemDependentDevices :: [a]
SystemDependentInitialIO :: [a]
ensureCleanSystemFilesExists :: !String !*Files -> (!Bool, !*Files)
-
set_compiler_id :: Int -> Int
+
+:: CompileFun st
+ :== ([{#Char}] st -> (Bool, st))
+
+compiler_loop :: (CompileFun *st) *st -> (!Bool, !*st)
+
diff --git a/main/Unix/CoclSystemDependent.icl b/main/Unix/CoclSystemDependent.icl
index 4c411e8..de9b0e9 100644
--- a/main/Unix/CoclSystemDependent.icl
+++ b/main/Unix/CoclSystemDependent.icl
@@ -2,11 +2,13 @@
implementation module CoclSystemDependent
import StdEnv
+import StdDebug
+import ArgEnv
+import ipc
+from filesystem import ensureDirectoryExists
-// import for filesystem
-import code from "cDirectory.o" // Unix
+import code from "cDirectory.o"
import code from "ipc.o"
-from filesystem import ensureDirectoryExists
PathSeparator
:== ':'
@@ -21,10 +23,102 @@ SystemDependentInitialIO :: [a]
SystemDependentInitialIO
= []
+set_compiler_id :: Int -> Int
+set_compiler_id compiler_id = compiler_id
+
ensureCleanSystemFilesExists :: !String !*Files -> (!Bool, !*Files)
// returned bool: now there is such a subfolder
ensureCleanSystemFilesExists path env
= ensureDirectoryExists path env
-set_compiler_id :: Int -> Int
-set_compiler_id compiler_id = compiler_id
+:: CompileFun st
+ :== ([{#Char}] st -> (Bool, st))
+
+compiler_loop :: (CompileFun *st) *st -> (!Bool, !*st)
+compiler_loop compile compile_state
+ | length commandArgs==3 && commandArgs!!0=="--pipe"
+ # commands_name= (commandArgs!!1);
+ # results_name= (commandArgs!!2);
+ = (True,compile_loop compile commands_name results_name compile_state)
+ # (r,compile_state)=compile commandArgs compile_state
+ = (r,compile_state)
+ where
+ commandArgs
+ = tl [arg \\ arg <-: getCommandLine]
+// ... Unix
+
+string_to_args string
+ = string_to_args 0;
+ where
+ l=size string;
+
+ string_to_args i
+ # end_spaces_i=skip_spaces i;
+ | end_spaces_i==l
+ = []
+ | string.[end_spaces_i]=='"'
+ # next_double_quote_i=skip_to_double_quote (end_spaces_i+1)
+ | next_double_quote_i>=l
+ = [string % (end_spaces_i,l-1)]
+ # arg=string % (end_spaces_i+1,next_double_quote_i-1);
+ = [arg : string_to_args (next_double_quote_i+1)];
+ # space_i=skip_to_space (end_spaces_i+1)
+ | space_i>=l
+ = [string % (end_spaces_i,l-1)]
+ # arg=string % (end_spaces_i,space_i-1);
+ = [arg : string_to_args (space_i+1)];
+
+ skip_spaces i
+ | i>=l
+ = l;
+ # c=string.[i];
+ | c==' ' || c=='\t'
+ = skip_spaces (i+1);
+ = i;
+
+ skip_to_space i
+ | i>=l
+ = l;
+ # c=string.[i];
+ | c==' ' || c=='\t'
+ = i;
+ = skip_to_space (i+1);
+
+ skip_to_double_quote i
+ | i>=l
+ = l;
+ # c=string.[i];
+ | c=='"'
+ = i;
+ = skip_to_double_quote (i+1);
+
+
+compile_loop :: (CompileFun *st) {#Char} {#Char} *st -> *st
+compile_loop compile commands results compile_state
+ # r=open_pipes commands results;
+ | r<>0
+ = abort ("compile_loop\n");
+ = compile_files compile compile_state
+
+compile_files :: (CompileFun *st) *st -> *st
+compile_files compile compile_state
+ # n = get_command_length;
+ | n==(-1)
+ = abort "compile_files 1";
+ # string=createArray n '\0';
+ # r=get_command string;
+ | r<>0
+ = abort ("compile_files 2 ");
+ # args=string_to_args (string % (0,size string-2))
+ = case args of
+ ["cocl":cocl_args]
+ # (ok,compile_state)=compile cocl_args compile_state
+ # result=if ok 0(-1);
+ # r=send_result result
+ | r<>0
+ -> abort "compile_files 3";
+ -> compile_files compile compile_state
+ ["quit"]
+ -> trace_n "quiting" compile_state;
+ _
+ -> abort "compile_files 4"