DarcsURL: http://darcs.haskell.org/ghc-6.6/packages/base MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_" --=_ Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Wed Apr 25 01:35:54 =93=8C=8B=9E (=95W=8F=80=8E=9E) 2007 shelarcy@gmail.co= m * Use "Wide" API if System has it to support "wide" character's FilePath Wed Apr 25 13:08:43 =93=8C=8B=9E (=95W=8F=80=8E=9E) 2007 shelarcy <shelarc= y@gmail.com> * fix typo in "Wide" API support --=_ Content-Type: text/x-darcs-patch; name="use-_wide_-api-if-system-has-it-to-support-_wide_-character_s-filepath.dpatch" Content-Transfer-Encoding: quoted-printable Content-Description: A darcs patch for your repository! New patches: [Use "Wide" API if System has it to support "wide" character's FilePath shelarcy@gmail.com**20070424163554] { hunk ./GHC/Handle.hs 787 +#if defined(mingw32_HOST_OS) || HAVE_WOPEN + withCWString filepath $ \ f -> +#else hunk ./GHC/Handle.hs 791 +#endif hunk ./GHC/Handle.hs 871 +#if defined(mingw32_HOST_OS) || HAVE_WOPEN + fd <- withCWString filepath $ \ f -> +#else hunk ./GHC/Handle.hs 875 +#endif hunk ./System/Directory.hs 156 +#if defined(mingw32_HOST_OS) || HAVE_WACESS + withCWString name $ \s -> do +#else hunk ./System/Directory.hs 160 +#endif hunk ./System/Directory.hs 190 +#if defined(mingw32_HOST_OS) || HAVE_WCHMOD + withCWString name $ \p_name -> do +#else hunk ./System/Directory.hs 194 +#endif hunk ./System/Directory.hs 212 +#if defined(mingw32_HOST_OS) || HAVE_WCHMOD + withCWString source $ \p_source -> do + withCWString dest $ \p_dest -> do +#else hunk ./System/Directory.hs 218 +#endif hunk ./System/Directory.hs 266 +#if defined(mingw32_HOST_OS) || HAVE_WMKDIR + withCWString path $ \s -> do +#else hunk ./System/Directory.hs 270 +#endif hunk ./System/Directory.hs 341 +#if defined(mingw32_HOST_OS) || HAVE_WRMDIR + withCWString path $ \s -> +#else hunk ./System/Directory.hs 345 +#endif hunk ./System/Directory.hs 405 +#if defined(mingw32_HOST_OS) || HAVE_WUNLINK + withCWString path $ \s -> +#else hunk ./System/Directory.hs 409 +#endif hunk ./System/Directory.hs 469 - +#if defined(mingw32_HOST_OS) || HAVE_WRENAME + withCWString opath $ \s1 -> + withCWString npath $ \s2 -> +#else hunk ./System/Directory.hs 474 - withCString npath $ \s2 -> + withCString npath $ \s2 -> +#endif hunk ./System/Directory.hs 530 - +#if defined(mingw32_HOST_OS) || HAVE_WRENAME + withCWString opath $ \s1 -> + withCWString npath $ \s2 -> +#else hunk ./System/Directory.hs 535 - withCString npath $ \s2 -> + withCString npath $ \s2 -> +#endif hunk ./System/Directory.hs 610 +#if defined(mingw32_HOST_OS) || HAVE_WREALPATH + withCWString fpath $ \pInPath -> +#else hunk ./System/Directory.hs 614 +#endif hunk ./System/Directory.hs 622 +#if defined(mingw32_HOST_OS) || HAVE_WREALPATH + peekCWString pOutPath +#else hunk ./System/Directory.hs 626 +#endif hunk ./System/Directory.hs 629 -foreign import stdcall unsafe "GetFullPathNameA" - c_GetFullPathName :: CString +foreign import stdcall unsafe "GetFullPathNameW" + c_GetFullPathName :: CWString hunk ./System/Directory.hs 632 - -> CString - -> Ptr CString + -> CWString + -> Ptr CWString hunk ./System/Directory.hs 635 +#elif HAVE_WREALPATH +foreign import ccall unsafe "wrealpath" + c_realpath :: CWString + -> CWString + -> IO CWString hunk ./System/Directory.hs 660 - withCString binary $ \c_binary -> - withCString ('.':exeExtension) $ \c_ext -> + withCWString binary $ \c_binary -> + withCWString ('.':exeExtension) $ \c_ext -> hunk ./System/Directory.hs 666 - then do fpath <- peekCString pOutPath + then do fpath <- peekCWString pOutPath hunk ./System/Directory.hs 670 -foreign import stdcall unsafe "SearchPathA" - c_SearchPath :: CString - -> CString - -> CString +foreign import stdcall unsafe "SearchPathW" + c_SearchPath :: CWString + -> CWString + -> CWString hunk ./System/Directory.hs 675 - -> CString - -> Ptr CString + -> CWString + -> Ptr CWString hunk ./System/Directory.hs 736 - (withCString path $ \s -> = +#if defined(mingw32_HOST_OS) || HAVE_WOPENDIR + (withCWString path $ \s -> = +#else + (withCString path $ \s -> +#endif hunk ./System/Directory.hs 757 +#if defined(mingw32_HOST_OS) || HAVE_WREADDIR + entry <- (d_name dEnt >>=3D peekCWString) +#else hunk ./System/Directory.hs 761 +#endif hunk ./System/Directory.hs 807 +#if defined(mingw32_HOST_OS) || HAVE_WGETCWD + then do s <- peekCWString p' +#else hunk ./System/Directory.hs 811 +#endif hunk ./System/Directory.hs 856 +#if defined(mingw32_HOST_OS) || HAVE_WCHDIR + withCWString path $ \s -> = +#else hunk ./System/Directory.hs 860 +#endif hunk ./System/Directory.hs 905 +#if defined(mingw32_HOST_OS) || HAVE_WSTAT + withCWString (fileNameEndClean name) $ \s -> do +#else hunk ./System/Directory.hs 909 +#endif hunk ./System/Directory.hs 917 +#if defined(mingw32_HOST_OS) || HAVE_WLSTAT || HAVE_WSTAT + withCWString name $ \s -> do +#else hunk ./System/Directory.hs 921 +#endif hunk ./System/Directory.hs 990 - peekCString pPath + peekCWString pPath hunk ./System/Directory.hs 1028 - s <- peekCString pPath + s <- peekCWString pPath hunk ./System/Directory.hs 1062 - peekCString pPath + peekCWString pPath hunk ./System/Directory.hs 1098 - peekCString pPath + peekCWString pPath hunk ./System/Directory.hs 1109 - -> CString = + -> CWString = hunk ./System/Directory.hs 1116 -foreign import stdcall unsafe "GetTempPathA" c_GetTempPath :: CInt -> CStr= ing -> IO CInt +foreign import stdcall unsafe "GetTempPathW" c_GetTempPath :: CInt -> CWSt= ring -> IO CInt hunk ./System/Posix/Internals.hs 93 +#if (defined(mingw32_HOST_OS) || defined(__MINGW32__)) || HAVE_WSTAT + withCWString file $ \p_file -> do +#else hunk ./System/Posix/Internals.hs 97 +#endif hunk ./System/Posix/Internals.hs 314 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _waccess" +#elif HAVE_WACCESS +foreign import ccall unsafe "HsBase.h waccess" +#else hunk ./System/Posix/Internals.hs 320 +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WACCESS + c_access :: CWString -> CInt -> IO CInt +#else hunk ./System/Posix/Internals.hs 325 +#endif hunk ./System/Posix/Internals.hs 327 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wchmod" +#elif HAVE_WCHMOD +foreign import ccall unsafe "HsBase.h wchmod" +#else hunk ./System/Posix/Internals.hs 333 +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WCHMOD + c_chmod :: CWString -> CMode -> IO CInt +#else hunk ./System/Posix/Internals.hs 338 +#endif hunk ./System/Posix/Internals.hs 340 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wchdir" +#elif HAVE_WCHDIR +foreign import ccall unsafe "HsBase.h wchdir" +#else hunk ./System/Posix/Internals.hs 346 +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WCHDIR + c_chdir :: CWString -> IO CInt +#else hunk ./System/Posix/Internals.hs 351 +#endif hunk ./System/Posix/Internals.hs 356 -foreign import ccall unsafe "HsBase.h closedir" = +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wclosedir" +#elif HAVE_WCLOSEDIR +foreign import ccall unsafe "HsBase.h wclosedir" +#else +foreign import ccall unsafe "HsBase.h closedir" +#endif hunk ./System/Posix/Internals.hs 377 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wgetcwd" +#elif HAVE_WGETCWD +foreign import ccall unsafe "HsBase.h wgetcwd" +#else hunk ./System/Posix/Internals.hs 383 +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WGETCWD + c_getcwd :: Ptr CWchar -> CSize -> IO (Ptr CWchar) +#else hunk ./System/Posix/Internals.hs 388 +#endif hunk ./System/Posix/Internals.hs 397 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WLSTAT || HAV= E_WSTAT + lstat :: CWString -> Ptr CStat -> IO CInt +#else hunk ./System/Posix/Internals.hs 401 +#endif hunk ./System/Posix/Internals.hs 404 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WOPEN + c_open :: CWString -> CInt -> CMode -> IO CInt +#else hunk ./System/Posix/Internals.hs 408 +#endif hunk ./System/Posix/Internals.hs 410 -foreign import ccall unsafe "HsBase.h opendir" = - c_opendir :: CString -> IO (Ptr CDir) +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wopendir" +#elif HAVE_WOPENDIR +foreign import ccall unsafe "HsBase.h wopendir" +#else +foreign import ccall unsafe "HsBase.h opendir" +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WOPENDIR + c_opendir :: CWString -> IO (Ptr CDir) +#else + c_opendir :: CString -> IO (Ptr CDir) +#endif hunk ./System/Posix/Internals.hs 424 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WMKDIR + mkdir :: CWString -> CInt -> IO CInt +#else hunk ./System/Posix/Internals.hs 428 +#endif hunk ./System/Posix/Internals.hs 434 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WRENAME + c_rename :: CWString -> CWString -> IO CInt +#else hunk ./System/Posix/Internals.hs 438 +#endif hunk ./System/Posix/Internals.hs 443 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wrmdir" +#elif HAVE_WRMDIR +foreign import ccall unsafe "HsBase.h wrmdir" +#else hunk ./System/Posix/Internals.hs 449 +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WRMDIR + c_rmdir :: CWString -> IO CInt +#else hunk ./System/Posix/Internals.hs 454 +#endif hunk ./System/Posix/Internals.hs 457 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WSTAT + c_stat :: CWString -> Ptr CStat -> IO CInt +#else hunk ./System/Posix/Internals.hs 461 +#endif hunk ./System/Posix/Internals.hs 472 +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) +foreign import ccall unsafe "HsBase.h _wunlink" +#elif HACE_WUNLINK +foreign import ccall unsafe "HsBase.h wunlink" +#else hunk ./System/Posix/Internals.hs 478 +#endif +#if defined(mingw32_HOST_OS) || defined(__MINGW32__) || HAVE_WUNLINK + c_unlink :: CWString -> IO CInt +#else hunk ./System/Posix/Internals.hs 483 +#endif hunk ./System/Posix/Internals.hs 501 -foreign import ccall unsafe "HsBase.h link" +#if HAVE_WLINK +foreign import ccall unsafe "HsBase.h wlink" + c_link :: CWString -> CWString -> IO CInt +#else +foreign import ccall unsafe "HsBase.h wlink" hunk ./System/Posix/Internals.hs 507 +#endif hunk ./System/Posix/Internals.hs 558 +#if defined(mingw32_HOST_OS) || HAVE_WREAD_DIR + d_name :: Ptr CDirent -> IO CWString +#else hunk ./System/Posix/Internals.hs 562 +#endif hunk ./System/Process/Internals.hs 239 - maybeWith withCString mb_cwd $ \pWorkDir -> do + maybeWith withCWString mb_cwd $ \pWorkDir -> do hunk ./System/Process/Internals.hs 243 - withCString cmdline $ \pcmdline -> do + withCWString cmdline $ \pcmdline -> do hunk ./System/Process/Internals.hs 251 - :: CString - -> CString + :: CWString + -> CWString hunk ./System/Process/Internals.hs 427 - in withCString env' (act . castPtr) + in withCWString env' (act . castPtr) hunk ./System/Process.hs 193 - withCString cmdline $ \pcmdline -> + withCWString cmdline $ \pcmdline -> hunk ./System/Process.hs 198 - maybeWith withCString workDir $ \pWorkDir -> do + maybeWith withCWString workDir $ \pWorkDir -> do hunk ./System/Process.hs 210 - :: CString = - -> CString + :: CWString = + -> CWString hunk ./cbits/dirUtils.c 63 -#if HAVE_READDIR_R +#if HAVE_READDIR_R || HAVE_WREADDIR_R +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) + struct _wdirent* p; +#elif HAVE_WDIRENT + struct wdirent* p; +#else hunk ./cbits/dirUtils.c 70 +#endif hunk ./cbits/dirUtils.c 86 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) + p =3D (struct _wdirent*)malloc(sizeof(struct _wdirent) + nm_max); +#elif HAVE_WREADDIR + P =3D (struct wdirent*)malloc(sizeof(struct wdirent) + nm_max); +#else hunk ./cbits/dirUtils.c 92 +#endif hunk ./cbits/dirUtils.c 94 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) + res =3D _wreaddir_r(dirPtr, p, pDirEnt); +#elif HAVE_WREADDIR_R + res =3D wreaddir_r(dirPtr, p, pDirEnt); +#else hunk ./cbits/dirUtils.c 100 +#endif hunk ./cbits/dirUtils.c 116 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) + *pDirEnt =3D _wreaddir(dirPtr); +#elif HAVE_WREADDIR + *pDirEnt =3D wreaddir(dirPtr); +#else hunk ./cbits/dirUtils.c 122 +#endif hunk ./cbits/dirUtils.c 141 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) || HAVE_W= RENAME +__hscore_renameFile( wchar_t *src, wchar_t *dest) +#else hunk ./cbits/dirUtils.c 145 +#endif hunk ./cbits/dirUtils.c 151 - if (MoveFileA(src, dest)) { + if (MoveFileW(src, dest)) { hunk ./cbits/dirUtils.c 158 - if ( !GetFileAttributes(dest) ) { + if ( !GetFileAttributesW(dest) ) { hunk ./cbits/dirUtils.c 176 - if ( MoveFileExA(src, dest, MOVEFILE_REPLACE_EXISTING) ) { + if ( MoveFileExW(src, dest, MOVEFILE_REPLACE_EXISTING) ) { hunk ./cbits/dirUtils.c 186 - if (DeleteFileA(dest)) { - if (MoveFileA(src,dest)) { + if (DeleteFileW(dest)) { + if (MoveFileW(src,dest)) { hunk ./cbits/dirUtils.c 197 +#elif HAVE_WRENAME + return wrename(src,dest); hunk ./cbits/dirUtils.c 212 -typedef HRESULT (*HSCORE_GETAPPFOLDERFUNTY)(HWND,int,HANDLE,DWORD,char*); +typedef HRESULT (*HSCORE_GETAPPFOLDERFUNTY)(HWND,int,HANDLE,DWORD,wchar_t*= ); hunk ./cbits/dirUtils.c 218 - char* pszPath) + wchar_t* pszPath) hunk ./cbits/runProcess.c 311 -runProcess (char *cmd, char *workingDirectory, void *environment, +runProcess (wchar_t *cmd, wchar_t *workingDirectory, void *environment, hunk ./cbits/runProcess.c 341 - if (!CreateProcess(NULL, cmd, NULL, NULL, TRUE, flags, environment, worki= ngDirectory, &sInfo, &pInfo)) + if (!CreateProcessW(NULL, cmd, NULL, NULL, TRUE, flags, environment, work= ingDirectory, &sInfo, &pInfo)) hunk ./cbits/runProcess.c 352 -runInteractiveProcess (char *cmd, char *workingDirectory, void *environmen= t, +runInteractiveProcess (wchar_t *cmd, wchar_t *workingDirectory, void *envi= ronment, hunk ./cbits/runProcess.c 387 - if (!CreateProcess(NULL, cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, environ= ment, workingDirectory, &sInfo, &pInfo)) + if (!CreateProcessW(NULL, cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, enviro= nment, workingDirectory, &sInfo, &pInfo)) hunk ./configure.ac 31 + +dnl Unixs systems have just partial "wide" api insted of all "wide" api. +dnl But Windows (MinGW) has that. +AC_CHECK_FUNCS([wlstat wstat wopen wrename wmkdir wreaddir wreaddir_r wrea= lpath waccess wchmod wchdir wclosedir wgetcwd wcopendir wrmdir wunlink wlin= k]) +AC_CHECK_TYPES([wdirent]) hunk ./include/HsBase.h 465 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) || HAVE_W= MKDIR +__hscore_mkdir( wchar_t *pathName, int mode ) +#else hunk ./include/HsBase.h 469 +#endif hunk ./include/HsBase.h 472 - return mkdir(pathName); + return _wmkdir(pathName); +#elif HAVE_WMKDIR + return wmkdir(pathName,mode); hunk ./include/HsBase.h 481 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) || HAVE_W= STAT || HAVE_WLSTAT +__hscore_lstat( const wchar_t *fname, struct stat *st ) +#else hunk ./include/HsBase.h 485 +#endif hunk ./include/HsBase.h 488 +#if HAVE_WLSTAT + return wlstat(fname, st); +#else hunk ./include/HsBase.h 492 +#endif +#else +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) + return _wstat(fname, st); +#elif HAVE_WSTAT + return wstat(fname, st); hunk ./include/HsBase.h 501 +#endif hunk ./include/HsBase.h 534 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) +INLINE wchar_t * +__hscore_d_name( struct _wdirent* d ) +#elif HAVE_WDIRENT +INLINE wchar_t * +__hscore_d_name( struct wdirent* d ) +#else hunk ./include/HsBase.h 543 +#endif hunk ./include/HsBase.h 706 +#if defined(__MINGW32__) || HAVE_WOPEN +INLINE int __hscore_open(wchar_t *file, int how, mode_t mode) { +#else hunk ./include/HsBase.h 710 +#endif hunk ./include/HsBase.h 713 - return _sopen(file,how,_SH_DENYRW,mode); + return _wsopen(file,how,_SH_DENYRW,mode); hunk ./include/HsBase.h 715 - return _sopen(file,how,_SH_DENYWR,mode); + return _wsopen(file,how,_SH_DENYWR,mode); +#elif HAVE_WOPEN + return wopen(file,how,mode); hunk ./include/HsBase.h 731 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) || HAVE_W= STAT +INLINE int __hscore_stat(wchar_t *file, struct stat *buf) { +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) + return (_wstat(file,buf)); +#else + return (wstat(file,buf)); +#endif +} +#else hunk ./include/HsBase.h 743 +#endif hunk ./include/dirUtils.h 10 +#if defined(_MSC_VER) || defined(__MINGW32__) || defined(_WIN32) || HAVE_W= RENAME +extern int __hscore_renameFile(wchar_t *src, wchar_t *dest); +#else hunk ./include/dirUtils.h 14 +#endif hunk ./include/dirUtils.h 21 - char* pszPath); + wchar_t* pszPath); hunk ./include/runProcess.h 31 -extern ProcHandle runProcess( char *cmd, = - char *workingDirectory, void *environment, = +extern ProcHandle runProcess( wchar_t *cmd, = + wchar_t *workingDirectory, void *environment, = hunk ./include/runProcess.h 35 -extern ProcHandle runInteractiveProcess( char *cmd, = - char *workingDirectory, = +extern ProcHandle runInteractiveProcess( wchar_t *cmd, = + wchar_t *workingDirectory, = } [fix typo in "Wide" API support shelarcy <shelarcy@gmail.com>**20070425040843] { hunk ./System/Posix/Internals.hs 505 -foreign import ccall unsafe "HsBase.h wlink" +foreign import ccall unsafe "HsBase.h link" } Context: [Bump version number to 2.1.1 Ian Lynagh <igloo@earth.li>**20070422163350] = [Some people (e.g. binary) are using the stg_ names, so revert the change t= o hs_ Ian Lynagh <igloo@earth.li>**20070422162751 They probably shouldn't be, but it's simplest not to change them for now. ] = [fix ugly uses of memcpy foreign import inside ST Simon Marlow <simonmar@microsoft.com>**20070405083758 fixes cg026 ] = [Convert some fd's to CInts on Windows Ian Lynagh <igloo@earth.li>**20070404235132] = [stg_* -> hs_* Ian Lynagh <igloo@earth.li>**20070405000723] = [HsByteArray doesn't exist Ian Lynagh <igloo@earth.li>**20070404234642] = [Don't use Fd/FD in foreign decls Ian Lynagh <igloo@earth.li>**20070404164305 Using CInt makes it much easier to verify that it is right, and we won't get caught out by possible newtype switches between CInt/Int. ] = [HsByteArray doesn't exist Ian Lynagh <igloo@earth.li>**20070404155748] = [MERGED: Fix C/Haskell type mismatches Ian Lynagh <igloo@earth.li>**20070404144220] = [MERGED: Fix type mismatches between foreign imports and HsBase.h Ian Lynagh <igloo@earth.li>**20070404135908] = [Function crossMapP for fixing desugaring of comprehensions Manuel M T Chakravarty <chak@cse.unsw.edu.au>**20070402082906 = Merge into 6.6 branch. ] = [Fix the type of wgencat Ian Lynagh <igloo@earth.li>**20070329164223] = [fix strictness of foldr/build rule for take, see #1219 Simon Marlow <simonmar@microsoft.com>**20070327103941] = [Prevent duplication of unsafePerformIO on a multiprocessor Simon Marlow <simonmar@microsoft.com>**20070306145424 Fixes #986. The idea is to add a new operation = noDuplicate :: IO () = it is guaranteed that if two threads have executed noDuplicate, then they are not duplicating any computation. = We now provide two new unsafe operations: = unsafeDupablePerformIO :: IO a -> a unsafeDupableInterleaveIO :: IO a -> IO a = which are equivalent to the old unsafePerformIO and unsafeInterleaveIO respectively. The new versions of these functions are defined as: = unsafePerformIO m =3D unsafeDupablePerformIO (noDuplicate >> m) unsafeInterleaveIO m =3D unsafeDupableInterleaveIO (noDuplicate >> m) ] = [Fixed PArr.dropP Manuel M T Chakravarty <chak@cse.unsw.edu.au>**20070222032405 - Thanks to Audrey Tang for the bug report ] = [GHC.PArr: add bounds checking Manuel M T Chakravarty <chak@cse.unsw.edu.au>**20070302053224] = [PArr: fixed permutations Manuel M T Chakravarty <chak@cse.unsw.edu.au>**20070305055807] = [copyBytes copies bytes, not elements; fixes trac #1203 Ian Lynagh <igloo@earth.li>**20070312113555] = [fix race condition in prodServiceThread Simon Marlow <simonmar@microsoft.com>**20070307134330 See #1187 ] = [MERGED: Keep the same FD in both halves of a duplex handle when dup'ing Ian Lynagh <igloo@earth.li>**20070220141712 Tue Feb 20 14:10:39 GMT 2007 Ian Lynagh <igloo@earth.li> Otherwise we only close one of the FDs when closing the handle. Fixes trac #1149. ] = [fix for hashString, from Jan-Willem Maessen (see #1137) Simon Marlow <simonmar@microsoft.com>**20070215094304 = ] = [fix to getUSecOfDay(): arithmetic was overflowing Simon Marlow <simonmar@microsoft.com>**20070214161719] = [The Windows counterpart to 'wrapround of thread delays' Ian Lynagh <igloo@earth.li>**20070209173510] = [wrapround of thread delays Neil Davies <SemanticPhilosopher@gmail.com>**20070129160519 = * made the wrapround of the underlying O/S occur before the wrapround of the delayed threads by making threads delay in microseconds since O/S epoch (1970 - Unix, 1601 - Windows) stored in Word64. * removed redundant calls reading O/S realtime clock * removed rounding to 1/50th of sec for timers * Only for Unix version of scheduler. ] = [dos2unix Simon Marlow <simonmar@microsoft.com>**20061204095439] = [fix threadDelay Simon Marlow <simonmar@microsoft.com>**20070117091702 In "Add support for the IO manager thread" I accidentally spammed part of "Make sure the threaded threadDelay sleeps at least as long as it is asked", which is why the ThreadDelay001 test has been failing. ] = [Use static inline rather than extern inline/inline Ian Lynagh <igloo@earth.li>**20070205203628 I understand this is more portable, and it also fixes warnings when C things we are wrapping are themselves static inlines (which FD_ISSET is on ppc OS X). ] = [add doc pointers to Foldable Ross Paterson <ross@soi.city.ac.uk>**20070202110931 = Could be applied to STABLE. ] = [Don't require GHC/Prim.hs when booting from HC files Ian Lynagh <igloo@earth.li>**20070119135114] = [Added examples, more detailed documentation to Data.List Extracting sublis= ts functions Andriy Palamarchuk <apa3a@yahoo.com>**20061204164710] = [Fix crash with (minBound :: Int*) `div (-1) as result is maxBound + 1. Ian Lynagh <igloo@earth.li>**20070115142005] = [update section on "blocking" Simon Marlow <simonmar@microsoft.com>**20070116124328] = [don't try to compile this on Unix Simon Marlow <simonmar@microsoft.com>**20061204095427] = [Add support for the IO manager thread on Windows Simon Marlow <simonmar@microsoft.com>**20061201152042 Fixes #637. The test program in that report now works for me with -threaded, but it doesn't work without -threaded (I don't know if that's new behaviour or not, though). ] = [documentation for installHandler Simon Marlow <simonmar@microsoft.com>**20061205154927 merge to 6.6 ] = [Fix missing comma in Fractional documentation Alec Berryman <alec@thened.net>**20061201173237] = [Make sure the threaded threadDelay sleeps at least as long as it is asked = to Ian Lynagh <igloo@earth.li>**20061128204807] = [Update documentation for hWaitForInput Simon Marlow <simonmar@microsoft.com>**20061107111430 See #972 Merge to 6.6 branch. ] = [`par` should be infixr 0 Simon Marlow <simonmar@microsoft.com>**20061027130800 Alas, I didn't spot this due to lack of testing, and the symptom is that an expression like x `par` y `seq z will have exactly the wrong parallelism properties. The workaround is to add parantheses. = I think we could push this to the 6.6 branch. ] = [TAG 6.6 release Ian Lynagh <igloo@earth.li>**20061011124740] = Patch bundle hash: a39cd956fcc335af2e2f0189a76096cb6db538b8 --=_-- .