Commit Graph

6 Commits

Author SHA1 Message Date
Julien Fischer
1f6d83692a Update programming style in tests/hard_coded.
tests/hard_coded/*.m:
    Update programming style, unless doing so would change
    the meaning of the test, in particular:

    - use '.' as a module qualifier in place of '__'
    - use {write,print}_line where appropriate
    - use if-then-else in place of C -> T ; E
    - use state variables in place of DCGs

tests/hard_coded/dir_test.m:
    Document what the expected outputs correspond to.

    Use a uniform module qualifier in the output.

tests/hard_coded/dir_test.exp*:
    Conform to the above change.
2021-01-07 13:58:12 +11:00
Zoltan Somogyi
f0ffbbc13c Convert (C->T;E) to (if C then T else E). 2015-12-01 05:35:29 +11:00
Peter Wang
5ca9c4f411 Finish implementation of dir.m for Erlang backend.
Estimated hours taken: 6
Branches: main

Finish implementation of dir.m for Erlang backend.

library/dir.m:
	Change the procedures in this module to thread `dir.stream' values
	through them.  In the Erlang backend a `dir.stream' is a list of file
	names in a directory, rather than a handle, so an output argument is
	needed when reading an entry from the stream.

	Implement the missing foreign_procs for Erlang.

library/io.m:
	Make the Erlang implementation of `io.file_type' support symlinks.

	Implement `file_id' support for Erlang.

	Fix the C implementation of compare on `file_id's, which did not take
	into account file inodes at all.

	Fix error handling in the Erlang implementation of
	`io.make_symlink_2'.

tests/hard_coded/dir_test.exp2:
	Update expected output for the fixed `file_id' comparison.

tests/hard_coded/dir_test.exp3:
	Update expected output for a previous change (addition of
	`dir.current_directory').
2007-10-01 05:40:43 +00:00
Peter Wang
1bba7cdb37 Add a predicate to return the current working directory, currently
Estimated hours taken: 1.5
Branches: main

NEWS:
library/dir.m:
	Add a predicate to return the current working directory, currently
	implemented for C and Erlang backends.

library/io.m:
	Add supporting functions to create io.res(string) values from foreign
	code.

tests/hard_coded/dir_test.exp:
tests/hard_coded/dir_test.exp2:
tests/hard_coded/dir_test.m:
	Test the new predicate.
2007-09-21 03:21:36 +00:00
Simon Taylor
1fb5180051 Fix formatting of output.
Estimated hours taken: 1
Branches: main

tests/hard_coded/dir_test.{m,exp,exp2,exp3}:
	Fix formatting of output.
	Fix expected output.
2003-07-28 15:50:45 +00:00
Simon Taylor
89a4d190c5 Library changes required to make the compiler work on Windows
Estimated hours taken: 120
Branches: main

Library changes required to make the compiler work on Windows
without Cygwin.  (Compiler changes to come separately).

library/dir.m:
	Handle Windows-style paths.

	Change the determinism of dir.basename and dir.split_name.
	dir.basename now fails for root directories (a new function
	dir.basename_det calls error/1 rather than failing).
	dir.split_name fails for root directories or if the pathname
	passed doesn't contain a directory separator.

	Add predicates dir.make_directory, dir.path_name_is_absolute
	and dir.path_name_is_root_directory.

	Add a multi predicate dir.is_directory separator which
	returns all separators for the platform (including '/' on
	Windows), not just the standard one.

	Add a function dir.parent_directory (returns "..").

	Add dir.foldl2 and dir.recursive_foldl2, to iterate through
	the entries in a directory (and maybe its subdirectories).

	Change '/' to correctly handle Windows paths of the form
	"C:"/"foo" and "\"/"foo".

	Don't add repeated directory separators in '/'.

library/io.m:
	Add io.file_type and io.check_file_accessibility.

	Add predicates to deal with symlinks -- io.have_symlinks,
	io.make_symlink and io.follow_symlink.

	Add io.file_id for use by dir.foldl2 to detect
	symlink loops. This is a bit low level, so it's
	not included in the user documentation.

	Add io.(binary_)input_stream_foldl2_io_maybe_stop, which
	is like io.(binary_)input_stream_foldl2_io, but allows
	stopping part of the way through. This is useful for
	implementing `diff'-like functionality to replace
	mercury_update_interface.

	Use Windows-style paths when generating temporary file
	names on Windows.

	Add versions of the predicates to generate error messages
	to handle Win32 errors.

	Add versions of the predicates to generate error messages
	which take a system error code, rather than looking up
	errno. This simplifies things where the error we
	are interested in was not from the last system call.

library/exception.m:
	Add a predicate finally/6 which performs the same function
	as the `finally' clause in languages such as C# and Java.

	Add predicates try_det, try_io_det and try_store_det,
	which only have one mode so they are more convenient
	to pass to promise_only solution.

library/Mmakefile:
	Add dependencies on runtime/mercury_conf.h for files which
	use the MR_HAVE_* macros.

library/string.m:
	Add a function version of string__index.

NEWS:
	Document the new predicates and functions and the change
	of determinism of dir.split_name and dir.basename.

configure.in:
runtime/mercury_conf.h.in:
	Test for lstat, mkdir, symlink and readlink.

runtime/mercury_conf_param.h:
	Add a macro MR_BROKEN_ST_INO, which is true if the st_ino
	field of `struct stat' is garbage. Currently defined iff
	MR_WIN32 is defined.

compiler/compile_target_code.m:
compiler/modules.m:
compiler/options_file.m:
compiler/prog_io.m:
compiler/source_file_map.m:
	Changes required by the change of determinism of
	dir.split_name and dir.basename.

tests/hard_coded/Mmakefile:
tests/hard_coded/dir_test.{m,exp,exp2}:
	Test case.
2003-07-21 14:08:42 +00:00