Commit 35064c23 authored by John van Groningen's avatar John van Groningen
Browse files

add code for dcl module caching using the IDE

parent 96641e25
definition module thread_message;
//1.3
from StdString import String;
//3.1
get_message_number :: Int;
// int get_message_number ();
get_current_thread_id :: Int;
// int get_current_thread_id ();
start_compiler_process :: !String !String !String -> (!Int,!Int,!Int,!Int);
// int start_compiler_process (CleanString compiler_path,CleanString compiler_directory,CleanString command,int* compiler_thread_id_p,int* compiler_thread_handle_p,int* process_handle_p);
send_string_to_thread :: !Int !Int !Int !String -> Int;
// int send_string_to_thread (int thread_id,int thread_handle,int wm_number,CleanString s);
send_integers_to_thread :: !Int !Int !Int !Int -> Int;
// int send_integers_to_thread (int thread_id,int wm_number,int i1,int i2);
get_integers_from_message :: !Int -> (!Int,!Int,!Int);
// int get_integers_from_message (int wm_number,int* i1_p,int* i2_p);
get_integers_from_thread_message :: !Int !Int -> (!Int,!Int,!Int);
// int get_integers_from_thread_message (int wm_number,int thread_handle,int* i1_p,int* i2_p);
get_string_from_file_map_and_delete_map :: !Int !String -> Int;
// int get_string_from_file_map_and_delete_map (int file_map,CleanString s);
implementation module thread_message;
//1.3
from StdString import String;
//3.1
get_message_number :: Int;
get_message_number = code {
ccall get_message_number ":I"
};
// int get_message_number ();
get_current_thread_id :: Int;
get_current_thread_id = code {
ccall get_current_thread_id ":I"
};
// int get_current_thread_id ();
start_compiler_process :: !String !String !String -> (!Int,!Int,!Int,!Int);
start_compiler_process a0 a1 a2 = code {
ccall start_compiler_process "SSS:IIII"
};
// int start_compiler_process (CleanString compiler_path,CleanString compiler_directory,CleanString command,int* compiler_thread_id_p,int* compiler_thread_handle_p,int* process_handle_p);
send_string_to_thread :: !Int !Int !Int !String -> Int;
send_string_to_thread a0 a1 a2 a3 = code {
ccall send_string_to_thread "IIIS:I"
};
// int send_string_to_thread (int thread_id,int thread_handle,int wm_number,CleanString s);
send_integers_to_thread :: !Int !Int !Int !Int -> Int;
send_integers_to_thread a0 a1 a2 a3 = code {
ccall send_integers_to_thread "IIII:I"
};
// int send_integers_to_thread (int thread_id,int wm_number,int i1,int i2);
get_integers_from_message :: !Int -> (!Int,!Int,!Int);
get_integers_from_message a0 = code {
ccall get_integers_from_message "I:III"
};
// int get_integers_from_message (int wm_number,int* i1_p,int* i2_p);
get_integers_from_thread_message :: !Int !Int -> (!Int,!Int,!Int);
get_integers_from_thread_message a0 a1 = code {
ccall get_integers_from_thread_message "II:III"
};
// int get_integers_from_thread_message (int wm_number,int thread_handle,int* i1_p,int* i2_p);
get_string_from_file_map_and_delete_map :: !Int !String -> Int;
get_string_from_file_map_and_delete_map a0 a1 = code {
ccall get_string_from_file_map_and_delete_map "IS:I"
};
// int get_string_from_file_map_and_delete_map (int file_map,CleanString s);
......@@ -54,10 +54,106 @@ coclMainWithVersionCheck currentVersion latestDefVersion latestImpVersion testA
| not (fst (checkVersion (versionCompare expectedVersion observedVersion) stderr))
= set_return_code (-1) world
# (success, world)
= accFiles (\files0 -> let (r,cache,files)=compile commandArgs empty_cache files0 in (r,files)) world
= accFiles (compiler commandArgs) world
= set_return_code (if success 0(-1)) world
where
commandArgs
= if (length realArgs == 0) testArgs realArgs
realArgs
= tl [arg \\ arg <-: getCommandLine]
import thread_message;
import code from "thread_message.obj";
compiler :: ![{#Char}] *Files -> *(!Bool,!*Files);
compiler commandArgs files
| length commandArgs==2 && commandArgs!!0=="-ide"
# wm_number=get_message_number;
# thread_id=hex_to_int (commandArgs!!1);
= (True,compile_files empty_cache thread_id wm_number files)
# (r,cache,files)=compile commandArgs empty_cache files
= (r,files)
hex_to_int :: {#Char} -> Int
hex_to_int s
= hex_to_int 0 0;
where
l=size s;
hex_to_int i n
| i==l
= n;
# c=s.[i];
# i=i+1;
# n=n<<4;
| c<='9'
= hex_to_int i (n bitor (toInt c-toInt '0'));
= hex_to_int i (n bitor (toInt c-(toInt 'A'-10)));
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_files cache thread_id wm_number files
# (r,a,s) =get_integers_from_message wm_number;
| r==0
= abort "compile_files 1";
# string=createArray a '\0';
# r=get_string_from_file_map_and_delete_map s string;
| r==0
= abort ("compile_files 2 ");
# args=string_to_args (string % (0,size string-2))
= case args of
["cocl":cocl_args]
# (ok,cache,files)=compile cocl_args cache files
# result=if ok 0(-1);
# r=send_integers_to_thread thread_id wm_number 0 result;
| r==0
-> abort "compile_files 3";
-> compile_files cache thread_id wm_number files
["exit"]
-> files;
_
-> abort "compile_files 4"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment