[m-rev.] .NET bootstrapping

Fergus Henderson fjh at cs.mu.OZ.AU
Sat Feb 15 07:34:05 AEDT 2003


On 06-Feb-2003, Peter Ross <pro at missioncriticalit.com> wrote:
> Next test will be to compile a program.  Don't think it will work as I
> still need to fully implement some of the pragma foreign_procs.

I've passed that test.  My stage 1 compiler has successfully compiled
samples/hello.m.

I tried running a bootcheck, but that ran into the stack overflow problem
when building the stage two dependencies.  Solved that one using editbin,
as Pete suggested.  (It's a bit of a pain that editbin will be required
to bootstrap the compiler, since editbin is not part of the MS.NET CLR
Framework SDK.)

Next problem was with io__putback_char, solved by the patch to lexer.m
which I posted earlier.

Next problem was a "System.UnauthorizedAccessException"
that seems to be related to the fact that io__open_input was opening
files in read/write mode rather than read-only mode.
I have a patch for that one.

Plus a fix for unify_ref and compare_ref in runtime/mercury_il.il,
and lots of minor tweeks to the Mmakefiles and to tools/bootcheck.
Here is the diff in case anyone wants to duplicate my efforts.
I won't commit these changes yet.  I will clean these patches up
for proper submission later.

We're getting close now.  But it's pretty slow.  Building the stage 2
dependencies has taken 25 minutes now and is still going.  I'm going
to get some sleep ;-)

cvs server: Diffing .
cvs server: Diffing analysis
cvs server: Diffing bindist
cvs server: Diffing boehm_gc
cvs server: Diffing boehm_gc/Mac_files
cvs server: Diffing boehm_gc/cord
cvs server: Diffing boehm_gc/cord/private
cvs server: Diffing boehm_gc/doc
cvs server: Diffing boehm_gc/include
cvs server: Diffing boehm_gc/include/private
cvs server: Diffing boehm_gc/tests
cvs server: Diffing browser
Index: browser/.cvsignore
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/.cvsignore,v
retrieving revision 1.17
diff -u -d -u -r1.17 .cvsignore
--- browser/.cvsignore	29 Aug 2002 04:37:04 -0000	1.17
+++ browser/.cvsignore	14 Feb 2003 20:19:40 -0000
@@ -1,3 +1,5 @@
+*.il
+*.pdb
 *.dep
 *.c
 *.d
cvs server: Diffing bytecode
cvs server: Diffing compiler
Index: compiler/.cvsignore
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/.cvsignore,v
retrieving revision 1.20
diff -u -d -u -r1.20 .cvsignore
--- compiler/.cvsignore	10 Oct 2002 06:01:48 -0000	1.20
+++ compiler/.cvsignore	14 Feb 2003 20:19:40 -0000
@@ -1,3 +1,5 @@
+*.il
+*.pdb
 *.c
 *.d
 *.h
Index: compiler/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/Mmakefile,v
retrieving revision 1.66
diff -u -d -u -r1.66 Mmakefile
--- compiler/Mmakefile	13 Feb 2003 08:28:42 -0000	1.66
+++ compiler/Mmakefile	14 Feb 2003 20:19:40 -0000
@@ -163,12 +163,16 @@
 
 $(MC_PROG).depend: regenerate_preprocessed_files Mercury.modules
 
+ifneq ($(findstring il,$(GRADE)),il)        
+# XXX This doesn't work for .NET, so currently it is disabled
+#     for the `il' grades.
 # This directory contains source files for which the module
 # name doesn't match the file name, so smart recompilation
 # won't work without the Mercury.modules file.
 .PHONY: Mercury.modules
 Mercury.modules:
 	$(MC) -f *.m
+endif
 
 .PHONY: all
 all:		mercury
@@ -185,9 +189,18 @@
 
 LN = ln
 
-mercury_compile: $(MC_PROG)
+ifneq ("$(EXT_FOR_EXE)","")
+.PHONY: mercury_compile
+mercury_compile: mercury_compile$(EXT_FOR_EXE)
+endif
+
+mercury_compile$(EXT_FOR_EXE): $(MC_PROG)$(EXT_FOR_EXE)
 	rm -f mercury_compile$(EXT_FOR_EXE)
 	$(LN) $(MC_PROG)$(EXT_FOR_EXE) mercury_compile$(EXT_FOR_EXE)
+ifeq ($(findstring il,$(GRADE)),il)        
+	# set the stack size to 100M -- the default of 1M is too low
+	-editbin /nologo /stack:100000000 mercury_compile$(EXT_FOR_EXE)
+endif
 
 libmercury_compile.a: lib$(MC_PROG).a
 	rm -f libmercury_compile.a
@@ -208,6 +221,8 @@
 # (We used to just build mlds_to_gcc.err, but that caused bootstrapping problems
 # with the source distribution; using the .c files is little more robust.)
 
+ifneq ($(findstring il,$(GRADE)),il)        
+
 .PHONY: depend
 depend:		mlds_to_gcc.depend
 
@@ -219,6 +234,7 @@
 .PHONY: cs
 cs: 		mlds_to_gcc.c gcc.c
 
+endif
 
 #-----------------------------------------------------------------------------#
 
Index: compiler/mercury_compile.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/mercury_compile.m,v
retrieving revision 1.273
diff -u -d -u -r1.273 mercury_compile.m
--- compiler/mercury_compile.m	11 Feb 2003 02:14:26 -0000	1.273
+++ compiler/mercury_compile.m	14 Feb 2003 20:19:40 -0000
@@ -18,8 +18,8 @@
 
 :- import_module io, list.
 
-:- pred main(io__state, io__state).
-:- mode main(di, uo) is det.
+:- pred real_main(io__state, io__state).
+:- mode real_main(di, uo) is det.
 
 	% main(Args).
 :- pred main(list(string), io__state, io__state).
@@ -121,7 +121,7 @@
 
 %-----------------------------------------------------------------------------%
 
-main -->
+real_main -->
 	gc_init,
 
 	 	% All messages go to stderr
@@ -170,6 +170,9 @@
 %-----------------------------------------------------------------------------%
 
 :- pred gc_init(io__state::di, io__state::uo) is det.
+
+% This version is only used if there is no matching foreign_proc version.
+gc_init --> [].
 
 :- pragma foreign_proc("C",
 	gc_init(_IO0::di, _IO::uo),
Index: compiler/passes_aux.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/passes_aux.m,v
retrieving revision 1.51
diff -u -d -u -r1.51 passes_aux.m
--- compiler/passes_aux.m	5 Feb 2003 14:41:14 -0000	1.51
+++ compiler/passes_aux.m	14 Feb 2003 20:19:41 -0000
@@ -524,8 +524,9 @@
 	%
 	io__make_temp(TmpFile),
 	io__call_system_return_signal(
-		string__append_list([Command, " > ", TmpFile, " 2>&1"]),
-		Result),
+		% XXX FIXME
+		%string__append_list([Command, " > ", TmpFile, " 2>&1"]),
+		Command, Result),
 	(
 		{ Result = ok(exited(Status)) },
 		maybe_write_string(PrintCommand, "% done.\n"),
@@ -633,6 +634,12 @@
 	).
 
 	% Are we compiling in a win32 environment?
+	%
+	% If in doubt, use_win32 should succeed.  This is only used to
+	% decide whether to invoke Bourne shell command and shell scripts
+	% directly, or whether to invoke them via `sh -c ...'.  The latter
+	% should work correctly in a Unix environment too, but is a little
+	% less efficient since it invokes another process.
 :- pred use_win32 is semidet.
 :- pragma foreign_proc("C",
 	use_win32,
@@ -644,6 +651,9 @@
 	SUCCESS_INDICATOR = 0;
 #endif
 ").
+% The following clause is only used if there is no matching foreign_proc.
+% See comment above for why it is OK to just succeed here.
+use_win32 :- semidet_succeed.
 
 maybe_report_sizes(HLDS) -->
 	globals__io_lookup_bool_option(statistics, Statistics),
Index: compiler/stack_layout.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/stack_layout.m,v
retrieving revision 1.73
diff -u -d -u -r1.73 stack_layout.m
--- compiler/stack_layout.m	15 Nov 2002 04:50:28 -0000	1.73
+++ compiler/stack_layout.m	14 Feb 2003 20:19:47 -0000
@@ -151,6 +151,11 @@
 
 %---------------------------------------------------------------------------%
 
+% This version is only used if there is no matching foreign_proc version.
+% XXX why is this implemented in C anyway?  Why not just use Mercury?
+concat_string_list(StringsList, _Len, String) :-
+	String = string__append_list(StringsList).
+
 :- pred stack_layout__concat_string_list(list(string)::in, int::in,
 	string::out) is det.
 
Index: compiler/top_level.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/top_level.m,v
retrieving revision 1.1
diff -u -d -u -r1.1 top_level.m
--- compiler/top_level.m	20 Mar 2002 12:37:29 -0000	1.1
+++ compiler/top_level.m	14 Feb 2003 20:19:47 -0000
@@ -27,6 +27,14 @@
 
 :- include_module mercury_compile.
 
+:- use_module io.
+:- use_module top_level.mercury_compile.
+:- pred main(io.state::di, io.state::uo) is det.
+
+:- implementation.
+
+main --> top_level.mercury_compile.real_main.
+
 :- end_module top_level.
 
 %-----------------------------------------------------------------------------%
cvs server: Diffing compiler/notes
cvs server: Diffing debian
cvs server: Diffing deep_profiler
Index: deep_profiler/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/mercury/deep_profiler/Mmakefile,v
retrieving revision 1.8
diff -u -d -u -r1.8 Mmakefile
--- deep_profiler/Mmakefile	23 Jan 2003 00:24:08 -0000	1.8
+++ deep_profiler/Mmakefile	14 Feb 2003 20:19:47 -0000
@@ -52,13 +52,14 @@
 # Add some additional dependencies, so that Mmake knows to remake the
 # profiler if one of the libraries changes.
 
+ifneq ($(findstring il,$(GRADE)),il)        
 mdprof_cgi:	$(RUNTIME_DIR)/lib$(RT_LIB_NAME).$A
 mdprof_cgi:	$(LIBRARY_DIR)/lib$(STD_LIB_NAME).$A
 mdprof_test:	$(RUNTIME_DIR)/lib$(RT_LIB_NAME).$A
 mdprof_test:	$(LIBRARY_DIR)/lib$(STD_LIB_NAME).$A
-# Should also depend on $(BOEHM_GC_DIR)/libgc(_prof).$A, but only
-# if in .gc(.prof) grade; GNU make does not support dynamic dependencies,
-# so just leave it out.
+# XXX Should also depend on $(BOEHM_GC_DIR)/libgc(_prof).$A, but only
+# if in .gc(.prof) grade.
+endif
 
 $(cs_subdir)mdprof_cgi_init.c:		$(UTIL_DIR)/mkinit
 $(cs_subdir)mdprof_test_init.c:		$(UTIL_DIR)/mkinit
cvs server: Diffing deep_profiler/notes
cvs server: Diffing doc
cvs server: Diffing java
cvs server: Diffing java/library
cvs server: Diffing java/runtime
cvs server: Diffing library
Index: library/io.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/io.m,v
retrieving revision 1.290
diff -u -d -u -r1.290 io.m
--- library/io.m	14 Feb 2003 17:22:20 -0000	1.290
+++ library/io.m	14 Feb 2003 20:19:50 -0000
@@ -3621,6 +3621,9 @@
 	// Likewise for the `writer' field.
 
 	System::IO::Stream 	*stream; // The stream itself
+	System::IO::Stream 	*raw_stream;
+				// The underlying (unbuffered) stream,
+				// if the stream itself is a BufferedStream.
 	System::IO::TextReader 	*reader; // A stream reader for reading it
 	int			putback;
 			// the next character or byte to read,
@@ -3773,35 +3776,47 @@
 static mercury_open(MR_String filename, MR_String openmode,
 	ML_file_encoding_kind file_encoding)
 {
-        MR_MercuryFile mf = new MR_MercuryFileStruct();
-        System::IO::FileMode fa;
+        MR_MercuryFile mf;
+        System::IO::FileMode mode;
+        System::IO::FileAccess access;
+        System::IO::FileShare share;
         System::IO::Stream *stream = 0;
+	static int open_count = 0;
+
+	open_count++;
+	System::Console::Out->WriteLine(System::String::Concat(
+		S""[open: #"", S"":"",
+		filename, S"", "", openmode, S""]""));
 
 	try {
-			// XXX get this right...
 		if (System::String::op_Equality(openmode, ""r"")) {
-			fa = System::IO::FileMode::Open;
-		} else if (System::String::op_Equality(openmode, ""a"")) {
-			fa = System::IO::FileMode::Append;
+			// Like '<' in Bourne shell.
+			// Read a file.  The file must exist already.
+			mode   = System::IO::FileMode::Open;
+			access = System::IO::FileAccess::Read;
 		} else if (System::String::op_Equality(openmode, ""w"")) {
-			fa = System::IO::FileMode::Truncate;
+			// Like '>' in Bourne shell.
+			// Overwrite an existing file, or create a new file.
+			mode   = System::IO::FileMode::Create;
+			access = System::IO::FileAccess::Write;
+		} else if (System::String::op_Equality(openmode, ""a"")) {
+			// Like '>>' in Bourne shell.
+			// Append to an existing file, or create a new file.
+			mode   = System::IO::FileMode::Append;
+			access = System::IO::FileAccess::Write;
 		} else {
-			MR_String msg;
-			msg = System::String::Concat(
+			mercury::runtime::Errors::SORRY(System::String::Concat(
 				""foreign code for this function, open mode:"",
-				openmode);
-			mercury::runtime::Errors::SORRY(msg);
-
-			// fa = XXX;
+				openmode));
 		}
 
-		if (fa == System::IO::FileMode::Truncate &&
-				!System::IO::File::Exists(filename))
-		{
-			stream = System::IO::File::Create(filename);
-		} else {
-			stream = System::IO::File::Open(filename, fa);
-		}
+		// For Unix compatibility, we allow files
+		// to be read or written by multiple processes
+		// simultaneously.  XXX Is this a good idea?
+		share = System::IO::FileShare::ReadWrite;
+
+		stream = System::IO::File::Open(filename, mode, access, share);
+
 	} catch (System::IO::IOException* e) {
 		MR_io_exception = e;
 	}
@@ -3809,11 +3824,12 @@
         if (!stream) {
                 return 0;
         } else {
-		stream = new System::IO::BufferedStream(stream);
-		
 		// we initialize the `reader' and `writer' fields to null;
 		// they will be filled in later if they are needed.
-                mf = mercury_file_init(stream, NULL, NULL, file_encoding);
+                mf = mercury_file_init(
+			new System::IO::BufferedStream(stream),
+			NULL, NULL, file_encoding);
+		mf->raw_stream = stream;
                 return mf;
         }
 }
@@ -4309,6 +4325,11 @@
 static void
 mercury_close(MR_MercuryFile mf)
 {
+	static int close_count = 0;
+	close_count++;
+	System::Console::Out->WriteLine(System::String::Concat(
+		S""[close: #"", S""]""));
+
 	if (mf->reader) {
 		mf->reader->Close();
 		mf->reader = NULL;
@@ -4319,6 +4340,10 @@
 	}
 	mf->stream->Close();
 	mf->stream = NULL;
+	if (mf->raw_stream) {
+		mf->raw_stream->Close();
+		mf->raw_stream = NULL;
+	}
 }
 
 ").
Index: library/lexer.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/lexer.m,v
retrieving revision 1.36
diff -u -d -u -r1.36 lexer.m
--- library/lexer.m	9 Jul 2002 01:30:18 -0000	1.36
+++ library/lexer.m	14 Feb 2003 20:19:50 -0000
@@ -38,7 +38,15 @@
 	;	junk(char)		% junk character in the input stream
 	;	error(string)		% some other invalid token
 	;	io_error(io__error)	% error reading from the input stream
-	;	eof.			% end-of-file
+	;	eof			% end-of-file
+	;	integer_dot(int).	% the lexer will never return this.
+					% The integer_dot/1 token is used
+					% internally in the lexer, to keep
+					% the grammar LL(1) so that only one
+					% character of pushback is needed.
+					% But the lexer will convert
+					% integer_dot/1 tokens to integer/1
+					% tokens before returning them.
 
 % For every token, we record the line number of the line on
 % which the token occurred.
@@ -158,6 +166,9 @@
 	string__append("I/O error: ", IO_ErrorMessage, String).
 lexer__token_to_string(error(Message), String) :-
 	string__append_list(["illegal token (", Message, ")"], String).
+lexer__token_to_string(integer_dot(Int), String) :-
+	string__int_to_string(Int, IntString),
+	string__append_list(["integer `", IntString, "'."], String).
 
 	% We build the tokens up as lists of characters in reverse order.
 	% When we get to the end of each token, we call
@@ -171,13 +182,25 @@
 
 lexer__get_token_list(Tokens) -->
 	lexer__get_token(Token, Context),
-	( { Token = eof } ->
+	lexer__get_token_list_2(Token, Context, Tokens).
+
+:- pred lexer__get_token_list_2(token, token_context, token_list,
+		io__state, io__state).
+:- mode lexer__get_token_list_2(in, in, out, di, uo) is det.
+lexer__get_token_list_2(Token0, Context0, Tokens) -->
+	( { Token0 = eof } ->
 		{ Tokens = token_nil }
-	; { Token = end ; Token = error(_) ; Token = io_error(_) } ->
-		{ Tokens = token_cons(Token, Context, token_nil) }
+	; { Token0 = end ; Token0 = error(_) ; Token0 = io_error(_) } ->
+		{ Tokens = token_cons(Token0, Context0, token_nil) }
+	; { Token0 = integer_dot(Int) } ->
+		lexer__get_context(Context1),
+		lexer__get_dot(Token1),
+		lexer__get_token_list_2(Token1, Context1, Tokens1),
+		{ Tokens = token_cons(integer(Int), Context0, Tokens1) }
 	;
-		{ Tokens = token_cons(Token, Context, Tokens1) },
-		lexer__get_token_list(Tokens1)
+		lexer__get_token(Token1, Context1),
+		lexer__get_token_list_2(Token1, Context1, Tokens1),
+		{ Tokens = token_cons(Token0, Context0, Tokens1) }
 	).
 
 lexer__string_get_token_list(String, Tokens) -->
@@ -1741,8 +1764,17 @@
 			lexer__get_float_decimals([Char, '.' | Chars], Token)
 		;
 			io__putback_char(Char),
-			io__putback_char('.'),
-			{ lexer__rev_char_list_to_int(Chars, 10, Token) }
+			% We can't putback the ".", because io__putback_char
+			% only guarantees one character of pushback.
+			% So instead, we return an `integer_dot' token;
+			% the main loop of lexer__get_token_list_2 will
+			% handle this appropriately.
+			{ lexer__rev_char_list_to_int(Chars, 10, Token0) },
+			{ Token0 = integer(Int) ->
+				Token = integer_dot(Int)
+			;
+				Token = Token0
+			}
 		)
 	).
 
Index: library/parser.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/parser.m,v
retrieving revision 1.39
diff -u -d -u -r1.39 parser.m
--- library/parser.m	12 Feb 2003 04:58:24 -0000	1.39
+++ library/parser.m	14 Feb 2003 20:19:50 -0000
@@ -866,6 +866,7 @@
 parser__could_start_term(error(_), no).
 parser__could_start_term(io_error(_), no).
 parser__could_start_term(eof, no).
+parser__could_start_term(integer_dot(_), no).
 
 %-----------------------------------------------------------------------------%
 
cvs server: Diffing profiler
Index: profiler/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/mercury/profiler/Mmakefile,v
retrieving revision 1.22
diff -u -d -u -r1.22 Mmakefile
--- profiler/Mmakefile	23 Jan 2003 00:24:12 -0000	1.22
+++ profiler/Mmakefile	14 Feb 2003 20:19:50 -0000
@@ -35,11 +35,12 @@
 # Add some additional dependencies, so that Mmake knows to remake the
 # profiler if one of the libraries changes.
 
+ifneq ($(findstring il,$(GRADE)),il)        
 mercury_profile: $(RUNTIME_DIR)/lib$(RT_LIB_NAME).$A
 mercury_profile: $(LIBRARY_DIR)/lib$(STD_LIB_NAME).$A
-# Should also depend on $(BOEHM_GC_DIR)/libgc(_prof).$A, but only
-# if in .gc(.prof) grade; GNU make does not support dynamic dependencies,
-# so just leave it out.
+# XXX Should also depend on $(BOEHM_GC_DIR)/libgc(_prof).$A, but only
+# if in .gc(.prof) grade.
+endif
 
 $(cs_subdir)mercury_profile_init.c: $(UTIL_DIR)/mkinit
 
cvs server: Diffing robdd
cvs server: Diffing runtime
Index: runtime/mercury_il.il
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_il.il,v
retrieving revision 1.18
diff -u -d -u -r1.18 mercury_il.il
--- runtime/mercury_il.il	10 Feb 2003 18:03:16 -0000	1.18
+++ runtime/mercury_il.il	14 Feb 2003 20:19:50 -0000
@@ -257,6 +257,7 @@
 get_ftn_ptr_ref_compare() {
 	ldftn void ['mercury'] 'mercury'.'private_builtin__cpp_code'.'mercury_code'::
 	do_compare__ref_1_0(
+		class [mscorlib]System.Object[],
 		class [mscorlib]System.Object[]&,
 		class [mscorlib]System.Object, class [mscorlib]System.Object)
 	ret
@@ -266,6 +267,7 @@
 get_ftn_ptr_ref_unify() {
 	ldftn int32 ['mercury'] 'mercury'.'private_builtin__cpp_code'.'mercury_code'::
 	do_unify__ref_1_0(
+		class [mscorlib]System.Object[],
 		class [mscorlib]System.Object, class [mscorlib]System.Object)
 	ret
 }
cvs server: Diffing runtime/GETOPT
cvs server: Diffing runtime/machdeps
cvs server: Diffing samples
Index: samples/interpreter.m
===================================================================
RCS file: /home/mercury1/repository/mercury/samples/interpreter.m,v
retrieving revision 1.5
diff -u -d -u -r1.5 interpreter.m
--- samples/interpreter.m	4 Nov 1999 03:16:52 -0000	1.5
+++ samples/interpreter.m	14 Feb 2003 20:19:50 -0000
@@ -23,6 +23,8 @@
 :- interface.
 :- import_module io.
 
+:- type zzzzzz ---> aaa ; bbb.
+
 :- pred main(io__state, io__state).
 :- mode main(di, uo) is det.
 
cvs server: Diffing samples/c_interface
cvs server: Diffing samples/c_interface/c_calls_mercury
cvs server: Diffing samples/c_interface/cplusplus_calls_mercury
cvs server: Diffing samples/c_interface/mercury_calls_c
cvs server: Diffing samples/c_interface/mercury_calls_cplusplus
cvs server: Diffing samples/c_interface/mercury_calls_fortran
cvs server: Diffing samples/c_interface/simpler_c_calls_mercury
cvs server: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
cvs server: Diffing samples/diff
cvs server: Diffing samples/muz
cvs server: Diffing samples/rot13
cvs server: Diffing samples/solutions
cvs server: Diffing samples/tests
cvs server: Diffing samples/tests/c_interface
cvs server: Diffing samples/tests/c_interface/c_calls_mercury
cvs server: Diffing samples/tests/c_interface/cplusplus_calls_mercury
cvs server: Diffing samples/tests/c_interface/mercury_calls_c
cvs server: Diffing samples/tests/c_interface/mercury_calls_cplusplus
cvs server: Diffing samples/tests/c_interface/mercury_calls_fortran
cvs server: Diffing samples/tests/c_interface/simpler_c_calls_mercury
cvs server: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
cvs server: Diffing samples/tests/diff
cvs server: Diffing samples/tests/muz
cvs server: Diffing samples/tests/rot13
cvs server: Diffing samples/tests/solutions
cvs server: Diffing samples/tests/toplevel
cvs server: Diffing scripts
cvs server: Diffing tests
cvs server: Diffing tests/benchmarks
cvs server: Diffing tests/debugger
cvs server: Diffing tests/debugger/declarative
cvs server: Diffing tests/dppd
cvs server: Diffing tests/general
cvs server: Diffing tests/general/accumulator
cvs server: Diffing tests/general/string_format
cvs server: Diffing tests/general/structure_reuse
cvs server: Diffing tests/grade_subdirs
cvs server: Diffing tests/hard_coded
cvs server: Diffing tests/hard_coded/exceptions
cvs server: Diffing tests/hard_coded/purity
cvs server: Diffing tests/hard_coded/sub-modules
cvs server: Diffing tests/hard_coded/typeclasses
cvs server: Diffing tests/invalid
cvs server: Diffing tests/invalid/purity
cvs server: Diffing tests/misc_tests
cvs server: Diffing tests/mmc_make
cvs server: Diffing tests/mmc_make/lib
cvs server: Diffing tests/recompilation
cvs server: Diffing tests/tabling
cvs server: Diffing tests/term
cvs server: Diffing tests/valid
cvs server: Diffing tests/warnings
cvs server: Diffing tools
Index: tools/bootcheck
===================================================================
RCS file: /home/mercury1/repository/mercury/tools/bootcheck,v
retrieving revision 1.145
diff -u -d -u -r1.145 bootcheck
--- tools/bootcheck	26 Jan 2003 13:41:29 -0000	1.145
+++ tools/bootcheck	14 Feb 2003 20:19:59 -0000
@@ -323,9 +323,11 @@
 case $use_subdirs in
 	yes)	cs_subdir=Mercury/cs/
 		ss_subdir=Mercury/ss/
+		ils_subdir=Mercury/ils/
 		;;
 	no)	cs_subdir=
 		ss_subdir=
+		ils_subdir=
 		;;
 esac
 
@@ -342,6 +344,17 @@
 		# then we need to copy the profiler directory.
 		# So to be safe, we just enable this by default.
 		copy_profiler=true
+		;;
+esac
+case $grade in
+	il|ilc)	target_ext=il
+		target_subdir=$ils_subdir
+		target_opt=
+		# See comment above
+		copy_profiler=true
+		# The IL back-end generates native Windows executables,
+		# which do not understand symlinks.  So we need to use cp.
+		use_cp=true
 		;;
 esac
 
cvs server: Diffing trace
cvs server: Diffing util
cvs server: Diffing vim
cvs server: Diffing vim/after
cvs server: Diffing vim/ftplugin
cvs server: Diffing vim/syntax
-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list