From patchwork Wed Dec 8 23:57:51 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Iain Buclaw X-Patchwork-Id: 1565537 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=mw0QKxR2; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4J8Z41060Kz9sVq for ; Thu, 9 Dec 2021 11:02:57 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1B4A73858435 for ; Thu, 9 Dec 2021 00:02:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1B4A73858435 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1639008174; bh=WFgZsTycHlUJ/wwaK0uDbTF6XnSaaIl/sQnWNDNiPuk=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=mw0QKxR2K3xWWetg+1mcy6U+qG4VOlq31e4KGQt0SF96e3JGPjeFbb1Os4I9Kckim k6rIKa9DodTBSzOyaKsT03YwlbXontjuHj1rAQlvoyXAsh/G6YHSmW4DRzWTe9fynN nIdUsD1yUdo+aZgkQXwVb0UHniJM4xMJf5kgCbSA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout-p-201.mailbox.org (mout-p-201.mailbox.org [80.241.56.171]) by sourceware.org (Postfix) with ESMTPS id A30B43858426 for ; Wed, 8 Dec 2021 23:58:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A30B43858426 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:105:465:1:3:0]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-201.mailbox.org (Postfix) with ESMTPS id 4J8YyR17JhzQjhc; Thu, 9 Dec 2021 00:58:07 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de To: gcc-patches@gcc.gnu.org Subject: [committed 3/4] d: Merge upstream druntime 178c44ff Date: Thu, 9 Dec 2021 00:57:51 +0100 Message-Id: <20211208235751.3256809-1-ibuclaw@gdcproject.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Iain Buclaw via Gcc-patches From: Iain Buclaw Reply-To: Iain Buclaw Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" Hi, This patch merges the D run-time libraries with upstream druntime 178c44ff. Druntime changes: - Import druntime v2.098.0 - Fix broken import in core.sys.linux.perf_event module (PR103558). Bootstrapped and regression tested on x86_64-linux-gnu/-m32/-mx32, and committed to mainline. Regards, Iain. --- libphobos/ChangeLog: PR d/103558 * libdruntime/MERGE: Merge upstream druntime 178c44ff. * libdruntime/Makefile.am (DRUNTIME_DSOURCES_LINUX): Add core/sys/linux/syscalls.d. (DRUNTIME_DSOURCES_OPENBSD): Add core/sys/openbsd/pthread_np.d. * libdruntime/Makefile.in: Regenerate. * src/MERGE: Merge upstream phobos 574bf883b. * src/Makefile.am (D_EXTRA_DFLAGS): Add -fpreview=fieldwise. * src/Makefile.in: Regenerate. * testsuite/libphobos.exceptions/assert_fail.d: Update test. * testsuite/libphobos.betterc/test22336.d: New test. --- libphobos/libdruntime/MERGE | 2 +- libphobos/libdruntime/Makefile.am | 18 +- libphobos/libdruntime/Makefile.in | 34 +- libphobos/libdruntime/core/demangle.d | 98 +++ libphobos/libdruntime/core/exception.d | 19 +- .../core/internal/array/construction.d | 55 +- libphobos/libdruntime/core/internal/atomic.d | 24 +- libphobos/libdruntime/core/internal/dassert.d | 2 +- .../core/internal/gc/impl/conservative/gc.d | 279 ++++++- libphobos/libdruntime/core/internal/gc/os.d | 44 +- libphobos/libdruntime/core/internal/hash.d | 9 +- .../libdruntime/core/internal/parseoptions.d | 2 +- libphobos/libdruntime/core/internal/traits.d | 8 +- .../libdruntime/core/internal/util/array.d | 49 ++ libphobos/libdruntime/core/lifetime.d | 4 +- libphobos/libdruntime/core/runtime.d | 1 + libphobos/libdruntime/core/stdc/stdlib.d | 2 +- libphobos/libdruntime/core/sync/rwmutex.d | 418 +++++++++- .../libdruntime/core/sys/freebsd/config.d | 4 +- libphobos/libdruntime/core/sys/linux/fs.d | 63 +- .../libdruntime/core/sys/linux/perf_event.d | 2 - .../libdruntime/core/sys/linux/sys/mman.d | 32 +- .../libdruntime/core/sys/linux/syscalls.d | 745 ++++++++++++++++++ libphobos/libdruntime/core/sys/linux/unistd.d | 26 +- .../libdruntime/core/sys/openbsd/dlfcn.d | 4 +- .../libdruntime/core/sys/openbsd/pthread_np.d | 23 + .../libdruntime/core/sys/openbsd/stdlib.d | 8 +- .../libdruntime/core/sys/openbsd/string.d | 6 + .../libdruntime/core/sys/openbsd/sys/mman.d | 6 +- .../libdruntime/core/sys/openbsd/sys/sysctl.d | 3 +- .../libdruntime/core/sys/openbsd/unistd.d | 2 +- libphobos/libdruntime/core/sys/posix/netdb.d | 1 + .../libdruntime/core/sys/posix/sys/filio.d | 12 + .../libdruntime/core/sys/posix/sys/ioccom.d | 56 ++ .../libdruntime/core/sys/posix/sys/ioctl.d | 7 + .../libdruntime/core/sys/posix/sys/mman.d | 1 + .../libdruntime/core/sys/posix/sys/socket.d | 3 +- .../libdruntime/core/sys/posix/sys/ttycom.d | 101 +++ libphobos/libdruntime/core/sys/posix/time.d | 5 - .../libdruntime/core/sys/windows/accctrl.d | 2 +- .../libdruntime/core/sys/windows/aclapi.d | 2 +- .../libdruntime/core/sys/windows/aclui.d | 2 +- .../libdruntime/core/sys/windows/basetsd.d | 2 +- .../libdruntime/core/sys/windows/basetyps.d | 2 +- .../libdruntime/core/sys/windows/cderr.d | 2 +- .../libdruntime/core/sys/windows/cguid.d | 2 +- .../libdruntime/core/sys/windows/comcat.d | 2 +- .../libdruntime/core/sys/windows/commctrl.d | 2 +- .../libdruntime/core/sys/windows/commdlg.d | 2 +- libphobos/libdruntime/core/sys/windows/core.d | 2 +- libphobos/libdruntime/core/sys/windows/cpl.d | 2 +- .../libdruntime/core/sys/windows/cplext.d | 2 +- .../libdruntime/core/sys/windows/custcntl.d | 2 +- libphobos/libdruntime/core/sys/windows/dbt.d | 2 +- libphobos/libdruntime/core/sys/windows/dde.d | 2 +- .../libdruntime/core/sys/windows/ddeml.d | 76 +- .../libdruntime/core/sys/windows/dhcpcsdk.d | 2 +- libphobos/libdruntime/core/sys/windows/dlgs.d | 2 +- libphobos/libdruntime/core/sys/windows/dll.d | 6 +- .../libdruntime/core/sys/windows/docobj.d | 2 +- .../libdruntime/core/sys/windows/errorrep.d | 2 +- .../libdruntime/core/sys/windows/exdisp.d | 2 +- .../libdruntime/core/sys/windows/exdispid.d | 2 +- .../libdruntime/core/sys/windows/httpext.d | 2 +- .../libdruntime/core/sys/windows/idispids.d | 2 +- .../libdruntime/core/sys/windows/imagehlp.d | 2 +- libphobos/libdruntime/core/sys/windows/imm.d | 2 +- .../libdruntime/core/sys/windows/intshcut.d | 2 +- .../libdruntime/core/sys/windows/ipexport.d | 2 +- .../libdruntime/core/sys/windows/iphlpapi.d | 2 +- .../libdruntime/core/sys/windows/ipifcons.d | 2 +- .../libdruntime/core/sys/windows/iprtrmib.d | 2 +- .../libdruntime/core/sys/windows/iptypes.d | 2 +- .../libdruntime/core/sys/windows/isguids.d | 2 +- libphobos/libdruntime/core/sys/windows/lm.d | 2 +- .../libdruntime/core/sys/windows/lmaccess.d | 2 +- .../libdruntime/core/sys/windows/lmalert.d | 2 +- .../libdruntime/core/sys/windows/lmapibuf.d | 2 +- libphobos/libdruntime/core/sys/windows/lmat.d | 2 +- .../libdruntime/core/sys/windows/lmaudit.d | 2 +- .../libdruntime/core/sys/windows/lmbrowsr.d | 2 +- .../libdruntime/core/sys/windows/lmchdev.d | 2 +- .../libdruntime/core/sys/windows/lmconfig.d | 2 +- .../libdruntime/core/sys/windows/lmcons.d | 2 +- .../libdruntime/core/sys/windows/lmerr.d | 2 +- .../libdruntime/core/sys/windows/lmerrlog.d | 2 +- .../libdruntime/core/sys/windows/lmmsg.d | 2 +- .../libdruntime/core/sys/windows/lmremutl.d | 2 +- .../libdruntime/core/sys/windows/lmrepl.d | 2 +- .../libdruntime/core/sys/windows/lmserver.d | 2 +- .../libdruntime/core/sys/windows/lmshare.d | 2 +- .../libdruntime/core/sys/windows/lmsname.d | 2 +- .../libdruntime/core/sys/windows/lmstats.d | 2 +- .../libdruntime/core/sys/windows/lmsvc.d | 2 +- .../libdruntime/core/sys/windows/lmuse.d | 2 +- .../libdruntime/core/sys/windows/lmuseflg.d | 2 +- .../libdruntime/core/sys/windows/lmwksta.d | 2 +- .../libdruntime/core/sys/windows/lzexpand.d | 2 +- libphobos/libdruntime/core/sys/windows/mapi.d | 2 +- .../libdruntime/core/sys/windows/mciavi.d | 2 +- libphobos/libdruntime/core/sys/windows/mcx.d | 2 +- .../libdruntime/core/sys/windows/mgmtapi.d | 2 +- .../libdruntime/core/sys/windows/mmsystem.d | 2 +- .../libdruntime/core/sys/windows/msacm.d | 2 +- .../libdruntime/core/sys/windows/mshtml.d | 2 +- .../libdruntime/core/sys/windows/mswsock.d | 2 +- libphobos/libdruntime/core/sys/windows/nb30.d | 2 +- .../libdruntime/core/sys/windows/nddeapi.d | 2 +- .../libdruntime/core/sys/windows/nspapi.d | 2 +- .../libdruntime/core/sys/windows/ntdef.d | 2 +- .../libdruntime/core/sys/windows/ntdll.d | 2 +- .../libdruntime/core/sys/windows/ntldap.d | 2 +- .../libdruntime/core/sys/windows/ntsecapi.d | 2 +- .../libdruntime/core/sys/windows/ntsecpkg.d | 2 +- .../libdruntime/core/sys/windows/oaidl.d | 2 +- .../libdruntime/core/sys/windows/objbase.d | 2 +- .../libdruntime/core/sys/windows/objfwd.d | 2 +- .../libdruntime/core/sys/windows/objidl.d | 2 +- .../libdruntime/core/sys/windows/objsafe.d | 2 +- .../libdruntime/core/sys/windows/ocidl.d | 2 +- .../libdruntime/core/sys/windows/odbcinst.d | 2 +- libphobos/libdruntime/core/sys/windows/ole.d | 2 +- libphobos/libdruntime/core/sys/windows/ole2.d | 2 +- .../libdruntime/core/sys/windows/ole2ver.d | 2 +- .../libdruntime/core/sys/windows/oleacc.d | 2 +- .../libdruntime/core/sys/windows/oleauto.d | 2 +- .../libdruntime/core/sys/windows/olectl.d | 2 +- .../libdruntime/core/sys/windows/olectlid.d | 2 +- .../libdruntime/core/sys/windows/oledlg.d | 2 +- .../libdruntime/core/sys/windows/oleidl.d | 2 +- libphobos/libdruntime/core/sys/windows/pbt.d | 2 +- .../libdruntime/core/sys/windows/powrprof.d | 2 +- .../libdruntime/core/sys/windows/prsht.d | 2 +- .../libdruntime/core/sys/windows/psapi.d | 2 +- libphobos/libdruntime/core/sys/windows/rapi.d | 2 +- libphobos/libdruntime/core/sys/windows/ras.d | 2 +- .../libdruntime/core/sys/windows/rasdlg.d | 2 +- .../libdruntime/core/sys/windows/raserror.d | 2 +- .../libdruntime/core/sys/windows/rassapi.d | 2 +- .../libdruntime/core/sys/windows/reason.d | 2 +- .../libdruntime/core/sys/windows/regstr.d | 2 +- .../libdruntime/core/sys/windows/richedit.d | 2 +- .../libdruntime/core/sys/windows/richole.d | 2 +- libphobos/libdruntime/core/sys/windows/rpc.d | 2 +- .../libdruntime/core/sys/windows/rpcdce.d | 2 +- .../libdruntime/core/sys/windows/rpcdce2.d | 2 +- .../libdruntime/core/sys/windows/rpcdcep.d | 2 +- .../libdruntime/core/sys/windows/rpcndr.d | 2 +- .../libdruntime/core/sys/windows/rpcnsi.d | 2 +- .../libdruntime/core/sys/windows/rpcnsip.d | 2 +- .../libdruntime/core/sys/windows/rpcnterr.d | 2 +- .../libdruntime/core/sys/windows/schannel.d | 2 +- .../libdruntime/core/sys/windows/sdkddkver.d | 2 +- .../libdruntime/core/sys/windows/secext.d | 2 +- .../libdruntime/core/sys/windows/security.d | 2 +- .../libdruntime/core/sys/windows/servprov.d | 2 +- .../libdruntime/core/sys/windows/setupapi.d | 2 +- .../libdruntime/core/sys/windows/shellapi.d | 2 +- .../libdruntime/core/sys/windows/shldisp.d | 2 +- .../libdruntime/core/sys/windows/shlguid.d | 2 +- .../libdruntime/core/sys/windows/shlobj.d | 2 +- .../libdruntime/core/sys/windows/shlwapi.d | 2 +- libphobos/libdruntime/core/sys/windows/snmp.d | 2 +- libphobos/libdruntime/core/sys/windows/sql.d | 2 +- .../libdruntime/core/sys/windows/sqlext.d | 2 +- .../libdruntime/core/sys/windows/sqltypes.d | 2 +- .../libdruntime/core/sys/windows/sqlucode.d | 2 +- libphobos/libdruntime/core/sys/windows/sspi.d | 2 +- .../core/sys/windows/stdc/malloc.d | 2 +- .../libdruntime/core/sys/windows/subauth.d | 2 +- .../libdruntime/core/sys/windows/tlhelp32.d | 2 +- .../libdruntime/core/sys/windows/tmschema.d | 2 +- .../libdruntime/core/sys/windows/unknwn.d | 2 +- libphobos/libdruntime/core/sys/windows/vfw.d | 2 +- .../libdruntime/core/sys/windows/w32api.d | 2 +- .../libdruntime/core/sys/windows/winbase.d | 2 +- .../libdruntime/core/sys/windows/winber.d | 2 +- .../libdruntime/core/sys/windows/wincon.d | 2 +- .../libdruntime/core/sys/windows/wincrypt.d | 2 +- .../libdruntime/core/sys/windows/windef.d | 2 +- .../libdruntime/core/sys/windows/windows.d | 2 +- .../libdruntime/core/sys/windows/winerror.d | 2 +- .../libdruntime/core/sys/windows/wingdi.d | 2 +- .../libdruntime/core/sys/windows/winhttp.d | 2 +- .../libdruntime/core/sys/windows/wininet.d | 2 +- .../libdruntime/core/sys/windows/winioctl.d | 2 +- .../libdruntime/core/sys/windows/winldap.d | 2 +- .../libdruntime/core/sys/windows/winnetwk.d | 2 +- .../libdruntime/core/sys/windows/winnls.d | 2 +- .../libdruntime/core/sys/windows/winnt.d | 2 +- .../libdruntime/core/sys/windows/winperf.d | 2 +- .../libdruntime/core/sys/windows/winreg.d | 2 +- .../libdruntime/core/sys/windows/winspool.d | 2 +- .../libdruntime/core/sys/windows/winsvc.d | 2 +- .../libdruntime/core/sys/windows/winuser.d | 2 +- .../libdruntime/core/sys/windows/winver.d | 2 +- .../libdruntime/core/sys/windows/wtsapi32.d | 2 +- .../libdruntime/core/sys/windows/wtypes.d | 2 +- libphobos/libdruntime/core/thread/fiber.d | 8 +- libphobos/libdruntime/core/thread/osthread.d | 1 + libphobos/libdruntime/core/time.d | 34 +- libphobos/libdruntime/object.d | 78 +- libphobos/libdruntime/rt/aApplyR.d | 11 - libphobos/libdruntime/rt/aaA.d | 6 +- libphobos/libdruntime/rt/dmain2.d | 4 +- .../testsuite/libphobos.betterc/test22336.d | 19 + .../libphobos.exceptions/assert_fail.d | 12 + 207 files changed, 2302 insertions(+), 445 deletions(-) create mode 100644 libphobos/libdruntime/core/sys/linux/syscalls.d create mode 100644 libphobos/libdruntime/core/sys/openbsd/pthread_np.d create mode 100644 libphobos/testsuite/libphobos.betterc/test22336.d diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE index 11bef0f3388..d0d3a25ad1e 100644 --- a/libphobos/libdruntime/MERGE +++ b/libphobos/libdruntime/MERGE @@ -1,4 +1,4 @@ -e6caaab9d359198b760c698dcb6d253afb3f81f6 +178c44ff362902af589603767055cfac89215652 The first line of this file holds the git revision number of the last merge done from the dlang/druntime repository. diff --git a/libphobos/libdruntime/Makefile.am b/libphobos/libdruntime/Makefile.am index 80c7567079a..44d4fe16be0 100644 --- a/libphobos/libdruntime/Makefile.am +++ b/libphobos/libdruntime/Makefile.am @@ -280,8 +280,9 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \ core/sys/linux/sys/procfs.d core/sys/linux/sys/signalfd.d \ core/sys/linux/sys/socket.d core/sys/linux/sys/sysinfo.d \ core/sys/linux/sys/time.d core/sys/linux/sys/xattr.d \ - core/sys/linux/termios.d core/sys/linux/time.d \ - core/sys/linux/timerfd.d core/sys/linux/tipc.d core/sys/linux/unistd.d + core/sys/linux/syscalls.d core/sys/linux/termios.d \ + core/sys/linux/time.d core/sys/linux/timerfd.d core/sys/linux/tipc.d \ + core/sys/linux/unistd.d DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \ core/sys/netbsd/err.d core/sys/netbsd/execinfo.d \ @@ -294,12 +295,13 @@ DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \ DRUNTIME_DSOURCES_OPENBSD = core/sys/openbsd/dlfcn.d \ core/sys/openbsd/err.d core/sys/openbsd/execinfo.d \ - core/sys/openbsd/stdlib.d core/sys/openbsd/string.d \ - core/sys/openbsd/sys/cdefs.d core/sys/openbsd/sys/elf.d \ - core/sys/openbsd/sys/elf32.d core/sys/openbsd/sys/elf64.d \ - core/sys/openbsd/sys/elf_common.d core/sys/openbsd/sys/link_elf.d \ - core/sys/openbsd/sys/mman.d core/sys/openbsd/sys/sysctl.d \ - core/sys/openbsd/time.d core/sys/openbsd/unistd.d + core/sys/openbsd/pthread_np.d core/sys/openbsd/stdlib.d \ + core/sys/openbsd/string.d core/sys/openbsd/sys/cdefs.d \ + core/sys/openbsd/sys/elf.d core/sys/openbsd/sys/elf32.d \ + core/sys/openbsd/sys/elf64.d core/sys/openbsd/sys/elf_common.d \ + core/sys/openbsd/sys/link_elf.d core/sys/openbsd/sys/mman.d \ + core/sys/openbsd/sys/sysctl.d core/sys/openbsd/time.d \ + core/sys/openbsd/unistd.d DRUNTIME_DSOURCES_POSIX = core/sys/posix/aio.d \ core/sys/posix/arpa/inet.d core/sys/posix/config.d \ diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in index b5f29da8540..84be8082f7a 100644 --- a/libphobos/libdruntime/Makefile.in +++ b/libphobos/libdruntime/Makefile.in @@ -343,10 +343,10 @@ am__objects_14 = core/sys/netbsd/dlfcn.lo core/sys/netbsd/err.lo \ core/sys/netbsd/sys/sysctl.lo core/sys/netbsd/time.lo @DRUNTIME_OS_NETBSD_TRUE@am__objects_15 = $(am__objects_14) am__objects_16 = core/sys/openbsd/dlfcn.lo core/sys/openbsd/err.lo \ - core/sys/openbsd/execinfo.lo core/sys/openbsd/stdlib.lo \ - core/sys/openbsd/string.lo core/sys/openbsd/sys/cdefs.lo \ - core/sys/openbsd/sys/elf.lo core/sys/openbsd/sys/elf32.lo \ - core/sys/openbsd/sys/elf64.lo \ + core/sys/openbsd/execinfo.lo core/sys/openbsd/pthread_np.lo \ + core/sys/openbsd/stdlib.lo core/sys/openbsd/string.lo \ + core/sys/openbsd/sys/cdefs.lo core/sys/openbsd/sys/elf.lo \ + core/sys/openbsd/sys/elf32.lo core/sys/openbsd/sys/elf64.lo \ core/sys/openbsd/sys/elf_common.lo \ core/sys/openbsd/sys/link_elf.lo core/sys/openbsd/sys/mman.lo \ core/sys/openbsd/sys/sysctl.lo core/sys/openbsd/time.lo \ @@ -367,9 +367,9 @@ am__objects_18 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \ core/sys/linux/sys/procfs.lo core/sys/linux/sys/signalfd.lo \ core/sys/linux/sys/socket.lo core/sys/linux/sys/sysinfo.lo \ core/sys/linux/sys/time.lo core/sys/linux/sys/xattr.lo \ - core/sys/linux/termios.lo core/sys/linux/time.lo \ - core/sys/linux/timerfd.lo core/sys/linux/tipc.lo \ - core/sys/linux/unistd.lo + core/sys/linux/syscalls.lo core/sys/linux/termios.lo \ + core/sys/linux/time.lo core/sys/linux/timerfd.lo \ + core/sys/linux/tipc.lo core/sys/linux/unistd.lo @DRUNTIME_OS_LINUX_TRUE@am__objects_19 = $(am__objects_18) am__objects_20 = core/sys/windows/accctrl.lo \ core/sys/windows/aclapi.lo core/sys/windows/aclui.lo \ @@ -944,8 +944,9 @@ DRUNTIME_DSOURCES_LINUX = core/sys/linux/config.d \ core/sys/linux/sys/procfs.d core/sys/linux/sys/signalfd.d \ core/sys/linux/sys/socket.d core/sys/linux/sys/sysinfo.d \ core/sys/linux/sys/time.d core/sys/linux/sys/xattr.d \ - core/sys/linux/termios.d core/sys/linux/time.d \ - core/sys/linux/timerfd.d core/sys/linux/tipc.d core/sys/linux/unistd.d + core/sys/linux/syscalls.d core/sys/linux/termios.d \ + core/sys/linux/time.d core/sys/linux/timerfd.d core/sys/linux/tipc.d \ + core/sys/linux/unistd.d DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \ core/sys/netbsd/err.d core/sys/netbsd/execinfo.d \ @@ -958,12 +959,13 @@ DRUNTIME_DSOURCES_NETBSD = core/sys/netbsd/dlfcn.d \ DRUNTIME_DSOURCES_OPENBSD = core/sys/openbsd/dlfcn.d \ core/sys/openbsd/err.d core/sys/openbsd/execinfo.d \ - core/sys/openbsd/stdlib.d core/sys/openbsd/string.d \ - core/sys/openbsd/sys/cdefs.d core/sys/openbsd/sys/elf.d \ - core/sys/openbsd/sys/elf32.d core/sys/openbsd/sys/elf64.d \ - core/sys/openbsd/sys/elf_common.d core/sys/openbsd/sys/link_elf.d \ - core/sys/openbsd/sys/mman.d core/sys/openbsd/sys/sysctl.d \ - core/sys/openbsd/time.d core/sys/openbsd/unistd.d + core/sys/openbsd/pthread_np.d core/sys/openbsd/stdlib.d \ + core/sys/openbsd/string.d core/sys/openbsd/sys/cdefs.d \ + core/sys/openbsd/sys/elf.d core/sys/openbsd/sys/elf32.d \ + core/sys/openbsd/sys/elf64.d core/sys/openbsd/sys/elf_common.d \ + core/sys/openbsd/sys/link_elf.d core/sys/openbsd/sys/mman.d \ + core/sys/openbsd/sys/sysctl.d core/sys/openbsd/time.d \ + core/sys/openbsd/unistd.d DRUNTIME_DSOURCES_POSIX = core/sys/posix/aio.d \ core/sys/posix/arpa/inet.d core/sys/posix/config.d \ @@ -1616,6 +1618,7 @@ core/sys/openbsd/$(am__dirstamp): core/sys/openbsd/dlfcn.lo: core/sys/openbsd/$(am__dirstamp) core/sys/openbsd/err.lo: core/sys/openbsd/$(am__dirstamp) core/sys/openbsd/execinfo.lo: core/sys/openbsd/$(am__dirstamp) +core/sys/openbsd/pthread_np.lo: core/sys/openbsd/$(am__dirstamp) core/sys/openbsd/stdlib.lo: core/sys/openbsd/$(am__dirstamp) core/sys/openbsd/string.lo: core/sys/openbsd/$(am__dirstamp) core/sys/openbsd/sys/$(am__dirstamp): @@ -1672,6 +1675,7 @@ core/sys/linux/sys/socket.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/sysinfo.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/time.lo: core/sys/linux/sys/$(am__dirstamp) core/sys/linux/sys/xattr.lo: core/sys/linux/sys/$(am__dirstamp) +core/sys/linux/syscalls.lo: core/sys/linux/$(am__dirstamp) core/sys/linux/termios.lo: core/sys/linux/$(am__dirstamp) core/sys/linux/time.lo: core/sys/linux/$(am__dirstamp) core/sys/linux/timerfd.lo: core/sys/linux/$(am__dirstamp) diff --git a/libphobos/libdruntime/core/demangle.d b/libphobos/libdruntime/core/demangle.d index ad9b44a1ee5..33ca0ddc7bd 100644 --- a/libphobos/libdruntime/core/demangle.d +++ b/libphobos/libdruntime/core/demangle.d @@ -346,6 +346,13 @@ pure @safe: } + void popFront(int i) + { + while (i--) + popFront(); + } + + void match( char val ) { test( val ); @@ -636,6 +643,7 @@ pure @safe: TypeDelegate TypeNone TypeVoid + TypeNoreturn TypeByte TypeUbyte TypeShort @@ -715,6 +723,9 @@ pure @safe: TypeVoid: v + TypeNoreturn + Nn + TypeByte: g @@ -873,6 +884,10 @@ pure @safe: popFront(); switch ( front ) { + case 'n': // Noreturn + popFront(); + put("noreturn"); + return dst[beg .. len]; case 'g': // Wild (Ng Type) popFront(); // TODO: Anything needed here? @@ -1164,9 +1179,11 @@ pure @safe: case 'g': case 'h': case 'k': + case 'n': // NOTE: The inout parameter type is represented as "Ng". // The vector parameter type is represented as "Nh". // The return parameter type is represented as "Nk". + // The noreturn parameter type is represented as "Nn". // These make it look like a FuncAttr, but infact // if we see these, then we know we're really in // the parameter list. Rewind and break. @@ -1217,6 +1234,59 @@ pure @safe: break; } putComma(n); + + /* Do special return, scope, ref, out combinations + */ + int npops; + if ( 'M' == front && peek(1) == 'N' && peek(2) == 'k') + { + const c3 = peek(3); + if (c3 == 'J') + { + put("scope return out "); // MNkJ + npops = 4; + } + else if (c3 == 'K') + { + put("scope return ref "); // MNkK + npops = 4; + } + } + else if ('N' == front && peek(1) == 'k') + { + const c2 = peek(2); + if (c2 == 'J') + { + put("return out "); // NkJ + npops = 3; + } + else if (c2 == 'K') + { + put("return ref "); // NkK + npops = 3; + } + else if (c2 == 'M') + { + const c3 = peek(3); + if (c3 == 'J') + { + put("return scope out "); // NkMJ + npops = 4; + } + else if (c3 == 'K') + { + put("return scope ref "); // NkMK + npops = 4; + } + else + { + put("return scope "); // NkM + npops = 3; + } + } + } + popFront(npops); + if ( 'M' == front ) { popFront(); @@ -2558,6 +2628,15 @@ else `nothrow @trusted ulong std.algorithm.iteration.FilterResult!(std.typecons.Tuple!(int, "a", int, "b", int, "c").` ~`Tuple.rename!([0:"c", 2:"a"]).rename().__lambda1, int[]).FilterResult.__xtoHash(ref const(std.algorithm.iteration.` ~`FilterResult!(std.typecons.Tuple!(int, "a", int, "b", int, "c").Tuple.rename!([0:"c", 2:"a"]).rename().__lambda1, int[]).FilterResult))`], + + ["_D4test4rrs1FKPiZv", "void test.rrs1(ref int*)"], + ["_D4test4rrs1FMNkJPiZv", "void test.rrs1(scope return out int*)"], + ["_D4test4rrs1FMNkKPiZv", "void test.rrs1(scope return ref int*)"], + ["_D4test4rrs1FNkJPiZv", "void test.rrs1(return out int*)"], + ["_D4test4rrs1FNkKPiZv", "void test.rrs1(return ref int*)"], + ["_D4test4rrs1FNkMJPiZv", "void test.rrs1(return scope out int*)"], + ["_D4test4rrs1FNkMKPiZv", "void test.rrs1(return scope ref int*)"], + ["_D4test4rrs1FNkMPiZv", "void test.rrs1(return scope int*)"], ]; @@ -2621,6 +2700,25 @@ unittest assert(s.demangle == expected); } +// https://issues.dlang.org/show_bug.cgi?id=22235 +unittest +{ + enum parent = __MODULE__ ~ '.' ~ __traits(identifier, __traits(parent, {})); + + static noreturn abort() { assert(false); } + assert(demangle(abort.mangleof) == "pure nothrow @nogc @safe noreturn " ~ parent ~ "().abort()"); + + static void accept(noreturn) {} + assert(demangle(accept.mangleof) == "pure nothrow @nogc @safe void " ~ parent ~ "().accept(noreturn)"); + + static void templ(T)(T, T) {} + assert(demangle(templ!noreturn.mangleof) == "pure nothrow @nogc @safe void " ~ parent ~ "().templ!(noreturn).templ(noreturn, noreturn)"); + + static struct S(T) {} + static void aggr(S!noreturn) { assert(0); } + assert(demangle(aggr.mangleof) == "pure nothrow @nogc @safe void " ~ parent ~ "().aggr(" ~ parent ~ "().S!(noreturn).S)"); +} + /* * */ diff --git a/libphobos/libdruntime/core/exception.d b/libphobos/libdruntime/core/exception.d index fe298d4a09f..a6928660773 100644 --- a/libphobos/libdruntime/core/exception.d +++ b/libphobos/libdruntime/core/exception.d @@ -97,7 +97,7 @@ class ArrayIndexError : RangeError this.length = length; // Constructing the message is a bit clumsy: - // It's essentially `printf("index [%zu] exceeds array of length [%zu]", index, length)`, + // It's essentially `printf("index [%zu] is out of bounds for array of length [%zu]", index, length)`, // but even `snprintf` isn't `pure`. // Also string concatenation isn't `@nogc`, and casting to/from immutable isn't `@safe` import core.internal.string : unsignedToTempString; @@ -106,8 +106,7 @@ class ArrayIndexError : RangeError char[] sink = buf[]; sink.rangeMsgPut("index ["); sink.rangeMsgPut(unsignedToTempString!10(index, tmpBuf)); - sink.rangeMsgPut("]"); - sink.rangeMsgPut(" exceeds array of length "); + sink.rangeMsgPut("] is out of bounds for array of length "); sink.rangeMsgPut(unsignedToTempString!10(length, tmpBuf)); this.msgBuf = buf; super(msgBuf[0..$-sink.length], file, line, next); @@ -116,7 +115,7 @@ class ArrayIndexError : RangeError @safe pure unittest { - assert(new ArrayIndexError(900, 700).msg == "index [900] exceeds array of length 700"); + assert(new ArrayIndexError(900, 700).msg == "index [900] is out of bounds for array of length 700"); // Ensure msg buffer doesn't overflow on large numbers assert(new ArrayIndexError(size_t.max, size_t.max-1).msg); } @@ -836,12 +835,24 @@ extern (C) onArraySliceError(lower, upper, length, file[0 .. strlen(file)], line); } + /// ditto + void _d_arraybounds_slice(string file, uint line, size_t lower, size_t upper, size_t length) + { + onArraySliceError(lower, upper, length, file, line); + } + /// Called when an out of range array index is accessed void _d_arraybounds_indexp(immutable(char*) file, uint line, size_t index, size_t length) { import core.stdc.string : strlen; onArrayIndexError(index, length, file[0 .. strlen(file)], line); } + + /// ditto + void _d_arraybounds_index(string file, uint line, size_t index, size_t length) + { + onArrayIndexError(index, length, file, line); + } } // TLS storage shared for all errors, chaining might create circular reference diff --git a/libphobos/libdruntime/core/internal/array/construction.d b/libphobos/libdruntime/core/internal/array/construction.d index b58ed51557f..9c8223767e1 100644 --- a/libphobos/libdruntime/core/internal/array/construction.d +++ b/libphobos/libdruntime/core/internal/array/construction.d @@ -9,44 +9,50 @@ */ module core.internal.array.construction; +import core.internal.traits : Unqual; + /** * Does array initialization (not assignment) from another array of the same element type. * Params: - * to = what array to initialize * from = what data the array should be initialized with * Returns: - * The constructed `to` + * The created and initialized array `to` * Bugs: * This function template was ported from a much older runtime hook that bypassed safety, * purity, and throwabilty checks. To prevent breaking existing code, this function template * is temporarily declared `@trusted` until the implementation can be brought up to modern D expectations. */ -Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted +Tarr1 _d_arrayctor(Tarr1 : T1[], Tarr2 : T2[], T1, T2)(scope Tarr2 from) @trusted + if (is(Unqual!T1 == Unqual!T2)) { pragma(inline, false); - import core.internal.traits : hasElaborateCopyConstructor, Unqual; + import core.internal.traits : hasElaborateCopyConstructor; import core.lifetime : copyEmplace; import core.stdc.string : memcpy; - debug(PRINTF) import core.stdc.stdio; + import core.stdc.stdint : uintptr_t; + debug(PRINTF) import core.stdc.stdio : printf; + + debug(PRINTF) printf("_d_arrayctor(to = %p,%d, from = %p,%d) size = %d\n", from.ptr, from.length, to.ptr, to.length, T1.tsize); + + Tarr1 to = void; + + void[] vFrom = (cast(void*)from.ptr)[0..from.length]; + void[] vTo = (cast(void*)to.ptr)[0..to.length]; // Force `enforceRawArraysConformable` to be `pure` - void enforceRawArraysConformable(const char[] action, const size_t elementSize, const void[] a1, const void[] a2, in bool allowOverlap = false) @trusted + void enforceRawArraysConformable(const char[] action, const size_t elementSize, + const void[] a1, const void[] a2) @trusted { - import core.internal.util.array : enforceRawArraysConformable; + import core.internal.util.array : enforceRawArraysConformableNogc; - alias Type = void function(const char[] action, const size_t elementSize, const void[] a1, const void[] a2, in bool allowOverlap = false) pure nothrow; - (cast(Type)&enforceRawArraysConformable)(action, elementSize, a1, a2, allowOverlap); + alias Type = void function(const char[] action, const size_t elementSize, + const void[] a1, const void[] a2, in bool allowOverlap = false) @nogc pure nothrow; + (cast(Type)&enforceRawArraysConformableNogc)(action, elementSize, a1, a2, false); } - debug(PRINTF) printf("_d_arrayctor(to = %p,%d, from = %p,%d) size = %d\n", from.ptr, from.length, to.ptr, to.length, T.tsize); - - auto element_size = T.sizeof; - - void[] vFrom = (cast(void*)from.ptr)[0..from.length]; - void[] vTo = (cast(void*)to.ptr)[0..to.length]; - enforceRawArraysConformable("initialization", element_size, vFrom, vTo, false); + enforceRawArraysConformable("initialization", T1.sizeof, vFrom, vTo); - static if (hasElaborateCopyConstructor!T) + static if (hasElaborateCopyConstructor!T1) { size_t i; try @@ -60,7 +66,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted */ while (i--) { - auto elem = cast(Unqual!T*)&to[i]; + auto elem = cast(Unqual!T1*)&to[i]; destroy(*elem); } @@ -70,7 +76,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted else { // blit all elements at once - memcpy(cast(void*) to.ptr, from.ptr, to.length * T.sizeof); + memcpy(cast(void*) to.ptr, from.ptr, to.length * T1.sizeof); } return to; @@ -88,7 +94,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted S[4] arr1; S[4] arr2 = [S(0), S(1), S(2), S(3)]; - _d_arrayctor(arr1[], arr2[]); + arr1 = _d_arrayctor!(typeof(arr1))(arr2[]); assert(counter == 4); assert(arr1 == arr2); @@ -111,7 +117,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted S[4] arr1; S[4] arr2 = [S(0), S(1), S(2), S(3)]; - _d_arrayctor(arr1[], arr2[]); + arr1 = _d_arrayctor!(typeof(arr1))(arr2[]); assert(counter == 4); assert(arr1 == arr2); @@ -137,7 +143,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted { Throw[4] a; Throw[4] b = [Throw(1), Throw(2), Throw(3), Throw(4)]; - _d_arrayctor(a[], b[]); + a = _d_arrayctor!(typeof(a))(b[]); } catch (Exception) { @@ -162,7 +168,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted { NoThrow[4] a; NoThrow[4] b = [NoThrow(1), NoThrow(2), NoThrow(3), NoThrow(4)]; - _d_arrayctor(a[], b[]); + a = _d_arrayctor!(typeof(a))(b[]); } catch (Exception) { @@ -186,7 +192,6 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from) @trusted void _d_arraysetctor(Tarr : T[], T)(scope Tarr p, scope ref T value) @trusted { pragma(inline, false); - import core.internal.traits : Unqual; import core.lifetime : copyEmplace; size_t i; @@ -269,7 +274,7 @@ void _d_arraysetctor(Tarr : T[], T)(scope Tarr p, scope ref T value) @trusted { Throw[4] a; Throw[4] b = [Throw(1), Throw(2), Throw(3), Throw(4)]; - _d_arrayctor(a[], b[]); + a = _d_arrayctor!(typeof(a))(b[]); } catch (Exception) { diff --git a/libphobos/libdruntime/core/internal/atomic.d b/libphobos/libdruntime/core/internal/atomic.d index 3036ea72d15..5daab89a387 100644 --- a/libphobos/libdruntime/core/internal/atomic.d +++ b/libphobos/libdruntime/core/internal/atomic.d @@ -104,7 +104,7 @@ version (DigitalMars) pop RBX; ret; } - }, SrcPtr, RetPtr)); + }, [SrcPtr, RetPtr])); } else { @@ -139,7 +139,7 @@ version (DigitalMars) mov %0, src; lock; cmpxchg [%0], %1; } - }, SrcReg, ZeroReg, ResReg)); + }, [SrcReg, ZeroReg, ResReg])); } else version (D_InlineAsm_X86_64) { @@ -159,7 +159,7 @@ version (DigitalMars) lock; cmpxchg [%0], %1; ret; } - }, SrcReg, ZeroReg, ResReg)); + }, [SrcReg, ZeroReg, ResReg])); } } else @@ -252,7 +252,7 @@ version (DigitalMars) mov %0, dest; lock; xadd[%0], %1; } - }, DestReg, ValReg)); + }, [DestReg, ValReg])); } else version (D_InlineAsm_X86_64) { @@ -276,7 +276,7 @@ version (DigitalMars) ?2 mov %2, %1; ret; } - }, DestReg, ValReg, ResReg)); + }, [DestReg, ValReg, ResReg])); } else static assert (false, "Unsupported architecture."); @@ -305,7 +305,7 @@ version (DigitalMars) mov %0, dest; xchg [%0], %1; } - }, DestReg, ValReg)); + }, [DestReg, ValReg])); } else version (D_InlineAsm_X86_64) { @@ -329,7 +329,7 @@ version (DigitalMars) ?2 mov %2, %1; ret; } - }, DestReg, ValReg, ResReg)); + }, [DestReg, ValReg, ResReg])); } else static assert (false, "Unsupported architecture."); @@ -362,7 +362,7 @@ version (DigitalMars) setz AL; pop %1; } - }, DestAddr, CmpAddr, Val, Cmp)); + }, [DestAddr, CmpAddr, Val, Cmp])); } else static if (T.sizeof == 8) { @@ -421,7 +421,7 @@ version (DigitalMars) xor AL, AL; ret; } - }, DestAddr, CmpAddr, Val, Res)); + }, [DestAddr, CmpAddr, Val, Res])); } else { @@ -500,7 +500,7 @@ version (DigitalMars) lock; cmpxchg [%0], %2; setz AL; } - }, DestAddr, Cmp, Val)); + }, [DestAddr, Cmp, Val])); } else static if (T.sizeof == 8) { @@ -551,7 +551,7 @@ version (DigitalMars) setz AL; ret; } - }, DestAddr, Cmp, Val, AXReg)); + }, [DestAddr, Cmp, Val, AXReg])); } else { @@ -1094,7 +1094,7 @@ template needsStoreBarrier( MemoryOrder ms ) } // this is a helper to build asm blocks -string simpleFormat(string format, string[] args...) +string simpleFormat(string format, scope string[] args) { string result; outer: while (format.length) diff --git a/libphobos/libdruntime/core/internal/dassert.d b/libphobos/libdruntime/core/internal/dassert.d index ac7600f8a03..2c51b8641ae 100644 --- a/libphobos/libdruntime/core/internal/dassert.d +++ b/libphobos/libdruntime/core/internal/dassert.d @@ -191,7 +191,7 @@ private string miniFormat(V)(const scope ref V v) } // Fall back to a simple cast - we're violating the type system anyways - return miniFormat(__ctfe ? cast(const T) v : *cast(const T*) &v); + return miniFormat(*cast(const T*) &v); } // Format enum members using their name else static if (is(V BaseType == enum)) diff --git a/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d b/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d index 0c49955c669..a731d6f7ae4 100644 --- a/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d +++ b/libphobos/libdruntime/core/internal/gc/impl/conservative/gc.d @@ -150,7 +150,11 @@ class ConservativeGC : GC static bool _inFinalizer; __gshared bool isPrecise = false; - // lock GC, throw InvalidMemoryOperationError on recursive locking during finalization + /* + * Lock the GC. + * + * Throws: InvalidMemoryOperationError on recursive locking during finalization. + */ static void lockNR() @nogc nothrow { if (_inFinalizer) @@ -158,6 +162,12 @@ class ConservativeGC : GC gcLock.lock(); } + /* + * Initialize the GC based on command line configuration. + * + * Throws: + * OutOfMemoryError if failed to initialize GC due to not enough memory. + */ this() { //config is assumed to have already been initialized @@ -194,6 +204,10 @@ class ConservativeGC : GC } + /** + * Enables the GC if disable() was previously called. Must be called + * for each time disable was called in order to enable the GC again. + */ void enable() { static void go(Gcx* gcx) nothrow @@ -205,6 +219,9 @@ class ConservativeGC : GC } + /** + * Disable the GC. The GC may still run if it deems necessary. + */ void disable() { static void go(Gcx* gcx) nothrow @@ -216,6 +233,13 @@ class ConservativeGC : GC debug (GC_RECURSIVE_LOCK) static bool lockedOnThisThread; + /** + * Run a function inside a lock/unlock set. + * + * Params: + * func = The function to run. + * args = The function arguments. + */ auto runLocked(alias func, Args...)(auto ref Args args) { debug(PROFILE_API) immutable tm = (config.profile > 1 ? currTime.ticks : 0); @@ -248,7 +272,17 @@ class ConservativeGC : GC return res; } - + /** + * Run a function in an lock/unlock set that keeps track of + * how much time was spend inside this function (in ticks) + * and how many times this fuction was called. + * + * Params: + * func = The function to run. + * time = The variable keeping track of the time (in ticks). + * count = The variable keeping track of how many times this fuction was called. + * args = The function arguments. + */ auto runLocked(alias func, alias time, alias count, Args...)(auto ref Args args) { debug(PROFILE_API) immutable tm = (config.profile > 1 ? currTime.ticks : 0); @@ -287,6 +321,17 @@ class ConservativeGC : GC } + /** + * Returns a bit field representing all block attributes set for the memory + * referenced by p. + * + * Params: + * p = A pointer to the base of a valid memory block or to null. + * + * Returns: + * A bit field containing any bits set for the memory block referenced by + * p or zero on error. + */ uint getAttr(void* p) nothrow { if (!p) @@ -314,7 +359,20 @@ class ConservativeGC : GC return runLocked!(go, otherTime, numOthers)(gcx, p); } - + /** + * Sets the specified bits for the memory references by p. + * + * If p was not allocated by the GC, points inside a block, or is null, no + * action will be taken. + * + * Params: + * p = A pointer to the base of a valid memory block or to null. + * mask = A bit field containing any bits to set for this memory block. + * + * Returns: + * The result of a call to getAttr after the specified bits have been + * set. + */ uint setAttr(void* p, uint mask) nothrow { if (!p) @@ -344,6 +402,20 @@ class ConservativeGC : GC } + /** + * Clears the specified bits for the memory references by p. + * + * If p was not allocated by the GC, points inside a block, or is null, no + * action will be taken. + * + * Params: + * p = A pointer to the base of a valid memory block or to null. + * mask = A bit field containing any bits to clear for this memory block. + * + * Returns: + * The result of a call to getAttr after the specified bits have been + * cleared + */ uint clrAttr(void* p, uint mask) nothrow { if (!p) @@ -372,8 +444,21 @@ class ConservativeGC : GC return runLocked!(go, otherTime, numOthers)(gcx, p, mask); } - - void *malloc(size_t size, uint bits, const TypeInfo ti) nothrow + /** + * Requests an aligned block of managed memory from the garbage collector. + * + * Params: + * size = The desired allocation size in bytes. + * bits = A bitmask of the attributes to set on this block. + * ti = TypeInfo to describe the memory. + * + * Returns: + * A reference to the allocated memory or null if no memory was requested. + * + * Throws: + * OutOfMemoryError on allocation failure + */ + void *malloc(size_t size, uint bits = 0, const TypeInfo ti = null) nothrow { if (!size) { @@ -394,7 +479,7 @@ class ConservativeGC : GC // - // + // Implementation for malloc and calloc. // private void *mallocNoSync(size_t size, uint bits, ref size_t alloc_size, const TypeInfo ti = null) nothrow { @@ -423,7 +508,6 @@ class ConservativeGC : GC return p; } - BlkInfo qalloc( size_t size, uint bits, const scope TypeInfo ti) nothrow { @@ -446,7 +530,22 @@ class ConservativeGC : GC } - void *calloc(size_t size, uint bits, const TypeInfo ti) nothrow + /** + * Requests an aligned block of managed memory from the garbage collector, + * which is initialized with all bits set to zero. + * + * Params: + * size = The desired allocation size in bytes. + * bits = A bitmask of the attributes to set on this block. + * ti = TypeInfo to describe the memory. + * + * Returns: + * A reference to the allocated memory or null if no memory was requested. + * + * Throws: + * OutOfMemoryError on allocation failure. + */ + void *calloc(size_t size, uint bits = 0, const TypeInfo ti = null) nothrow { if (!size) { @@ -466,8 +565,27 @@ class ConservativeGC : GC return p; } - - void *realloc(void *p, size_t size, uint bits, const TypeInfo ti) nothrow + /** + * Request that the GC reallocate a block of memory, attempting to adjust + * the size in place if possible. If size is 0, the memory will be freed. + * + * If p was not allocated by the GC, points inside a block, or is null, no + * action will be taken. + * + * Params: + * p = A pointer to the root of a valid memory block or to null. + * size = The desired allocation size in bytes. + * bits = A bitmask of the attributes to set on this block. + * ti = TypeInfo to describe the memory. + * + * Returns: + * A reference to the allocated memory on success or null if size is + * zero. + * + * Throws: + * OutOfMemoryError on allocation failure. + */ + void *realloc(void *p, size_t size, uint bits = 0, const TypeInfo ti = null) nothrow { size_t localAllocSize = void; auto oldp = p; @@ -483,6 +601,8 @@ class ConservativeGC : GC } + // + // The implementation of realloc. // // bits will be set to the resulting bits of the new block // @@ -624,7 +744,7 @@ class ConservativeGC : GC // - // + // Implementation of extend. // private size_t extendNoSync(void* p, size_t minsize, size_t maxsize, const TypeInfo ti = null) nothrow in @@ -678,6 +798,16 @@ class ConservativeGC : GC } + /** + * Requests that at least size bytes of memory be obtained from the operating + * system and marked as free. + * + * Params: + * size = The desired size in bytes. + * + * Returns: + * The actual number of bytes reserved or zero on error. + */ size_t reserve(size_t size) nothrow { if (!size) @@ -690,7 +820,7 @@ class ConservativeGC : GC // - // + // Implementation of reserve // private size_t reserveNoSync(size_t size) nothrow { @@ -701,7 +831,16 @@ class ConservativeGC : GC } - void free(void *p) nothrow @nogc + /** + * Deallocates the memory referenced by p. + * + * If p was not allocated by the GC, points inside a block, is null, or + * if free is called from a finalizer, no action will be taken. + * + * Params: + * p = A pointer to the root of a valid memory block or to null. + */ + void free(void *p) nothrow { if (!p || _inFinalizer) { @@ -713,7 +852,7 @@ class ConservativeGC : GC // - // + // Implementation of free. // private void freeNoSync(void *p) nothrow @nogc { @@ -792,7 +931,18 @@ class ConservativeGC : GC } - void* addrOf(void *p) nothrow @nogc + /** + * Determine the base address of the block containing p. If p is not a gc + * allocated pointer, return null. + * + * Params: + * p = A pointer to the root or the interior of a valid memory block or to + * null. + * + * Returns: + * The base address of the memory block referenced by p or null on error. + */ + void* addrOf(void *p) nothrow { if (!p) { @@ -804,7 +954,7 @@ class ConservativeGC : GC // - // + // Implementation of addrOf. // void* addrOfNoSync(void *p) nothrow @nogc { @@ -820,7 +970,17 @@ class ConservativeGC : GC } - size_t sizeOf(void *p) nothrow @nogc + /** + * Determine the allocated size of pointer p. If p is an interior pointer + * or not a gc allocated pointer, return 0. + * + * Params: + * p = A pointer to the root of a valid memory block or to null. + * + * Returns: + * The size in bytes of the memory block referenced by p or zero on error. + */ + size_t sizeOf(void *p) nothrow { if (!p) { @@ -832,7 +992,7 @@ class ConservativeGC : GC // - // + // Implementation of sizeOf. // private size_t sizeOfNoSync(void *p) nothrow @nogc { @@ -852,6 +1012,18 @@ class ConservativeGC : GC } + /** + * Determine the base address of the block containing p. If p is not a gc + * allocated pointer, return null. + * + * Params: + * p = A pointer to the root or the interior of a valid memory block or to + * null. + * + * Returns: + * Information regarding the memory block referenced by p or BlkInfo.init + * on error. + */ BlkInfo query(void *p) nothrow { if (!p) @@ -864,7 +1036,7 @@ class ConservativeGC : GC } // - // + // Implementation of query // BlkInfo queryNoSync(void *p) nothrow { @@ -884,10 +1056,14 @@ class ConservativeGC : GC /** - * Verify that pointer p: - * 1) belongs to this memory pool - * 2) points to the start of an allocated piece of memory - * 3) is not on a free list + * Performs certain checks on a pointer. These checks will cause asserts to + * fail unless the following conditions are met: + * 1) The poiinter belongs to this memory pool. + * 2) The pointer points to the start of an allocated piece of memory. + * 3) The pointer is not on a free list. + * + * Params: + * p = The pointer to be checked. */ void check(void *p) nothrow { @@ -901,7 +1077,7 @@ class ConservativeGC : GC // - // + // Implementation of check // private void checkNoSync(void *p) nothrow { @@ -939,6 +1115,12 @@ class ConservativeGC : GC } + /** + * Add p to list of roots. If p is null, no operation is performed. + * + * Params: + * p = A pointer into a GC-managed memory block or null. + */ void addRoot(void *p) nothrow @nogc { if (!p) @@ -950,6 +1132,13 @@ class ConservativeGC : GC } + /** + * Remove p from list of roots. If p is null or is not a value + * previously passed to addRoot() then no operation is performed. + * + * Params: + * p = A pointer into a GC-managed memory block or null. + */ void removeRoot(void *p) nothrow @nogc { if (!p) @@ -960,13 +1149,23 @@ class ConservativeGC : GC gcx.removeRoot(p); } - + /** + * Returns an iterator allowing roots to be traversed via a foreach loop. + */ @property RootIterator rootIter() @nogc { return &gcx.rootsApply; } + /** + * Add range to scan for roots. If p is null or sz is 0, no operation is performed. + * + * Params: + * p = A pointer to a valid memory address or to null. + * sz = The size in bytes of the block to add. + * ti = TypeInfo to describe the memory. + */ void addRange(void *p, size_t sz, const TypeInfo ti = null) nothrow @nogc { if (!p || !sz) @@ -978,6 +1177,14 @@ class ConservativeGC : GC } + /** + * Remove range from list of ranges. If p is null or does not represent + * a value previously passed to addRange() then no operation is + * performed. + * + * Params: + * p = A pointer to a valid memory address or to null. + */ void removeRange(void *p) nothrow @nogc { if (!p) @@ -989,12 +1196,21 @@ class ConservativeGC : GC } + /** + * Returns an iterator allowing ranges to be traversed via a foreach loop. + */ @property RangeIterator rangeIter() @nogc { return &gcx.rangesApply; } + /** + * Run all finalizers in the code segment. + * + * Params: + * segment = address range of a code segment + */ void runFinalizers(const scope void[] segment) nothrow { static void go(Gcx* gcx, const scope void[] segment) nothrow @@ -1024,8 +1240,10 @@ class ConservativeGC : GC /** - * Do full garbage collection. - * Return number of pages free'd. + * Begins a full collection, scanning all stack segments for roots. + * + * Returns: + * The number of pages freed. */ size_t fullCollect() nothrow { @@ -1054,7 +1272,7 @@ class ConservativeGC : GC /** - * do full garbage collection ignoring roots + * Begins a full collection while ignoring all stack segments for roots. */ void fullCollectNoStack() nothrow { @@ -1068,6 +1286,9 @@ class ConservativeGC : GC } + /** + * Minimize free space usage. + */ void minimize() nothrow { static void go(Gcx* gcx) nothrow @@ -1109,7 +1330,7 @@ class ConservativeGC : GC // - // + // Implementation of getStats // private void getStatsNoSync(out core.memory.GC.Stats stats) nothrow { diff --git a/libphobos/libdruntime/core/internal/gc/os.d b/libphobos/libdruntime/core/internal/gc/os.d index ca4cbe2b1c8..64f12033c95 100644 --- a/libphobos/libdruntime/core/internal/gc/os.d +++ b/libphobos/libdruntime/core/internal/gc/os.d @@ -213,46 +213,38 @@ else Returns: true if memory is scarce */ -// TOOD: get virtual mem sizes and current usage from OS +// TODO: get virtual mem sizes and current usage from OS // TODO: compare current RSS and avail. physical memory -version (Windows) +bool isLowOnMem(size_t mapped) nothrow @nogc { - bool isLowOnMem(size_t mapped) nothrow @nogc + version (Windows) { - version (D_LP64) + import core.sys.windows.winbase : GlobalMemoryStatusEx, MEMORYSTATUSEX; + + MEMORYSTATUSEX stat; + stat.dwLength = stat.sizeof; + const success = GlobalMemoryStatusEx(&stat) != 0; + assert(success, "GlobalMemoryStatusEx() failed"); + if (!success) return false; - else - { - import core.sys.windows.winbase : GlobalMemoryStatus, MEMORYSTATUS; - MEMORYSTATUS stat; - GlobalMemoryStatus(&stat); - // Less than 5 % of virtual address space available - return stat.dwAvailVirtual < stat.dwTotalVirtual / 20; - } + + // dwMemoryLoad is the 'approximate percentage of physical memory that is in use' + // https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-memorystatusex + const percentPhysicalRAM = stat.ullTotalPhys / 100; + return (stat.dwMemoryLoad >= 95 && mapped > percentPhysicalRAM) + || (stat.dwMemoryLoad >= 90 && mapped > 10 * percentPhysicalRAM); } -} -else version (Darwin) -{ - bool isLowOnMem(size_t mapped) nothrow @nogc + else { enum GB = 2 ^^ 30; version (D_LP64) return false; - else + else version (Darwin) { // 80 % of available 4GB is used for GC (excluding malloc and mmap) enum size_t limit = 4UL * GB * 8 / 10; return mapped > limit; } - } -} -else -{ - bool isLowOnMem(size_t mapped) nothrow @nogc - { - enum GB = 2 ^^ 30; - version (D_LP64) - return false; else { // be conservative and assume 3GB diff --git a/libphobos/libdruntime/core/internal/hash.d b/libphobos/libdruntime/core/internal/hash.d index e999f0cada9..ef9f1e525c0 100644 --- a/libphobos/libdruntime/core/internal/hash.d +++ b/libphobos/libdruntime/core/internal/hash.d @@ -646,13 +646,8 @@ size_t hashOf(T)(T aa) if (!is(T == enum) && __traits(isAssociativeArray, T)) size_t h = 0; // The computed hash is independent of the foreach traversal order. - foreach (key, ref val; aa) - { - size_t[2] hpair; - hpair[0] = key.hashOf(); - hpair[1] = val.hashOf(); - h += hpair.hashOf(); - } + foreach (ref key, ref val; aa) + h += hashOf(hashOf(val), hashOf(key)); return h; } diff --git a/libphobos/libdruntime/core/internal/parseoptions.d b/libphobos/libdruntime/core/internal/parseoptions.d index 4e5105d82da..99204432374 100644 --- a/libphobos/libdruntime/core/internal/parseoptions.d +++ b/libphobos/libdruntime/core/internal/parseoptions.d @@ -4,7 +4,7 @@ * Copyright: Copyright Digital Mars 2017 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). * -* Source: $(DRUNTIMESRC src/core/internal/parseoptions.d) +* Source: $(DRUNTIMESRC core/internal/parseoptions.d) */ module core.internal.parseoptions; diff --git a/libphobos/libdruntime/core/internal/traits.d b/libphobos/libdruntime/core/internal/traits.d index 1856eb8b881..60d9be3ac9b 100644 --- a/libphobos/libdruntime/core/internal/traits.d +++ b/libphobos/libdruntime/core/internal/traits.d @@ -14,7 +14,7 @@ template Fields(T) { static if (is(T == struct) || is(T == union)) alias Fields = typeof(T.tupleof[0 .. $ - __traits(isNested, T)]); - else static if (is(T == class)) + else static if (is(T == class) || is(T == interface)) alias Fields = typeof(T.tupleof); else alias Fields = AliasSeq!T; @@ -326,7 +326,7 @@ template hasElaborateAssign(S) template hasIndirections(T) { static if (is(T == struct) || is(T == union)) - enum hasIndirections = anySatisfy!(.hasIndirections, Fields!T); + enum hasIndirections = anySatisfy!(.hasIndirections, typeof(T.tupleof)); else static if (is(T == E[N], E, size_t N)) enum hasIndirections = T.sizeof && is(E == void) ? true : hasIndirections!(BaseElemOf!E); else static if (isFunctionPointer!T) @@ -367,6 +367,10 @@ unittest static assert( hasUnsharedIndirections!(Foo*)); static assert(!hasUnsharedIndirections!(shared(Foo)*)); static assert(!hasUnsharedIndirections!(immutable(Foo)*)); + + int local; + struct HasContextPointer { int opCall() { return ++local; } } + static assert(hasIndirections!HasContextPointer); } enum bool isAggregateType(T) = is(T == struct) || is(T == union) || diff --git a/libphobos/libdruntime/core/internal/util/array.d b/libphobos/libdruntime/core/internal/util/array.d index bc9b72c1474..6136cfef17d 100644 --- a/libphobos/libdruntime/core/internal/util/array.d +++ b/libphobos/libdruntime/core/internal/util/array.d @@ -13,6 +13,17 @@ import core.internal.string; import core.stdc.stdint; +// TLS storage shared for all error messages. +private align(2 * size_t.sizeof) char[256] _store; + +private char[] errorMessage(Args...)(scope const(char*) format, + const char[] action, Args args) @trusted +{ + import core.stdc.stdio : snprintf; + snprintf(&_store[0], _store.sizeof, format, &action[0], args); + return _store; +} + @safe /* pure dmd @@@BUG11461@@@ */ nothrow: void enforceTypedArraysConformable(T)(const char[] action, @@ -65,6 +76,44 @@ private void _enforceNoOverlap(const char[] action, assert(0, msg); } +void enforceTypedArraysConformableNogc(T)(const char[] action, + const T[] a1, const T[] a2, const bool allowOverlap = false) +{ + _enforceSameLengthNogc(action, a1.length, a2.length); + if (!allowOverlap) + _enforceNoOverlapNogc(action, arrayToPtr(a1), arrayToPtr(a2), T.sizeof * a1.length); +} + +void enforceRawArraysConformableNogc(const char[] action, const size_t elementSize, + const void[] a1, const void[] a2, const bool allowOverlap = false) +{ + _enforceSameLengthNogc(action, a1.length, a2.length); + if (!allowOverlap) + _enforceNoOverlapNogc(action, arrayToPtr(a1), arrayToPtr(a2), elementSize * a1.length); +} + +private void _enforceNoOverlapNogc(const ref char[] action, + uintptr_t ptr1, uintptr_t ptr2, const size_t bytes) +{ + const d = ptr1 > ptr2 ? ptr1 - ptr2 : ptr2 - ptr1; + if (d >= bytes) + return; + const overlappedBytes = bytes - d; + + assert(0, errorMessage("Overlapping arrays in %s: %zu byte(s) overlap of %zu", + action, overlappedBytes, bytes)); +} + +private void _enforceSameLengthNogc(const ref char[] action, + const size_t length1, const size_t length2) +{ + if (length1 == length2) + return; + + assert(0, errorMessage("Array lengths don't match for %s: %zu != %zu", + action, length1, length2)); +} + private uintptr_t arrayToPtr(const void[] array) @trusted { // Ok because the user will never dereference the pointer diff --git a/libphobos/libdruntime/core/lifetime.d b/libphobos/libdruntime/core/lifetime.d index fc47b1d9394..d93b891226c 100644 --- a/libphobos/libdruntime/core/lifetime.d +++ b/libphobos/libdruntime/core/lifetime.d @@ -2124,7 +2124,9 @@ private void moveEmplaceImpl(T)(scope ref T target, return scope ref T source) () @trusted { memset(&source, 0, sz); }(); else { - auto init = typeid(T).initializer(); + import core.internal.lifetime : emplaceInitializer; + ubyte[T.sizeof] init = void; + emplaceInitializer(*(() @trusted { return cast(T*)init.ptr; }())); () @trusted { memcpy(&source, init.ptr, sz); }(); } } diff --git a/libphobos/libdruntime/core/runtime.d b/libphobos/libdruntime/core/runtime.d index bfb72e07b05..b08ec52a246 100644 --- a/libphobos/libdruntime/core/runtime.d +++ b/libphobos/libdruntime/core/runtime.d @@ -848,6 +848,7 @@ else static if (hasExecinfo) private class DefaultTraceInfo : Throwable.TraceInf version (linux) enum enableDwarf = true; else version (FreeBSD) enum enableDwarf = true; else version (DragonFlyBSD) enum enableDwarf = true; + else version (OpenBSD) enum enableDwarf = true; else version (Darwin) enum enableDwarf = true; else enum enableDwarf = false; diff --git a/libphobos/libdruntime/core/stdc/stdlib.d b/libphobos/libdruntime/core/stdc/stdlib.d index 35e81a25414..2f11a663eb5 100644 --- a/libphobos/libdruntime/core/stdc/stdlib.d +++ b/libphobos/libdruntime/core/stdc/stdlib.d @@ -9,7 +9,7 @@ * (See accompanying file LICENSE) * Authors: Sean Kelly * Standards: ISO/IEC 9899:1999 (E) - * Source: $(DRUNTIMESRC src/core/stdc/_stdlib.d) + * Source: $(DRUNTIMESRC core/stdc/_stdlib.d) */ module core.stdc.stdlib; diff --git a/libphobos/libdruntime/core/sync/rwmutex.d b/libphobos/libdruntime/core/sync/rwmutex.d index 89ef6671e2f..07c5bdbe360 100644 --- a/libphobos/libdruntime/core/sync/rwmutex.d +++ b/libphobos/libdruntime/core/sync/rwmutex.d @@ -86,7 +86,7 @@ class ReadWriteMutex * Throws: * SyncError on error. */ - this( Policy policy = Policy.PREFER_WRITERS ) + this( Policy policy = Policy.PREFER_WRITERS ) @safe nothrow { m_commonMutex = new Mutex; if ( !m_commonMutex ) @@ -105,6 +105,26 @@ class ReadWriteMutex m_writer = new Writer; } + /// ditto + shared this( Policy policy = Policy.PREFER_WRITERS ) @safe nothrow + { + m_commonMutex = new shared Mutex; + if ( !m_commonMutex ) + throw new SyncError( "Unable to initialize mutex" ); + + m_readerQueue = new shared Condition( m_commonMutex ); + if ( !m_readerQueue ) + throw new SyncError( "Unable to initialize mutex" ); + + m_writerQueue = new shared Condition( m_commonMutex ); + if ( !m_writerQueue ) + throw new SyncError( "Unable to initialize mutex" ); + + m_policy = policy; + m_reader = new shared Reader; + m_writer = new shared Writer; + } + //////////////////////////////////////////////////////////////////////////// // General Properties //////////////////////////////////////////////////////////////////////////// @@ -116,11 +136,16 @@ class ReadWriteMutex * Returns: * The policy used by this mutex. */ - @property Policy policy() + @property Policy policy() @safe nothrow { return m_policy; } + ///ditto + @property Policy policy() shared @safe nothrow + { + return m_policy; + } //////////////////////////////////////////////////////////////////////////// // Reader/Writer Handles @@ -133,11 +158,16 @@ class ReadWriteMutex * Returns: * A reader sub-mutex. */ - @property Reader reader() + @property Reader reader() @safe nothrow { return m_reader; } + ///ditto + @property shared(Reader) reader() shared @safe nothrow + { + return m_reader; + } /** * Gets an object representing the writer lock for the associated mutex. @@ -145,7 +175,13 @@ class ReadWriteMutex * Returns: * A writer sub-mutex. */ - @property Writer writer() + @property Writer writer() @safe nothrow + { + return m_writer; + } + + ///ditto + @property shared(Writer) writer() shared @safe nothrow { return m_writer; } @@ -166,13 +202,13 @@ class ReadWriteMutex /** * Initializes a read/write mutex reader proxy object. */ - this() + this(this Q)() @trusted nothrow + if (is(Q == Reader) || is(Q == shared Reader)) { m_proxy.link = this; - this.__monitor = &m_proxy; + this.__monitor = cast(void*) &m_proxy; } - /** * Acquires a read lock on the enclosing mutex. */ @@ -189,6 +225,19 @@ class ReadWriteMutex } } + /// ditto + @trusted void lock() shared + { + synchronized( m_commonMutex ) + { + ++(cast()m_numQueuedReaders); + scope(exit) --(cast()m_numQueuedReaders); + + while ( shouldQueueReader ) + m_readerQueue.wait(); + ++(cast()m_numActiveReaders); + } + } /** * Releases a read lock on the enclosing mutex. @@ -205,6 +254,18 @@ class ReadWriteMutex } } + /// ditto + @trusted void unlock() shared + { + synchronized( m_commonMutex ) + { + if ( --(cast()m_numActiveReaders) < 1 ) + { + if ( m_numQueuedWriters > 0 ) + m_writerQueue.notify(); + } + } + } /** * Attempts to acquire a read lock on the enclosing mutex. If one can @@ -214,7 +275,7 @@ class ReadWriteMutex * Returns: * true if the lock was acquired and false if not. */ - bool tryLock() + @trusted bool tryLock() { synchronized( m_commonMutex ) { @@ -225,6 +286,18 @@ class ReadWriteMutex } } + /// ditto + @trusted bool tryLock() shared + { + synchronized( m_commonMutex ) + { + if ( shouldQueueReader ) + return false; + ++(cast()m_numActiveReaders); + return true; + } + } + /** * Attempts to acquire a read lock on the enclosing mutex. If one can * be obtained without blocking, the lock is acquired and true is @@ -237,7 +310,7 @@ class ReadWriteMutex * Returns: * true if the lock was acquired and false if not. */ - bool tryLock(Duration timeout) + @trusted bool tryLock(Duration timeout) { synchronized( m_commonMutex ) { @@ -270,9 +343,34 @@ class ReadWriteMutex } } + /// ditto + @trusted bool tryLock(Duration timeout) shared + { + const initialTime = MonoTime.currTime; + synchronized( m_commonMutex ) + { + ++(cast()m_numQueuedReaders); + scope(exit) --(cast()m_numQueuedReaders); + + while (shouldQueueReader) + { + const timeElapsed = MonoTime.currTime - initialTime; + if (timeElapsed >= timeout) + return false; + auto nextWait = timeout - timeElapsed; + // Avoid problems calling wait(Duration) with huge arguments. + enum maxWaitPerCall = dur!"hours"(24 * 365); + m_readerQueue.wait(nextWait < maxWaitPerCall ? nextWait : maxWaitPerCall); + } + ++(cast()m_numActiveReaders); + return true; + } + } + private: - @property bool shouldQueueReader() + @property bool shouldQueueReader(this Q)() nothrow @safe @nogc + if (is(Q == Reader) || is(Q == shared Reader)) { if ( m_numActiveWriters > 0 ) return true; @@ -314,10 +412,11 @@ class ReadWriteMutex /** * Initializes a read/write mutex writer proxy object. */ - this() + this(this Q)() @trusted nothrow + if (is(Q == Writer) || is(Q == shared Writer)) { m_proxy.link = this; - this.__monitor = &m_proxy; + this.__monitor = cast(void*) &m_proxy; } @@ -337,6 +436,20 @@ class ReadWriteMutex } } + /// ditto + @trusted void lock() shared + { + synchronized( m_commonMutex ) + { + ++(cast()m_numQueuedWriters); + scope(exit) --(cast()m_numQueuedWriters); + + while ( shouldQueueWriter ) + m_writerQueue.wait(); + ++(cast()m_numActiveWriters); + } + } + /** * Releases a write lock on the enclosing mutex. @@ -366,6 +479,32 @@ class ReadWriteMutex } } + /// ditto + @trusted void unlock() shared + { + synchronized( m_commonMutex ) + { + if ( --(cast()m_numActiveWriters) < 1 ) + { + switch ( m_policy ) + { + default: + case Policy.PREFER_READERS: + if ( m_numQueuedReaders > 0 ) + m_readerQueue.notifyAll(); + else if ( m_numQueuedWriters > 0 ) + m_writerQueue.notify(); + break; + case Policy.PREFER_WRITERS: + if ( m_numQueuedWriters > 0 ) + m_writerQueue.notify(); + else if ( m_numQueuedReaders > 0 ) + m_readerQueue.notifyAll(); + } + } + } + } + /** * Attempts to acquire a write lock on the enclosing mutex. If one can @@ -375,7 +514,7 @@ class ReadWriteMutex * Returns: * true if the lock was acquired and false if not. */ - bool tryLock() + @trusted bool tryLock() { synchronized( m_commonMutex ) { @@ -386,6 +525,18 @@ class ReadWriteMutex } } + /// ditto + @trusted bool tryLock() shared + { + synchronized( m_commonMutex ) + { + if ( shouldQueueWriter ) + return false; + ++(cast()m_numActiveWriters); + return true; + } + } + /** * Attempts to acquire a write lock on the enclosing mutex. If one can * be obtained without blocking, the lock is acquired and true is @@ -398,7 +549,7 @@ class ReadWriteMutex * Returns: * true if the lock was acquired and false if not. */ - bool tryLock(Duration timeout) + @trusted bool tryLock(Duration timeout) { synchronized( m_commonMutex ) { @@ -431,8 +582,33 @@ class ReadWriteMutex } } + /// ditto + @trusted bool tryLock(Duration timeout) shared + { + const initialTime = MonoTime.currTime; + synchronized( m_commonMutex ) + { + ++(cast()m_numQueuedWriters); + scope(exit) --(cast()m_numQueuedWriters); + + while (shouldQueueWriter) + { + const timeElapsed = MonoTime.currTime - initialTime; + if (timeElapsed >= timeout) + return false; + auto nextWait = timeout - timeElapsed; + // Avoid problems calling wait(Duration) with huge arguments. + enum maxWaitPerCall = dur!"hours"(24 * 365); + m_writerQueue.wait(nextWait < maxWaitPerCall ? nextWait : maxWaitPerCall); + } + ++(cast()m_numActiveWriters); + return true; + } + } + private: - @property bool shouldQueueWriter() + @property bool shouldQueueWriter(this Q)() + if (is(Q == Writer) || is(Q == shared Writer)) { if ( m_numActiveWriters > 0 || m_numActiveReaders > 0 ) @@ -691,3 +867,215 @@ unittest otherThread.join; } } + +unittest +{ + import core.atomic, core.thread, core.sync.semaphore; + + static void runTest(ReadWriteMutex.Policy policy) + { + shared scope mutex = new shared ReadWriteMutex(policy); + scope rdSemA = new Semaphore, rdSemB = new Semaphore, + wrSemA = new Semaphore, wrSemB = new Semaphore; + shared size_t numReaders, numWriters; + + void readerFn() + { + synchronized (mutex.reader) + { + atomicOp!"+="(numReaders, 1); + rdSemA.notify(); + rdSemB.wait(); + atomicOp!"-="(numReaders, 1); + } + } + + void writerFn() + { + synchronized (mutex.writer) + { + atomicOp!"+="(numWriters, 1); + wrSemA.notify(); + wrSemB.wait(); + atomicOp!"-="(numWriters, 1); + } + } + + void waitQueued(size_t queuedReaders, size_t queuedWriters) + { + for (;;) + { + synchronized (mutex.m_commonMutex) + { + if (mutex.m_numQueuedReaders == queuedReaders && + mutex.m_numQueuedWriters == queuedWriters) + break; + } + Thread.yield(); + } + } + + scope group = new ThreadGroup; + + // 2 simultaneous readers + group.create(&readerFn); group.create(&readerFn); + rdSemA.wait(); rdSemA.wait(); + assert(numReaders == 2); + rdSemB.notify(); rdSemB.notify(); + group.joinAll(); + assert(numReaders == 0); + foreach (t; group) group.remove(t); + + // 1 writer at a time + group.create(&writerFn); group.create(&writerFn); + wrSemA.wait(); + assert(!wrSemA.tryWait()); + assert(numWriters == 1); + wrSemB.notify(); + wrSemA.wait(); + assert(numWriters == 1); + wrSemB.notify(); + group.joinAll(); + assert(numWriters == 0); + foreach (t; group) group.remove(t); + + // reader and writer are mutually exclusive + group.create(&readerFn); + rdSemA.wait(); + group.create(&writerFn); + waitQueued(0, 1); + assert(!wrSemA.tryWait()); + assert(numReaders == 1 && numWriters == 0); + rdSemB.notify(); + wrSemA.wait(); + assert(numReaders == 0 && numWriters == 1); + wrSemB.notify(); + group.joinAll(); + assert(numReaders == 0 && numWriters == 0); + foreach (t; group) group.remove(t); + + // writer and reader are mutually exclusive + group.create(&writerFn); + wrSemA.wait(); + group.create(&readerFn); + waitQueued(1, 0); + assert(!rdSemA.tryWait()); + assert(numReaders == 0 && numWriters == 1); + wrSemB.notify(); + rdSemA.wait(); + assert(numReaders == 1 && numWriters == 0); + rdSemB.notify(); + group.joinAll(); + assert(numReaders == 0 && numWriters == 0); + foreach (t; group) group.remove(t); + + // policy determines whether queued reader or writers progress first + group.create(&writerFn); + wrSemA.wait(); + group.create(&readerFn); + group.create(&writerFn); + waitQueued(1, 1); + assert(numReaders == 0 && numWriters == 1); + wrSemB.notify(); + + if (policy == ReadWriteMutex.Policy.PREFER_READERS) + { + rdSemA.wait(); + assert(numReaders == 1 && numWriters == 0); + rdSemB.notify(); + wrSemA.wait(); + assert(numReaders == 0 && numWriters == 1); + wrSemB.notify(); + } + else if (policy == ReadWriteMutex.Policy.PREFER_WRITERS) + { + wrSemA.wait(); + assert(numReaders == 0 && numWriters == 1); + wrSemB.notify(); + rdSemA.wait(); + assert(numReaders == 1 && numWriters == 0); + rdSemB.notify(); + } + group.joinAll(); + assert(numReaders == 0 && numWriters == 0); + foreach (t; group) group.remove(t); + } + runTest(ReadWriteMutex.Policy.PREFER_READERS); + runTest(ReadWriteMutex.Policy.PREFER_WRITERS); +} + +unittest +{ + import core.atomic, core.thread; + shared static ReadWriteMutex rwmutex; + shared static bool threadTriedOnceToGetLock; + shared static bool threadFinallyGotLock; + + rwmutex = new shared ReadWriteMutex(); + atomicFence; + const maxTimeAllowedForTest = dur!"seconds"(20); + // Test ReadWriteMutex.Reader.tryLock(Duration). + { + static void testReaderTryLock() + { + assert(!rwmutex.reader.tryLock(Duration.min)); + threadTriedOnceToGetLock.atomicStore(true); + assert(rwmutex.reader.tryLock(Duration.max)); + threadFinallyGotLock.atomicStore(true); + rwmutex.reader.unlock; + } + assert(rwmutex.writer.tryLock(Duration.zero), "should have been able to obtain lock without blocking"); + auto otherThread = new Thread(&testReaderTryLock).start; + const failIfThisTimeisReached = MonoTime.currTime + maxTimeAllowedForTest; + Thread.yield; + // We started otherThread with the writer lock held so otherThread's + // first rwlock.reader.tryLock with timeout Duration.min should fail. + while (!threadTriedOnceToGetLock.atomicLoad) + { + assert(MonoTime.currTime < failIfThisTimeisReached, "timed out"); + Thread.yield; + } + rwmutex.writer.unlock; + // Soon after we release the writer lock otherThread's second + // rwlock.reader.tryLock with timeout Duration.max should succeed. + while (!threadFinallyGotLock.atomicLoad) + { + assert(MonoTime.currTime < failIfThisTimeisReached, "timed out"); + Thread.yield; + } + otherThread.join; + } + threadTriedOnceToGetLock.atomicStore(false); // Reset. + threadFinallyGotLock.atomicStore(false); // Reset. + // Test ReadWriteMutex.Writer.tryLock(Duration). + { + static void testWriterTryLock() + { + assert(!rwmutex.writer.tryLock(Duration.min)); + threadTriedOnceToGetLock.atomicStore(true); + assert(rwmutex.writer.tryLock(Duration.max)); + threadFinallyGotLock.atomicStore(true); + rwmutex.writer.unlock; + } + assert(rwmutex.reader.tryLock(Duration.zero), "should have been able to obtain lock without blocking"); + auto otherThread = new Thread(&testWriterTryLock).start; + const failIfThisTimeisReached = MonoTime.currTime + maxTimeAllowedForTest; + Thread.yield; + // We started otherThread with the reader lock held so otherThread's + // first rwlock.writer.tryLock with timeout Duration.min should fail. + while (!threadTriedOnceToGetLock.atomicLoad) + { + assert(MonoTime.currTime < failIfThisTimeisReached, "timed out"); + Thread.yield; + } + rwmutex.reader.unlock; + // Soon after we release the reader lock otherThread's second + // rwlock.writer.tryLock with timeout Duration.max should succeed. + while (!threadFinallyGotLock.atomicLoad) + { + assert(MonoTime.currTime < failIfThisTimeisReached, "timed out"); + Thread.yield; + } + otherThread.join; + } +} diff --git a/libphobos/libdruntime/core/sys/freebsd/config.d b/libphobos/libdruntime/core/sys/freebsd/config.d index 4eda066b293..5e3129e2422 100644 --- a/libphobos/libdruntime/core/sys/freebsd/config.d +++ b/libphobos/libdruntime/core/sys/freebsd/config.d @@ -13,7 +13,9 @@ public import core.sys.posix.config; // __FreeBSD_version numbers are documented in the Porter's Handbook. // NOTE: When adding newer versions of FreeBSD, verify all current versioned // bindings are still compatible with the release. - version (FreeBSD_12) enum __FreeBSD_version = 1202000; + + version (FreeBSD_13) enum __FreeBSD_version = 1300000; +else version (FreeBSD_12) enum __FreeBSD_version = 1202000; else version (FreeBSD_11) enum __FreeBSD_version = 1104000; else version (FreeBSD_10) enum __FreeBSD_version = 1004000; else version (FreeBSD_9) enum __FreeBSD_version = 903000; diff --git a/libphobos/libdruntime/core/sys/linux/fs.d b/libphobos/libdruntime/core/sys/linux/fs.d index 5faa7564d1b..c5525066969 100644 --- a/libphobos/libdruntime/core/sys/linux/fs.d +++ b/libphobos/libdruntime/core/sys/linux/fs.d @@ -154,39 +154,42 @@ enum { S_XFLAG_HASATTR = 0x80000000, /// no DIFLAG for this } -enum BLKROSET = _IO(0x12, 93); /// set device read-only -enum BLKROGET = _IO(0x12, 94); /// get read-only status -enum BLKRRPART = _IO(0x12, 95); /// re-read partition table -enum BLKGETSIZE = _IO(0x12, 96); /// return device size -enum BLKFLSBUF = _IO(0x12, 97); /// flush buffer cache -enum BLKRASET = _IO(0x12, 98); /// set read ahead for block device -enum BLKRAGET = _IO(0x12, 99); /// get current read ahead setting -enum BLKFRASET = _IO(0x12, 100); /// set filesystem -enum BLKFRAGET = _IO(0x12, 101); /// get filesystem -enum BLKSECTSET = _IO(0x12, 102); /// set max sectors per request -enum BLKSECTGET = _IO(0x12, 103); /// get max sectors per request -enum BLKSSZGET = _IO(0x12, 104); /// get block device sector size +static if (__traits(compiles, _IO(1, 2))) +{ + enum BLKROSET = _IO(0x12, 93); /// set device read-only + enum BLKROGET = _IO(0x12, 94); /// get read-only status + enum BLKRRPART = _IO(0x12, 95); /// re-read partition table + enum BLKGETSIZE = _IO(0x12, 96); /// return device size + enum BLKFLSBUF = _IO(0x12, 97); /// flush buffer cache + enum BLKRASET = _IO(0x12, 98); /// set read ahead for block device + enum BLKRAGET = _IO(0x12, 99); /// get current read ahead setting + enum BLKFRASET = _IO(0x12, 100); /// set filesystem + enum BLKFRAGET = _IO(0x12, 101); /// get filesystem + enum BLKSECTSET = _IO(0x12, 102); /// set max sectors per request + enum BLKSECTGET = _IO(0x12, 103); /// get max sectors per request + enum BLKSSZGET = _IO(0x12, 104); /// get block device sector size -enum BLKBSZGET = _IOR!size_t(0x12, 112); -enum BLKBSZSET = _IOW!size_t(0x12, 113); -enum BLKGETSIZE64 = _IOR!size_t(0x12, 114); -enum BLKTRACESTART = _IO(0x12, 116); -enum BLKTRACESTOP = _IO(0x12, 117); -enum BLKTRACETEARDOWN = _IO(0x12, 118); -enum BLKDISCARD = _IO(0x12, 119); -enum BLKIOMIN = _IO(0x12, 120); -enum BLKIOOPT = _IO(0x12, 121); -enum BLKALIGNOFF = _IO(0x12, 122); -enum BLKPBSZGET = _IO(0x12, 123); -enum BLKDISCARDZEROES = _IO(0x12, 124); -enum BLKSECDISCARD = _IO(0x12, 125); -enum BLKROTATIONAL = _IO(0x12, 126); -enum BLKZEROOUT = _IO(0x12, 127); + enum BLKBSZGET = _IOR!size_t(0x12, 112); + enum BLKBSZSET = _IOW!size_t(0x12, 113); + enum BLKGETSIZE64 = _IOR!size_t(0x12, 114); + enum BLKTRACESTART = _IO(0x12, 116); + enum BLKTRACESTOP = _IO(0x12, 117); + enum BLKTRACETEARDOWN = _IO(0x12, 118); + enum BLKDISCARD = _IO(0x12, 119); + enum BLKIOMIN = _IO(0x12, 120); + enum BLKIOOPT = _IO(0x12, 121); + enum BLKALIGNOFF = _IO(0x12, 122); + enum BLKPBSZGET = _IO(0x12, 123); + enum BLKDISCARDZEROES = _IO(0x12, 124); + enum BLKSECDISCARD = _IO(0x12, 125); + enum BLKROTATIONAL = _IO(0x12, 126); + enum BLKZEROOUT = _IO(0x12, 127); -enum BMAP_IOCTL = 1; /// obsolete - kept for compatibility -enum FIBMAP = _IO(0x00, 1); /// bmap access -enum FIGETBSZ = _IO(0x00, 2); /// get the block size used for bmap + enum BMAP_IOCTL = 1; /// obsolete - kept for compatibility + enum FIBMAP = _IO(0x00, 1); /// bmap access + enum FIGETBSZ = _IO(0x00, 2); /// get the block size used for bmap +} enum FSLABEL_MAX = 256; /// Max chars for the interface; each fs may differ diff --git a/libphobos/libdruntime/core/sys/linux/perf_event.d b/libphobos/libdruntime/core/sys/linux/perf_event.d index 805b47e6e33..9e96a7f5f43 100644 --- a/libphobos/libdruntime/core/sys/linux/perf_event.d +++ b/libphobos/libdruntime/core/sys/linux/perf_event.d @@ -2073,8 +2073,6 @@ else struct { - import std.bitmanip : bitfields; - /* mixin(bitfields!(ulong, "mem_rsvd", 24, ulong, "mem_snoopx", 2, ulong, "mem_remote", 1, ulong, "mem_lvl_num", 4, ulong, "mem_dtlb", 7, ulong, "mem_lock", 2, ulong, "mem_snoop", 5, ulong, "mem_lvl", diff --git a/libphobos/libdruntime/core/sys/linux/sys/mman.d b/libphobos/libdruntime/core/sys/linux/sys/mman.d index 20e8cf29f8d..a6548a7802c 100644 --- a/libphobos/libdruntime/core/sys/linux/sys/mman.d +++ b/libphobos/libdruntime/core/sys/linux/sys/mman.d @@ -32,7 +32,7 @@ public import core.sys.posix.sys.mman; import core.sys.linux.config; // -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/powerpc/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/powerpc/bits/mman.h version (PPC_Any) { enum PROT_SAO = 0x10; @@ -57,7 +57,7 @@ version (PPC_Any) // MCL_FUTURE = 0x4000, // } } -// https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/riscv/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/riscv/bits/mman.h else version (RISCV_Any) { static if (__USE_MISC) enum @@ -82,7 +82,7 @@ else version (RISCV_Any) // MCL_FUTURE = 0x4000, // } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/s390/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/s390/bits/mman.h else version (IBMZ_Any) { static if (__USE_MISC) enum @@ -98,7 +98,7 @@ else version (IBMZ_Any) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/sh/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sh/bits/mman.h else version (SH) { static if (__USE_MISC) enum @@ -114,7 +114,7 @@ else version (SH) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h else version (SPARC_Any) { static if (__USE_MISC) enum @@ -138,7 +138,7 @@ else version (SPARC_Any) // MCL_FUTURE = 0x4000, // } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/x86/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/x86/bits/mman.h else version (X86_Any) { static if (__USE_MISC) enum MAP_32BIT = 0x40; @@ -156,7 +156,7 @@ else version (X86_Any) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/aarch64/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/aarch64/bits/mman.h else version (AArch64) { static if (__USE_MISC) enum @@ -172,7 +172,7 @@ else version (AArch64) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/alpha/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/alpha/bits/mman.h else version (Alpha) { enum @@ -264,7 +264,7 @@ else version (Alpha) // POSIX_MADV_DONTNEED = 6, // } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/arm/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/arm/bits/mman.h else version (ARM) { static if (__USE_MISC) enum @@ -280,7 +280,7 @@ else version (ARM) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/hppa/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/hppa/bits/mman.h else version (HPPA_Any) { enum @@ -384,7 +384,7 @@ else version (HPPA_Any) // POSIX_MADV_DONTNEED = 4, // } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/ia64/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/ia64/bits/mman.h else version (IA64) { static if (__USE_MISC) enum @@ -401,7 +401,7 @@ else version (IA64) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/m68k/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/m68k/bits/mman.h else version (M68K) { static if (__USE_MISC) enum @@ -417,7 +417,7 @@ else version (M68K) MAP_HUGETLB = 0x40000, } } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/mips/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/mman.h else version (MIPS_Any) { static if (__USE_MISC) enum @@ -440,7 +440,7 @@ else // -// https://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=bits/mman-linux.h +// https://sourceware.org/git/?p=glibc.git;a=blob;f=bits/mman-linux.h version (Alpha) { } @@ -527,12 +527,12 @@ else } // Workaround https://issues.dlang.org/show_bug.cgi?id=17883 -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/sparc/bits/mman.h version (SPARC_Any) { static if (__USE_MISC) enum MAP_RENAME = MAP_ANONYMOUS; } -// http://sourceware.org/git/?p=glibc.git;a=blob;hb=51e945a8f950a6695754b11c1e6fba8bb750e100;f=sysdeps/unix/sysv/linux/mips/bits/mman.h +// http://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/mips/bits/mman.h else version (MIPS_Any) { static if (__USE_MISC) enum MAP_RENAME = MAP_ANONYMOUS; diff --git a/libphobos/libdruntime/core/sys/linux/syscalls.d b/libphobos/libdruntime/core/sys/linux/syscalls.d new file mode 100644 index 00000000000..8c653719317 --- /dev/null +++ b/libphobos/libdruntime/core/sys/linux/syscalls.d @@ -0,0 +1,745 @@ +module core.sys.linux.syscalls; + +version (linux): +extern (C): +@system: +nothrow: +@nogc: + +import core.stdc.config : c_long; + +version (CoreDdoc) +{ + /// Linux system call number from Linux's asm/unistd.h + enum SystemCall : c_long; +} +else version (X86_64) +{ + // https://github.com/torvalds/linux/blob/v4.14/arch/sh/include/uapi/asm/unistd_64.h + // https://github.com/torvalds/linux/blob/v4.14/arch/x86/entry/syscalls/syscall_64.tbl + enum SystemCall : c_long + { + read = 0, + write = 1, + open = 2, + close = 3, + stat = 4, + fstat = 5, + lstat = 6, + poll = 7, + lseek = 8, + mmap = 9, + mprotect = 10, + munmap = 11, + brk = 12, + rt_sigaction = 13, + rt_sigprocmask = 14, + rt_sigreturn = 15, + ioctl = 16, + pread64 = 17, + pwrite64 = 18, + readv = 19, + writev = 20, + access = 21, + pipe = 22, + select = 23, + sched_yield = 24, + mremap = 25, + msync = 26, + mincore = 27, + madvise = 28, + shmget = 29, + shmat = 30, + shmctl = 31, + dup = 32, + dup2 = 33, + pause = 34, + nanosleep = 35, + getitimer = 36, + alarm = 37, + setitimer = 38, + getpid = 39, + sendfile = 40, + socket = 41, + connect = 42, + accept = 43, + sendto = 44, + recvfrom = 45, + sendmsg = 46, + recvmsg = 47, + shutdown = 48, + bind = 49, + listen = 50, + getsockname = 51, + getpeername = 52, + socketpair = 53, + setsockopt = 54, + getsockopt = 55, + clone = 56, + fork = 57, + vfork = 58, + execve = 59, + exit = 60, + wait4 = 61, + kill = 62, + uname = 63, + semget = 64, + semop = 65, + semctl = 66, + shmdt = 67, + msgget = 68, + msgsnd = 69, + msgrcv = 70, + msgctl = 71, + fcntl = 72, + flock = 73, + fsync = 74, + fdatasync = 75, + truncate = 76, + ftruncate = 77, + getdents = 78, + getcwd = 79, + chdir = 80, + fchdir = 81, + rename = 82, + mkdir = 83, + rmdir = 84, + creat = 85, + link = 86, + unlink = 87, + symlink = 88, + readlink = 89, + chmod = 90, + fchmod = 91, + chown = 92, + fchown = 93, + lchown = 94, + umask = 95, + gettimeofday = 96, + getrlimit = 97, + getrusage = 98, + sysinfo = 99, + times = 100, + ptrace = 101, + getuid = 102, + syslog = 103, + getgid = 104, + setuid = 105, + setgid = 106, + geteuid = 107, + getegid = 108, + setpgid = 109, + getppid = 110, + getpgrp = 111, + setsid = 112, + setreuid = 113, + setregid = 114, + getgroups = 115, + setgroups = 116, + setresuid = 117, + getresuid = 118, + setresgid = 119, + getresgid = 120, + getpgid = 121, + setfsuid = 122, + setfsgid = 123, + getsid = 124, + capget = 125, + capset = 126, + rt_sigpending = 127, + rt_sigtimedwait = 128, + rt_sigqueueinfo = 129, + rt_sigsuspend = 130, + sigaltstack = 131, + utime = 132, + mknod = 133, + uselib = 134, + personality = 135, + ustat = 136, + statfs = 137, + fstatfs = 138, + sysfs = 139, + getpriority = 140, + setpriority = 141, + sched_setparam = 142, + sched_getparam = 143, + sched_setscheduler = 144, + sched_getscheduler = 145, + sched_get_priority_max = 146, + sched_get_priority_min = 147, + sched_rr_get_interval = 148, + mlock = 149, + munlock = 150, + mlockall = 151, + munlockall = 152, + vhangup = 153, + modify_ldt = 154, + pivot_root = 155, + _sysctl = 156, + prctl = 157, + arch_prctl = 158, + adjtimex = 159, + setrlimit = 160, + chroot = 161, + sync = 162, + acct = 163, + settimeofday = 164, + mount = 165, + umount2 = 166, + swapon = 167, + swapoff = 168, + reboot = 169, + sethostname = 170, + setdomainname = 171, + iopl = 172, + ioperm = 173, + create_module = 174, + init_module = 175, + delete_module = 176, + get_kernel_syms = 177, + query_module = 178, + quotactl = 179, + nfsservctl = 180, + getpmsg = 181, + putpmsg = 182, + afs_syscall = 183, + tuxcall = 184, + security = 185, + gettid = 186, + readahead = 187, + setxattr = 188, + lsetxattr = 189, + fsetxattr = 190, + getxattr = 191, + lgetxattr = 192, + fgetxattr = 193, + listxattr = 194, + llistxattr = 195, + flistxattr = 196, + removexattr = 197, + lremovexattr = 198, + fremovexattr = 199, + tkill = 200, + time = 201, + futex = 202, + sched_setaffinity = 203, + sched_getaffinity = 204, + set_thread_area = 205, + io_setup = 206, + io_destroy = 207, + io_getevents = 208, + io_submit = 209, + io_cancel = 210, + get_thread_area = 211, + lookup_dcookie = 212, + epoll_create = 213, + epoll_ctl_old = 214, + epoll_wait_old = 215, + remap_file_pages = 216, + getdents64 = 217, + set_tid_address = 218, + restart_syscall = 219, + semtimedop = 220, + fadvise64 = 221, + timer_create = 222, + timer_settime = 223, + timer_gettime = 224, + timer_getoverrun = 225, + timer_delete = 226, + clock_settime = 227, + clock_gettime = 228, + clock_getres = 229, + clock_nanosleep = 230, + exit_group = 231, + epoll_wait = 232, + epoll_ctl = 233, + tgkill = 234, + utimes = 235, + vserver = 236, + mbind = 237, + set_mempolicy = 238, + get_mempolicy = 239, + mq_open = 240, + mq_unlink = 241, + mq_timedsend = 242, + mq_timedreceive = 243, + mq_notify = 244, + mq_getsetattr = 245, + kexec_load = 246, + waitid = 247, + add_key = 248, + request_key = 249, + keyctl = 250, + ioprio_set = 251, + ioprio_get = 252, + inotify_init = 253, + inotify_add_watch = 254, + inotify_rm_watch = 255, + migrate_pages = 256, + openat = 257, + mkdirat = 258, + mknodat = 259, + fchownat = 260, + futimesat = 261, + newfstatat = 262, + unlinkat = 263, + renameat = 264, + linkat = 265, + symlinkat = 266, + readlinkat = 267, + fchmodat = 268, + faccessat = 269, + pselect6 = 270, + ppoll = 271, + unshare = 272, + set_robust_list = 273, + get_robust_list = 274, + splice = 275, + tee = 276, + sync_file_range = 277, + vmsplice = 278, + move_pages = 279, + utimensat = 280, + epoll_pwait = 281, + signalfd = 282, + timerfd_create = 283, + eventfd = 284, + fallocate = 285, + timerfd_settime = 286, + timerfd_gettime = 287, + accept4 = 288, + signalfd4 = 289, + eventfd2 = 290, + epoll_create1 = 291, + dup3 = 292, + pipe2 = 293, + inotify_init1 = 294, + preadv = 295, + pwritev = 296, + rt_tgsigqueueinfo = 297, + perf_event_open = 298, + recvmmsg = 299, + fanotify_init = 300, + fanotify_mark = 301, + prlimit64 = 302, + name_to_handle_at = 303, + open_by_handle_at = 304, + clock_adjtime = 305, + syncfs = 306, + sendmmsg = 307, + setns = 308, + getcpu = 309, + process_vm_readv = 310, + process_vm_writev = 311, + kcmp = 312, + finit_module = 313, + sched_setattr = 314, + sched_getattr = 315, + renameat2 = 316, + seccomp = 317, + getrandom = 318, + memfd_create = 319, + kexec_file_load = 320, + bpf = 321, + execveat = 322, + userfaultfd = 323, + membarrier = 324, + mlock2 = 325, + copy_file_range = 326, + preadv2 = 327, + pwritev2 = 328, + pkey_mprotect = 329, + pkey_alloc = 330, + pkey_free = 331, + statx = 332, + } +} +else version (X86) +{ + // https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_32.tbl + // https://github.com/torvalds/linux/blob/v4.14/arch/sh/include/uapi/asm/unistd_32.h + enum SystemCall : c_long + { + restart_syscall = 0, + exit = 1, + fork = 2, + read = 3, + write = 4, + open = 5, + close = 6, + waitpid = 7, + creat = 8, + link = 9, + unlink = 10, + execve = 11, + chdir = 12, + time = 13, + mknod = 14, + chmod = 15, + lchown = 16, + break_ = 17, + oldstat = 18, + lseek = 19, + getpid = 20, + mount = 21, + umount = 22, + setuid = 23, + getuid = 24, + stime = 25, + ptrace = 26, + alarm = 27, + oldfstat = 28, + pause = 29, + utime = 30, + stty = 31, + gtty = 32, + access = 33, + nice = 34, + ftime = 35, + sync = 36, + kill = 37, + rename = 38, + mkdir = 39, + rmdir = 40, + dup = 41, + pipe = 42, + times = 43, + prof = 44, + brk = 45, + setgid = 46, + getgid = 47, + signal = 48, + geteuid = 49, + getegid = 50, + acct = 51, + umount2 = 52, + lock = 53, + ioctl = 54, + fcntl = 55, + mpx = 56, + setpgid = 57, + ulimit = 58, + oldolduname = 59, + umask = 60, + chroot = 61, + ustat = 62, + dup2 = 63, + getppid = 64, + getpgrp = 65, + setsid = 66, + sigaction = 67, + sgetmask = 68, + ssetmask = 69, + setreuid = 70, + setregid = 71, + sigsuspend = 72, + sigpending = 73, + sethostname = 74, + setrlimit = 75, + getrlimit = 76, + getrusage = 77, + gettimeofday = 78, + settimeofday = 79, + getgroups = 80, + setgroups = 81, + select = 82, + symlink = 83, + oldlstat = 84, + readlink = 85, + uselib = 86, + swapon = 87, + reboot = 88, + readdir = 89, + mmap = 90, + munmap = 91, + truncate = 92, + ftruncate = 93, + fchmod = 94, + fchown = 95, + getpriority = 96, + setpriority = 97, + profil = 98, + statfs = 99, + fstatfs = 100, + ioperm = 101, + socketcall = 102, + syslog = 103, + setitimer = 104, + getitimer = 105, + stat = 106, + lstat = 107, + fstat = 108, + olduname = 109, + iopl = 110, + vhangup = 111, + idle = 112, + vm86old = 113, + wait4 = 114, + swapoff = 115, + sysinfo = 116, + ipc = 117, + fsync = 118, + sigreturn = 119, + clone = 120, + setdomainname = 121, + uname = 122, + modify_ldt = 123, + adjtimex = 124, + mprotect = 125, + sigprocmask = 126, + create_module = 127, + init_module = 128, + delete_module = 129, + get_kernel_syms = 130, + quotactl = 131, + getpgid = 132, + fchdir = 133, + bdflush = 134, + sysfs = 135, + personality = 136, + afs_syscall = 137, + setfsuid = 138, + setfsgid = 139, + _llseek = 140, + getdents = 141, + _newselect = 142, + flock = 143, + msync = 144, + readv = 145, + writev = 146, + getsid = 147, + fdatasync = 148, + _sysctl = 149, + mlock = 150, + munlock = 151, + mlockall = 152, + munlockall = 153, + sched_setparam = 154, + sched_getparam = 155, + sched_setscheduler = 156, + sched_getscheduler = 157, + sched_yield = 158, + sched_get_priority_max = 159, + sched_get_priority_min = 160, + sched_rr_get_interval = 161, + nanosleep = 162, + mremap = 163, + setresuid = 164, + getresuid = 165, + vm86 = 166, + query_module = 167, + poll = 168, + nfsservctl = 169, + setresgid = 170, + getresgid = 171, + prctl = 172, + rt_sigreturn = 173, + rt_sigaction = 174, + rt_sigprocmask = 175, + rt_sigpending = 176, + rt_sigtimedwait = 177, + rt_sigqueueinfo = 178, + rt_sigsuspend = 179, + pread64 = 180, + pwrite64 = 181, + chown = 182, + getcwd = 183, + capget = 184, + capset = 185, + sigaltstack = 186, + sendfile = 187, + getpmsg = 188, + putpmsg = 189, + vfork = 190, + ugetrlimit = 191, + mmap2 = 192, + truncate64 = 193, + ftruncate64 = 194, + stat64 = 195, + lstat64 = 196, + fstat64 = 197, + lchown32 = 198, + getuid32 = 199, + getgid32 = 200, + geteuid32 = 201, + getegid32 = 202, + setreuid32 = 203, + setregid32 = 204, + getgroups32 = 205, + setgroups32 = 206, + fchown32 = 207, + setresuid32 = 208, + getresuid32 = 209, + setresgid32 = 210, + getresgid32 = 211, + chown32 = 212, + setuid32 = 213, + setgid32 = 214, + setfsuid32 = 215, + setfsgid32 = 216, + pivot_root = 217, + mincore = 218, + madvise = 219, + getdents64 = 220, + fcntl64 = 221, + gettid = 224, + readahead = 225, + setxattr = 226, + lsetxattr = 227, + fsetxattr = 228, + getxattr = 229, + lgetxattr = 230, + fgetxattr = 231, + listxattr = 232, + llistxattr = 233, + flistxattr = 234, + removexattr = 235, + lremovexattr = 236, + fremovexattr = 237, + tkill = 238, + sendfile64 = 239, + futex = 240, + sched_setaffinity = 241, + sched_getaffinity = 242, + set_thread_area = 243, + get_thread_area = 244, + io_setup = 245, + io_destroy = 246, + io_getevents = 247, + io_submit = 248, + io_cancel = 249, + fadvise64 = 250, + exit_group = 252, + lookup_dcookie = 253, + epoll_create = 254, + epoll_ctl = 255, + epoll_wait = 256, + remap_file_pages = 257, + set_tid_address = 258, + timer_create = 259, + timer_settime = 260, + timer_gettime = 261, + timer_getoverrun = 262, + timer_delete = 263, + clock_settime = 264, + clock_gettime = 265, + clock_getres = 266, + clock_nanosleep = 267, + statfs64 = 268, + fstatfs64 = 269, + tgkill = 270, + utimes = 271, + fadvise64_64 = 272, + vserver = 273, + mbind = 274, + get_mempolicy = 275, + set_mempolicy = 276, + mq_open = 277, + mq_unlink = 278, + mq_timedsend = 279, + mq_timedreceive = 280, + mq_notify = 281, + mq_getsetattr = 282, + kexec_load = 283, + waitid = 284, + add_key = 286, + request_key = 287, + keyctl = 288, + ioprio_set = 289, + ioprio_get = 290, + inotify_init = 291, + inotify_add_watch = 292, + inotify_rm_watch = 293, + migrate_pages = 294, + openat = 295, + mkdirat = 296, + mknodat = 297, + fchownat = 298, + futimesat = 299, + fstatat64 = 300, + unlinkat = 301, + renameat = 302, + linkat = 303, + symlinkat = 304, + readlinkat = 305, + fchmodat = 306, + faccessat = 307, + pselect6 = 308, + ppoll = 309, + unshare = 310, + set_robust_list = 311, + get_robust_list = 312, + splice = 313, + sync_file_range = 314, + tee = 315, + vmsplice = 316, + move_pages = 317, + getcpu = 318, + epoll_pwait = 319, + utimensat = 320, + signalfd = 321, + timerfd_create = 322, + eventfd = 323, + fallocate = 324, + timerfd_settime = 325, + timerfd_gettime = 326, + signalfd4 = 327, + eventfd2 = 328, + epoll_create1 = 329, + dup3 = 330, + pipe2 = 331, + inotify_init1 = 332, + preadv = 333, + pwritev = 334, + rt_tgsigqueueinfo = 335, + perf_event_open = 336, + recvmmsg = 337, + fanotify_init = 338, + fanotify_mark = 339, + prlimit64 = 340, + name_to_handle_at = 341, + open_by_handle_at = 342, + clock_adjtime = 343, + syncfs = 344, + sendmmsg = 345, + setns = 346, + process_vm_readv = 347, + process_vm_writev = 348, + kcmp = 349, + finit_module = 350, + sched_setattr = 351, + sched_getattr = 352, + renameat2 = 353, + seccomp = 354, + getrandom = 355, + memfd_create = 356, + bpf = 357, + execveat = 358, + socket = 359, + socketpair = 360, + bind = 361, + connect = 362, + listen = 363, + accept4 = 364, + getsockopt = 365, + setsockopt = 366, + getsockname = 367, + getpeername = 368, + sendto = 369, + sendmsg = 370, + recvfrom = 371, + recvmsg = 372, + shutdown = 373, + userfaultfd = 374, + membarrier = 375, + mlock2 = 376, + copy_file_range = 377, + preadv2 = 378, + pwritev2 = 379, + pkey_mprotect = 380, + pkey_alloc = 381, + pkey_free = 382, + statx = 383, + arch_prctl = 384, + } +} diff --git a/libphobos/libdruntime/core/sys/linux/unistd.d b/libphobos/libdruntime/core/sys/linux/unistd.d index 48457467005..1ef16c12689 100644 --- a/libphobos/libdruntime/core/sys/linux/unistd.d +++ b/libphobos/libdruntime/core/sys/linux/unistd.d @@ -1,16 +1,20 @@ module core.sys.linux.unistd; -public import core.sys.posix.unistd; - version (linux): -extern(C): +extern (C): nothrow: @system: +@nogc: + +public import core.sys.posix.unistd; +public import core.sys.linux.syscalls : SystemCall; +import core.stdc.config : c_long; // Additional seek constants for sparse file handling // from Linux's unistd.h, stdio.h, and linux/fs.h // (see http://man7.org/linux/man-pages/man2/lseek.2.html) -enum { +enum +{ /// Offset is relative to the next location containing data SEEK_DATA = 3, /// Offset is relative to the next hole (or EOF if file is not sparse) @@ -22,3 +26,17 @@ char* getpass(const(char)* prompt); // Exit all threads in a process void exit_group(int status); + +/** +Invoke system call specified by number, passing it the remaining arguments. +This is completely system-dependent, and not often useful. + +In Unix, `syscall' sets `errno' for all errors and most calls return -1 +for errors; in many systems you cannot pass arguments or get return +values for all system calls (`pipe', `fork', and `getppid' typically +among them). + +In Mach, all system calls take normal arguments and always return an +error code (zero for success). +*/ +c_long syscall(SystemCall number, ...) @nogc nothrow; diff --git a/libphobos/libdruntime/core/sys/openbsd/dlfcn.d b/libphobos/libdruntime/core/sys/openbsd/dlfcn.d index a8e8565cb48..b28dc63d5c7 100644 --- a/libphobos/libdruntime/core/sys/openbsd/dlfcn.d +++ b/libphobos/libdruntime/core/sys/openbsd/dlfcn.d @@ -1,7 +1,7 @@ /** * D header file for OpenBSD. * - * $(LINK2 http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/include/link_elf.h?rev=1.6&content-type=text/x-cvsweb-markup, dlfcn.h) + * $(LINK2 https://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/include/dlfcn.h?rev=1.15&content-type=text/plain, dlfcn.h) */ module core.sys.openbsd.dlfcn; @@ -16,6 +16,7 @@ static assert(RTLD_NOW == 2); static assert(RTLD_GLOBAL == 0x100); static assert(RTLD_LOCAL == 0); enum RTLD_TRACE = 0x200; +enum RTLD_NODELETE = 0x400; enum RTLD_NEXT = cast(void *)-1; enum RTLD_DEFAULT = cast(void *)-2; @@ -24,6 +25,7 @@ enum RTLD_SELF = cast(void *)-3; enum DL_GETERRNO = 1; enum DL_SETTHREADLCK = 2; enum DL_SETBINDLCK = 3; +enum DL_REFERENCE = 4; enum DL_LAZY = RTLD_LAZY; diff --git a/libphobos/libdruntime/core/sys/openbsd/pthread_np.d b/libphobos/libdruntime/core/sys/openbsd/pthread_np.d new file mode 100644 index 00000000000..8344df23950 --- /dev/null +++ b/libphobos/libdruntime/core/sys/openbsd/pthread_np.d @@ -0,0 +1,23 @@ +/** + * D header file for OpenBSD pthread_np.h. + * + * Copyright: Copyright © 2021, The D Language Foundation + * License: Boost License 1.0. + * Authors: Brian Callahan + */ +module core.sys.openbsd.pthread_np; + +version (OpenBSD): +extern (C): +nothrow: +@nogc: + +public import core.sys.posix.sys.types; +import core.sys.posix.signal : stack_t; + +int pthread_mutexattr_getkind_np(pthread_mutexattr_t); +int pthread_mutexattr_setkind_np(pthread_mutexattr_t*, int); +void pthread_get_name_np(pthread_t, char*, size_t); +void pthread_set_name_np(pthread_t, const(char)*); +int pthread_stackseg_np(pthread_t, stack_t*); +int pthread_main_np(); diff --git a/libphobos/libdruntime/core/sys/openbsd/stdlib.d b/libphobos/libdruntime/core/sys/openbsd/stdlib.d index 2d4d7a9a4f2..c8c2b1b659f 100644 --- a/libphobos/libdruntime/core/sys/openbsd/stdlib.d +++ b/libphobos/libdruntime/core/sys/openbsd/stdlib.d @@ -13,5 +13,11 @@ extern (C): nothrow: @nogc: +void freezero(void*, size_t); +void* calloc_conceal(size_t, size_t); +void* malloc_conceal(size_t); +void* reallocarray(void*, size_t, size_t); +void* recallocarray(void*, size_t, size_t, size_t); + const(char)* getprogname(); -void setprogname(scope const char* name); +void setprogname(scope const char*); diff --git a/libphobos/libdruntime/core/sys/openbsd/string.d b/libphobos/libdruntime/core/sys/openbsd/string.d index cb978c8249b..131e67727e8 100644 --- a/libphobos/libdruntime/core/sys/openbsd/string.d +++ b/libphobos/libdruntime/core/sys/openbsd/string.d @@ -17,7 +17,13 @@ nothrow: static if (__BSD_VISIBLE) { + void explicit_bzero(void*, size_t); pure void* memmem(return const void* haystack, size_t haystacklen, scope const void* needle, size_t needlelen); + void* memrchr(scope const void*, int, size_t); + size_t strlcat(char*, scope const char*, size_t); + size_t strlcpy(char*, scope const char*, size_t); + void strmode(int, char*); + char* strsep(char**, scope const char*); pure int timingsafe_bcmp(scope const void*, scope const void*, size_t); pure int timingsafe_memcmp(scope const void*, scope const void*, size_t); } diff --git a/libphobos/libdruntime/core/sys/openbsd/sys/mman.d b/libphobos/libdruntime/core/sys/openbsd/sys/mman.d index 0e882072c94..765483436ac 100644 --- a/libphobos/libdruntime/core/sys/openbsd/sys/mman.d +++ b/libphobos/libdruntime/core/sys/openbsd/sys/mman.d @@ -19,11 +19,12 @@ import core.sys.posix.sys.types; // enum MAP_PRIVATE = 0x0002; // enum MAP_FIXED = 0x0010; // enum MAP_ANON = 0x1000; +// enum MAP_STACK = 0x4000; alias MAP_ANONYMOUS = MAP_ANON; -enum MAP_STACK = 0x4000; +enum MAP_CONCEAL = 0x8000; -enum MAP_FLAGMASK = 0x7ff7; +enum MAP_FLAGMASK = 0xfff7; alias MAP_COPY = MAP_PRIVATE; enum MAP_FILE = 0; @@ -45,7 +46,6 @@ static if (__BSD_VISIBLE) enum MADV_FREE = 6; int madvise(void *, size_t, int); - int mincore(const(void) *, size_t, char *); int minherit(void *, size_t, int); void* mquery(void *, size_t, int, int, int, off_t); } diff --git a/libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d b/libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d index c6f98455fef..3a4524245aa 100644 --- a/libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d +++ b/libphobos/libdruntime/core/sys/openbsd/sys/sysctl.d @@ -250,5 +250,4 @@ enum } /// -int sysctl(const int* name, uint namelen, void* oldp, size_t* oldlenp, - const void* newp, size_t newlen); +int sysctl(const int*, uint, void*, size_t*, void*, size_t); diff --git a/libphobos/libdruntime/core/sys/openbsd/unistd.d b/libphobos/libdruntime/core/sys/openbsd/unistd.d index ddd102cdeae..0b8580fb860 100644 --- a/libphobos/libdruntime/core/sys/openbsd/unistd.d +++ b/libphobos/libdruntime/core/sys/openbsd/unistd.d @@ -6,12 +6,12 @@ * Authors: Brian Callahan */ module core.sys.openbsd.unistd; -public import core.sys.posix.unistd; version (OpenBSD): extern (C): nothrow: @nogc: +int getentropy(void*, size_t); int pledge(const scope char*, const scope char*); int unveil(const scope char*, const scope char*); diff --git a/libphobos/libdruntime/core/sys/posix/netdb.d b/libphobos/libdruntime/core/sys/posix/netdb.d index bede63843d8..d1411ea8afb 100644 --- a/libphobos/libdruntime/core/sys/posix/netdb.d +++ b/libphobos/libdruntime/core/sys/posix/netdb.d @@ -567,6 +567,7 @@ else version (OpenBSD) enum AI_NUMERICHOST = 0x4; enum AI_EXT = 0x8; enum AI_NUMERICSERV = 0x10; + enum AI_V4MAPPED = 0; // Not supported enum AI_FQDN = 0x20; enum AI_ADDRCONFIG = 0x40; enum AI_MASK = AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST | AI_NUMERICSERV | AI_FQDN | AI_ADDRCONFIG; diff --git a/libphobos/libdruntime/core/sys/posix/sys/filio.d b/libphobos/libdruntime/core/sys/posix/sys/filio.d index afb6f82d978..a8d837c52b6 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/filio.d +++ b/libphobos/libdruntime/core/sys/posix/sys/filio.d @@ -34,3 +34,15 @@ version (Darwin) enum uint FIOGETOWN = _IOR!(int)('f', 123); // get owner enum uint FIODTYPE = _IOR!(int)('f', 122); // get d_type } + +version (OpenBSD) +{ + // File-descriptor ioctl's + enum uint FIOCLEX = _IO('f', 1); // set close on exec on fd + enum uint FIONCLEX = _IO('f', 2); // remove close on exec + enum uint FIONREAD = _IOR!(int)('f', 127); // get # bytes to read + enum uint FIONBIO = _IOW!(int)('f', 126); // set/clear non-blocking i/o + enum uint FIOASYNC = _IOW!(int)('f', 125); // set/clear async i/o + enum uint FIOSETOWN = _IOW!(int)('f', 124); // set owner + enum uint FIOGETOWN = _IOR!(int)('f', 123); // get owner +} diff --git a/libphobos/libdruntime/core/sys/posix/sys/ioccom.d b/libphobos/libdruntime/core/sys/posix/sys/ioccom.d index 4c1a820161c..4a0e96b3ea9 100755 --- a/libphobos/libdruntime/core/sys/posix/sys/ioccom.d +++ b/libphobos/libdruntime/core/sys/posix/sys/ioccom.d @@ -137,3 +137,59 @@ else version (FreeBSD) return _IOC(IOC_INOUT, cast(uint)g, cast(uint)n, T.sizeof); } } +else version (OpenBSD) +{ + /* OpenBSD ioctl's encode the command in the lower 16-bits + * and the size of any in/out parameters in the lower 13 bits of the upper + * 16-bits of a 32 bit unsigned integer. The high 3 bits of the upper + * 16-bits encode the in/out status of the parameter. + */ + enum uint IOCPARM_MASK = 0x1fff; // parameter length mask + uint IOCPARM_LEN(uint x) // to extract the encoded parameter length + { + return ((x >> 16) & IOCPARM_MASK); + } + uint IOCBASECMD(uint x) // to extract the encoded command + { + return (x & ~(IOCPARM_MASK << 16)); + } + uint IOCGROUP(uint x) // to extract the encoded group + { + return ((x >> 8) & 0xff); + } + + enum uint IOCPARM_MAX = (1 << 12); // max size of ioctl args + + enum uint IOC_VOID = 0x20000000; // no parameters + enum uint IOC_OUT = 0x40000000; // copy parameters back + enum uint IOC_IN = 0x80000000; // copy parameters into + enum uint IOC_INOUT = (IOC_IN | IOC_OUT); + enum uint IOC_DIRMASK = 0xe0000000; + + // encode the ioctl info into 32 bits + uint _IOC(uint inorout, uint group, uint num, size_t len) + { + return (inorout | ((len & IOCPARM_MASK) << 16) | (group << 8) | num); + } + + // encode a command with no parameters + uint _IO(char g, int n) + { + return _IOC(IOC_VOID, cast(uint)g, cast(uint)n, cast(size_t)0); + } + // encode a command that returns info + uint _IOR(T)(char g, int n) + { + return _IOC(IOC_OUT, cast(uint)g, cast(uint)n, T.sizeof); + } + // encode a command that takes info + uint _IOW(T)(char g, int n) + { + return _IOC(IOC_IN, cast(uint)g, cast(uint)n, T.sizeof); + } + // encode a command that takes info and returns info + uint _IOWR(T)(char g, int n) + { + return _IOC(IOC_INOUT, cast(uint)g, cast(uint)n, T.sizeof); + } +} diff --git a/libphobos/libdruntime/core/sys/posix/sys/ioctl.d b/libphobos/libdruntime/core/sys/posix/sys/ioctl.d index 0266200c811..c6f21d6cd0a 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/ioctl.d +++ b/libphobos/libdruntime/core/sys/posix/sys/ioctl.d @@ -375,6 +375,11 @@ else version (NetBSD) } else version (OpenBSD) { + import core.sys.posix.termios; // termios + import core.sys.posix.sys.time; // timeval + + public import core.sys.posix.sys.ttycom; // Terminal related ioctls + struct winsize { ushort ws_row; @@ -383,6 +388,8 @@ else version (OpenBSD) ushort ws_ypixel; } + public import core.sys.posix.sys.filio; // File related ioctls + int ioctl(int, c_ulong, ...); } else version (DragonFlyBSD) diff --git a/libphobos/libdruntime/core/sys/posix/sys/mman.d b/libphobos/libdruntime/core/sys/posix/sys/mman.d index a74a213691c..18da10246e4 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/mman.d +++ b/libphobos/libdruntime/core/sys/posix/sys/mman.d @@ -460,6 +460,7 @@ else version (OpenBSD) enum MAP_PRIVATE = 0x0002; enum MAP_FIXED = 0x0010; enum MAP_ANON = 0x1000; + enum MAP_STACK = 0x4000; enum MAP_FAILED = cast(void*)-1; diff --git a/libphobos/libdruntime/core/sys/posix/sys/socket.d b/libphobos/libdruntime/core/sys/posix/sys/socket.d index 430d0c0d1e3..de51c6a4746 100644 --- a/libphobos/libdruntime/core/sys/posix/sys/socket.d +++ b/libphobos/libdruntime/core/sys/posix/sys/socket.d @@ -536,7 +536,8 @@ version (CRuntime_Glibc) enum { - SOMAXCONN = 128 + // https://sourceware.org/git/?p=glibc.git;a=commit;f=sysdeps/unix/sysv/linux/bits/socket.h;h=96958e2700f5b4f4d1183a0606b2b9848a53ea44 + SOMAXCONN = 4096 } enum : uint diff --git a/libphobos/libdruntime/core/sys/posix/sys/ttycom.d b/libphobos/libdruntime/core/sys/posix/sys/ttycom.d index 1a6c11be291..0cc2d9cdc84 100755 --- a/libphobos/libdruntime/core/sys/posix/sys/ttycom.d +++ b/libphobos/libdruntime/core/sys/posix/sys/ttycom.d @@ -214,3 +214,104 @@ else version (FreeBSD) enum uint NETGRAPHDISC = 6; // Netgraph tty node discipline enum uint H4DISC = 7; // Netgraph Blutooth H4 discipline } +else version (OpenBSD) +{ + struct winsize { + ushort ws_row; // rows, in characters + ushort ws_col; // columns, in characters + ushort ws_xpixel; // horizontal size, pixels + ushort ws_ypixel; // vertical size, pixels + } + + struct tstamps { + int ts_set; // TIOCM_CAR and/or TIOCM_CTS + int ts_clr; + } + + // Serial/TTY ioctl's + // 0-2 compat + // 3-7 unused + // 8-10 compat + // 11-12 unused + enum uint TIOCEXCL = _IO('t', 13); // set exclusive use of tty + enum uint TIOCNXCL = _IO('t', 14); // reset exclusive use of tty + enum uint TIOCFLUSH = _IOW!(int)('t', 16); // flush buffers + // 17-18 compat + enum uint TIOCGETA = _IOR!(termios)('t', 19); // get termios struct + enum uint TIOCSETA = _IOW!(termios)('t', 20); // set termios struct + enum uint TIOCSETAW = _IOW!(termios)('t', 21); // drain output, set + enum uint TIOCSETAF = _IOW!(termios)('t', 22); // drn out, fls in, set + // 23-25 unused + enum uint TIOCGETD = _IOR!(int)('t', 26); // get line discipline + enum uint TIOCSETD = _IOW!(int)('t', 27); // set line discipline + enum uint TIOCSETVERAUTH = _IOW!(int)('t', 28); // set verified auth + enum uint TIOCCLRVERAUTH = _IO('t', 29); // clear verified auth + enum uint TIOCCHKVERAUTH = _IO('t', 30); // check verified auth + // 31-89 unused + enum uint TIOCSTSTAMP = _IOW!(tstamps)('t', 90); // timestamp reasons + enum uint TIOCGTSTAMP = _IOR!(timeval)('t', 91); // get timestamp + // 92-93 device flags + enum uint TIOCSFLAGS = _IOW!(int)('t', 92); // set device flags + enum uint TIOCGFLAGS = _IOR!(int)('t', 93); // get device flags + // 94-97 conflicts: tun and tap + enum uint TIOCDRAIN = _IO('t', 94); // wait till output drained + enum uint TIOCSIG = _IOW!(int)('t', 95); // pty: generate signal + enum uint TIOCEXT = _IOW!(int)('t', 96); // pty: external processing + enum uint TIOCSCTTY = _IO('t', 97); // become controlling tty + enum uint TIOCCONS = _IOW!(int)('t', 98); // become virtual console + enum uint TIOCGSID = _IOR!(int)('t', 99); // get session id + // 100 unused + enum uint TIOCSTAT = _IO('t', 101); // simulate ^T status message + enum uint TIOCUCNTL = _IOW!(int)('t', 102); // pty: set/clr usr cntl mode + enum uint UIOCCMD(n) = _IO('u', n); // usr cntl op "n" + enum uint TIOCSWINSZ = _IOW!(winsize)('t', 103); // set window size + enum uint TIOCGWINSZ = _IOR!(winsize)('t', 104); // get window size + enum uint TIOCREMOTE = _IOW!(int)('t', 105); // remote input editing + enum uint TIOCMGET = _IOR!(int)('t', 106); // get all modem bits + enum uint TIOCM_LE = 0x01; // line enable + enum uint TIOCM_DTR = 0x02; // data terminal ready + enum uint TIOCM_RTS = 0x04; // request to send + enum uint TIOCM_ST = 0x08; // secondary transmit + enum uint TIOCM_SR = 0x10; // secondary receive + enum uint TIOCM_CTS = 0x20; // clear to send + enum uint TIOCM_CAR = 0x40; // carrier detect + enum uint TIOCM_RNG = 0x80; // ring + enum uint TIOCM_DSR = 0x100; // data set ready + enum uint TIOCM_CD = TIOCM_CAR; + enum uint TIOCM_RI = TIOCM_RNG; + enum uint TIOCMBIC = _IOW!(int)('t', 107); // bic modem bits + enum uint TIOCMBIS = _IOW!(int)('t', 108); // bis modem bits + enum uint TIOCMSET = _IOW!(int)('t', 109); // set all modem bits + enum uint TIOCSTART = _IO('t', 110); // start output like ^Q + enum uint TIOCSTOP = _IO('t', 111); // stop output like ^S + enum uint TIOCPKT = _IOW!(int)('t', 112); // pty: set/clr packet mode + enum uint TIOCPKT_DATA = 0x00; // data packet + enum uint TIOCPKT_FLUSHREAD = 0x01; // flush packet + enum uint TIOCPKT_FLUSHWRITE = 0x02; // flush packet + enum uint TIOCPKT_STOP = 0x04; // stop output + enum uint TIOCPKT_START = 0x08; // start output + enum uint TIOCPKT_NOSTOP = 0x10; // no more ^S, ^Q + enum uint TIOCPKT_DOSTOP = 0x20; // now do ^S, ^Q + enum uint TIOCPKT_IOCTL = 0x40; // state change of pty driver + enum uint TIOCNOTTY = _IO('t', 113); // void tty association + // 114 unused + enum uint TIOCOUTQ = _IOR!(int)('t', 115); // output queue size + // 116-117 compat + enum uint TIOCSPGRP = _IOW!(int)('t', 118); // set pgrp of tty + enum uint TIOCGPGRP = _IOR!(int)('t', 119); // get pgrp of tty + + enum uint TIOCCDTR = _IO('t', 120); // clear data terminal ready + enum uint TIOCSDTR = _IO('t', 121); // set data terminal ready + enum uint TIOCCBRK = _IO('t', 122); // clear break bit + enum uint TIOCSBRK = _IO('t', 123); // set break bit + // 124-127 compat + + enum uint TTYDISC = 0; // termios tty line discipline + enum uint TABLDISC = 3; // tablet description + enum uint SLIPDISC = 4; // serial IP discipline + enum uint PPPDISC = 5; // PPP discipline + enum uint STRIPDISC = 6; // metricom wireless IP discipline + enum uint NMEADISC = 7; // NMEA0183 discipline + enum uint MSTSDISC = 8; // Meinberg time string discipline + enum uint ENDRUNDISC = 9; // Endrun time format discipline +} diff --git a/libphobos/libdruntime/core/sys/posix/time.d b/libphobos/libdruntime/core/sys/posix/time.d index 52a6f92be0a..a9be87c8597 100644 --- a/libphobos/libdruntime/core/sys/posix/time.d +++ b/libphobos/libdruntime/core/sys/posix/time.d @@ -341,11 +341,6 @@ else version (OpenBSD) int clock_gettime(clockid_t, timespec*); int clock_settime(clockid_t, const scope timespec*); int nanosleep(const scope timespec*, timespec*); - int timer_create(clockid_t, sigevent*, timer_t*); - int timer_delete(timer_t); - int timer_gettime(timer_t, itimerspec*); - int timer_getoverrun(timer_t); - int timer_settime(timer_t, int, const scope itimerspec*, itimerspec*); } else version (Solaris) { diff --git a/libphobos/libdruntime/core/sys/windows/accctrl.d b/libphobos/libdruntime/core/sys/windows/accctrl.d index 77bc184710f..e967da6ed63 100644 --- a/libphobos/libdruntime/core/sys/windows/accctrl.d +++ b/libphobos/libdruntime/core/sys/windows/accctrl.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_accctrl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_accctrl.d) */ module core.sys.windows.accctrl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/aclapi.d b/libphobos/libdruntime/core/sys/windows/aclapi.d index 1e75d3f52ee..f145ac26af0 100644 --- a/libphobos/libdruntime/core/sys/windows/aclapi.d +++ b/libphobos/libdruntime/core/sys/windows/aclapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_aclapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_aclapi.d) */ module core.sys.windows.aclapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/aclui.d b/libphobos/libdruntime/core/sys/windows/aclui.d index 6ae37c6a686..c5a28992631 100644 --- a/libphobos/libdruntime/core/sys/windows/aclui.d +++ b/libphobos/libdruntime/core/sys/windows/aclui.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_aclui.d) + * Source: $(DRUNTIMESRC core/sys/windows/_aclui.d) */ module core.sys.windows.aclui; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/basetsd.d b/libphobos/libdruntime/core/sys/windows/basetsd.d index 3bcac1208ca..0c689024aaa 100644 --- a/libphobos/libdruntime/core/sys/windows/basetsd.d +++ b/libphobos/libdruntime/core/sys/windows/basetsd.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_basetsd.d) + * Source: $(DRUNTIMESRC core/sys/windows/_basetsd.d) */ module core.sys.windows.basetsd; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/basetyps.d b/libphobos/libdruntime/core/sys/windows/basetyps.d index abe312e4ddc..086e6ab30e3 100644 --- a/libphobos/libdruntime/core/sys/windows/basetyps.d +++ b/libphobos/libdruntime/core/sys/windows/basetyps.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.10 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_basetyps.d) + * Source: $(DRUNTIMESRC core/sys/windows/_basetyps.d) */ module core.sys.windows.basetyps; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/cderr.d b/libphobos/libdruntime/core/sys/windows/cderr.d index 278a11c5b95..afcdf272743 100644 --- a/libphobos/libdruntime/core/sys/windows/cderr.d +++ b/libphobos/libdruntime/core/sys/windows/cderr.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_cderr.d) + * Source: $(DRUNTIMESRC core/sys/windows/_cderr.d) */ module core.sys.windows.cderr; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/cguid.d b/libphobos/libdruntime/core/sys/windows/cguid.d index 8d67b881ee1..0afbc42e8b0 100644 --- a/libphobos/libdruntime/core/sys/windows/cguid.d +++ b/libphobos/libdruntime/core/sys/windows/cguid.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_cguid.d) + * Source: $(DRUNTIMESRC core/sys/windows/_cguid.d) */ module core.sys.windows.cguid; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/comcat.d b/libphobos/libdruntime/core/sys/windows/comcat.d index cb45ff5762c..3018c64d7f0 100644 --- a/libphobos/libdruntime/core/sys/windows/comcat.d +++ b/libphobos/libdruntime/core/sys/windows/comcat.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_comcat.d) + * Source: $(DRUNTIMESRC core/sys/windows/_comcat.d) */ module core.sys.windows.comcat; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/commctrl.d b/libphobos/libdruntime/core/sys/windows/commctrl.d index f008e75ddee..4bc60b1fd8b 100644 --- a/libphobos/libdruntime/core/sys/windows/commctrl.d +++ b/libphobos/libdruntime/core/sys/windows/commctrl.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.12 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_commctrl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_commctrl.d) */ module core.sys.windows.commctrl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/commdlg.d b/libphobos/libdruntime/core/sys/windows/commdlg.d index 1e8057c5f06..b49d2fba6fe 100644 --- a/libphobos/libdruntime/core/sys/windows/commdlg.d +++ b/libphobos/libdruntime/core/sys/windows/commdlg.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.12 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_commdlg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_commdlg.d) */ module core.sys.windows.commdlg; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/core.d b/libphobos/libdruntime/core/sys/windows/core.d index 8b355b3e2a6..e8bc4a7bcc8 100644 --- a/libphobos/libdruntime/core/sys/windows/core.d +++ b/libphobos/libdruntime/core/sys/windows/core.d @@ -2,7 +2,7 @@ * Helper module for the Windows API * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_core.d) + * Source: $(DRUNTIMESRC core/sys/windows/_core.d) */ module core.sys.windows.core; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/cpl.d b/libphobos/libdruntime/core/sys/windows/cpl.d index b040aad3eb5..49ebb208c74 100644 --- a/libphobos/libdruntime/core/sys/windows/cpl.d +++ b/libphobos/libdruntime/core/sys/windows/cpl.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_cpl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_cpl.d) */ module core.sys.windows.cpl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/cplext.d b/libphobos/libdruntime/core/sys/windows/cplext.d index c9452fad77c..e13316bcec9 100644 --- a/libphobos/libdruntime/core/sys/windows/cplext.d +++ b/libphobos/libdruntime/core/sys/windows/cplext.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_cplext.d) + * Source: $(DRUNTIMESRC core/sys/windows/_cplext.d) */ module core.sys.windows.cplext; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/custcntl.d b/libphobos/libdruntime/core/sys/windows/custcntl.d index ccfc7ca4ffc..c736cb31a9c 100644 --- a/libphobos/libdruntime/core/sys/windows/custcntl.d +++ b/libphobos/libdruntime/core/sys/windows/custcntl.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_custcntl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_custcntl.d) */ module core.sys.windows.custcntl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/dbt.d b/libphobos/libdruntime/core/sys/windows/dbt.d index a591152cf88..308c609a9ba 100644 --- a/libphobos/libdruntime/core/sys/windows/dbt.d +++ b/libphobos/libdruntime/core/sys/windows/dbt.d @@ -5,7 +5,7 @@ * * Authors: Vladimir Vlasov * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_dbt.d) + * Source: $(DRUNTIMESRC core/sys/windows/_dbt.d) */ module core.sys.windows.dbt; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/dde.d b/libphobos/libdruntime/core/sys/windows/dde.d index 0e062274ccf..bec339c223c 100644 --- a/libphobos/libdruntime/core/sys/windows/dde.d +++ b/libphobos/libdruntime/core/sys/windows/dde.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_dde.d) + * Source: $(DRUNTIMESRC core/sys/windows/_dde.d) */ module core.sys.windows.dde; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ddeml.d b/libphobos/libdruntime/core/sys/windows/ddeml.d index 209772f6af9..22b330cfc47 100644 --- a/libphobos/libdruntime/core/sys/windows/ddeml.d +++ b/libphobos/libdruntime/core/sys/windows/ddeml.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ddeml.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ddeml.d) */ module core.sys.windows.ddeml; version (Windows): @@ -16,6 +16,11 @@ pragma(lib, "user32"); import core.sys.windows.basetsd, core.sys.windows.windef, core.sys.windows.winnt; +mixin DECLARE_HANDLE!("HCONVLIST"); +mixin DECLARE_HANDLE!("HCONV"); +mixin DECLARE_HANDLE!("HSZ"); +mixin DECLARE_HANDLE!("HDDEDATA"); + enum : int { CP_WINANSI = 1004, CP_WINUNICODE = 1200 @@ -76,10 +81,13 @@ enum : UINT { XTYP_SHIFT = 4 } -/+ -#define TIMEOUT_ASYNC 0xFFFFFFFF -#define QID_SYNC 0xFFFFFFFF -+/ +enum : UINT { + TIMEOUT_ASYNC = 0xFFFFFFFF +} + +enum : UINT { + QID_SYNC = 0xFFFFFFFF +} enum : UINT { ST_CONNECTED = 1, @@ -93,9 +101,9 @@ enum : UINT { ST_ISSELF = 256 } -/+ -#define CADV_LATEACK 0xFFFF -+/ +enum : UINT { + CADV_LATEACK = 0xFFFF +} enum : UINT { DMLERR_NO_ERROR = 0, @@ -121,22 +129,26 @@ enum : UINT { DMLERR_LAST = DMLERR_UNFOUND_QUEUE_ID } -/+ -#define DDE_FACK 0x8000 -#define DDE_FBUSY 0x4000 -#define DDE_FDEFERUPD 0x4000 -#define DDE_FACKREQ 0x8000 -#define DDE_FRELEASE 0x2000 -#define DDE_FREQUESTED 0x1000 -#define DDE_FAPPSTATUS 0x00ff -#define DDE_FNOTPROCESSED 0 -#define DDE_FACKRESERVED (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS)) -#define DDE_FADVRESERVED (~(DDE_FACKREQ|DDE_FDEFERUPD)) -#define DDE_FDATRESERVED (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED)) -#define DDE_FPOKRESERVED (~DDE_FRELEASE) -#define MSGF_DDEMGR 0x8001 -#define CBR_BLOCK ((HDDEDATA)0xffffffff) -+/ +enum : UINT { + DDE_FACK = 0x8000, + DDE_FBUSY = 0x4000, + DDE_FDEFERUPD = 0x4000, + DDE_FACKREQ = 0x8000, + DDE_FRELEASE = 0x2000, + DDE_FREQUESTED = 0x1000, + DDE_FAPPSTATUS = 0x00ff, + DDE_FNOTPROCESSED = 0, + DDE_FACKRESERVED = (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS)), + DDE_FADVRESERVED = (~(DDE_FACKREQ|DDE_FDEFERUPD)), + DDE_FDATRESERVED = (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED)), + DDE_FPOKRESERVED = (~DDE_FRELEASE) +} + +enum : UINT { + MSGF_DDEMGR = 0x8001 +} + +enum CBR_BLOCK = cast(HDDEDATA)-1; enum DWORD APPCLASS_STANDARD = 0, @@ -180,10 +192,13 @@ enum : UINT { DNS_FILTEROFF = 8 } -/+ -#define HDATA_APPOWNED 1 -#define MAX_MONITORS 4 -+/ +enum : UINT { + HDATA_APPOWNED = 1 +} + +enum : UINT { + MAX_MONITORS = 4 +} enum : int { MH_CREATE = 1, @@ -192,11 +207,6 @@ enum : int { MH_CLEANUP = 4 } -mixin DECLARE_HANDLE!("HCONVLIST"); -mixin DECLARE_HANDLE!("HCONV"); -mixin DECLARE_HANDLE!("HSZ"); -mixin DECLARE_HANDLE!("HDDEDATA"); - extern (Windows) alias HDDEDATA function(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, ULONG_PTR, ULONG_PTR) PFNCALLBACK; diff --git a/libphobos/libdruntime/core/sys/windows/dhcpcsdk.d b/libphobos/libdruntime/core/sys/windows/dhcpcsdk.d index 7b412c1e761..0d3d71690b8 100644 --- a/libphobos/libdruntime/core/sys/windows/dhcpcsdk.d +++ b/libphobos/libdruntime/core/sys/windows/dhcpcsdk.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_dhcpcsdk.d) + * Source: $(DRUNTIMESRC core/sys/windows/_dhcpcsdk.d) */ module core.sys.windows.dhcpcsdk; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/dlgs.d b/libphobos/libdruntime/core/sys/windows/dlgs.d index 796f02720ca..34cab9bea2a 100644 --- a/libphobos/libdruntime/core/sys/windows/dlgs.d +++ b/libphobos/libdruntime/core/sys/windows/dlgs.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_dlgs.d) + * Source: $(DRUNTIMESRC core/sys/windows/_dlgs.d) */ module core.sys.windows.dlgs; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/dll.d b/libphobos/libdruntime/core/sys/windows/dll.d index 8e9d7a07fc0..d602347f2a3 100644 --- a/libphobos/libdruntime/core/sys/windows/dll.d +++ b/libphobos/libdruntime/core/sys/windows/dll.d @@ -6,7 +6,7 @@ * $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0). * (See accompanying file LICENSE) * Authors: Rainer Schuetze - * Source: $(DRUNTIMESRC src/core/sys/windows/_dll.d) + * Source: $(DRUNTIMESRC core/sys/windows/_dll.d) */ /* NOTE: This file has been patched from the original DMD distribution to @@ -573,10 +573,10 @@ bool dll_thread_detach( bool detach_thread = true, bool exitTls = true ) /// --- mixin template SimpleDllMain() { - import core.sys.windows.windef : HINSTANCE; + import core.sys.windows.windef : HINSTANCE, BOOL, DWORD, LPVOID; extern(Windows) - bool DllMain(HINSTANCE hInstance, uint ulReason, void* reserved) + BOOL DllMain(HINSTANCE hInstance, DWORD ulReason, LPVOID reserved) { import core.sys.windows.winnt; import core.sys.windows.dll : diff --git a/libphobos/libdruntime/core/sys/windows/docobj.d b/libphobos/libdruntime/core/sys/windows/docobj.d index 89d5936f581..4e45693eb3d 100644 --- a/libphobos/libdruntime/core/sys/windows/docobj.d +++ b/libphobos/libdruntime/core/sys/windows/docobj.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_docobj.d) + * Source: $(DRUNTIMESRC core/sys/windows/_docobj.d) */ module core.sys.windows.docobj; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/errorrep.d b/libphobos/libdruntime/core/sys/windows/errorrep.d index 2b22e370ce5..63ec8d75746 100644 --- a/libphobos/libdruntime/core/sys/windows/errorrep.d +++ b/libphobos/libdruntime/core/sys/windows/errorrep.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_errorrep.d) + * Source: $(DRUNTIMESRC core/sys/windows/_errorrep.d) */ module core.sys.windows.errorrep; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/exdisp.d b/libphobos/libdruntime/core/sys/windows/exdisp.d index 1153112b5d0..8ee3c267371 100644 --- a/libphobos/libdruntime/core/sys/windows/exdisp.d +++ b/libphobos/libdruntime/core/sys/windows/exdisp.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_exdisp.d) + * Source: $(DRUNTIMESRC core/sys/windows/_exdisp.d) */ module core.sys.windows.exdisp; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/exdispid.d b/libphobos/libdruntime/core/sys/windows/exdispid.d index fcf04f9945e..8257476cf55 100644 --- a/libphobos/libdruntime/core/sys/windows/exdispid.d +++ b/libphobos/libdruntime/core/sys/windows/exdispid.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_exdispid.d) + * Source: $(DRUNTIMESRC core/sys/windows/_exdispid.d) */ module core.sys.windows.exdispid; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/httpext.d b/libphobos/libdruntime/core/sys/windows/httpext.d index 781d7cea74c..4e07c6aa15c 100644 --- a/libphobos/libdruntime/core/sys/windows/httpext.d +++ b/libphobos/libdruntime/core/sys/windows/httpext.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_httpext.d) + * Source: $(DRUNTIMESRC core/sys/windows/_httpext.d) */ module core.sys.windows.httpext; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/idispids.d b/libphobos/libdruntime/core/sys/windows/idispids.d index 074c3fa8b8f..c2d5becd8f3 100644 --- a/libphobos/libdruntime/core/sys/windows/idispids.d +++ b/libphobos/libdruntime/core/sys/windows/idispids.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_idispids.d) + * Source: $(DRUNTIMESRC core/sys/windows/_idispids.d) */ module core.sys.windows.idispids; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/imagehlp.d b/libphobos/libdruntime/core/sys/windows/imagehlp.d index f9edba1425f..ed93746d7f6 100644 --- a/libphobos/libdruntime/core/sys/windows/imagehlp.d +++ b/libphobos/libdruntime/core/sys/windows/imagehlp.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_imagehlp.d) + * Source: $(DRUNTIMESRC core/sys/windows/_imagehlp.d) */ module core.sys.windows.imagehlp; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/imm.d b/libphobos/libdruntime/core/sys/windows/imm.d index 3ebab30037f..128fd56e87c 100644 --- a/libphobos/libdruntime/core/sys/windows/imm.d +++ b/libphobos/libdruntime/core/sys/windows/imm.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_imm.d) + * Source: $(DRUNTIMESRC core/sys/windows/_imm.d) */ module core.sys.windows.imm; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/intshcut.d b/libphobos/libdruntime/core/sys/windows/intshcut.d index f2f44e1497d..eab7a8dafe2 100644 --- a/libphobos/libdruntime/core/sys/windows/intshcut.d +++ b/libphobos/libdruntime/core/sys/windows/intshcut.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_intshcut.d) + * Source: $(DRUNTIMESRC core/sys/windows/_intshcut.d) */ module core.sys.windows.intshcut; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ipexport.d b/libphobos/libdruntime/core/sys/windows/ipexport.d index b66aa26e091..dbb4a0eb5ff 100644 --- a/libphobos/libdruntime/core/sys/windows/ipexport.d +++ b/libphobos/libdruntime/core/sys/windows/ipexport.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ipexport.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ipexport.d) */ module core.sys.windows.ipexport; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/iphlpapi.d b/libphobos/libdruntime/core/sys/windows/iphlpapi.d index 313e40b92c7..f95e7990935 100644 --- a/libphobos/libdruntime/core/sys/windows/iphlpapi.d +++ b/libphobos/libdruntime/core/sys/windows/iphlpapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_iphlpapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_iphlpapi.d) */ module core.sys.windows.iphlpapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ipifcons.d b/libphobos/libdruntime/core/sys/windows/ipifcons.d index b1de472f0ba..09606f5d533 100644 --- a/libphobos/libdruntime/core/sys/windows/ipifcons.d +++ b/libphobos/libdruntime/core/sys/windows/ipifcons.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ipifcons.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ipifcons.d) */ module core.sys.windows.ipifcons; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/iprtrmib.d b/libphobos/libdruntime/core/sys/windows/iprtrmib.d index 1d23bc12cd9..3db453908a1 100644 --- a/libphobos/libdruntime/core/sys/windows/iprtrmib.d +++ b/libphobos/libdruntime/core/sys/windows/iprtrmib.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_iprtrmib.d) + * Source: $(DRUNTIMESRC core/sys/windows/_iprtrmib.d) */ module core.sys.windows.iprtrmib; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/iptypes.d b/libphobos/libdruntime/core/sys/windows/iptypes.d index f4f9fe80ad1..7cce34b0ebe 100644 --- a/libphobos/libdruntime/core/sys/windows/iptypes.d +++ b/libphobos/libdruntime/core/sys/windows/iptypes.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_iptypes.d) + * Source: $(DRUNTIMESRC core/sys/windows/_iptypes.d) */ module core.sys.windows.iptypes; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/isguids.d b/libphobos/libdruntime/core/sys/windows/isguids.d index 61e1d1ea143..b166c39cabc 100644 --- a/libphobos/libdruntime/core/sys/windows/isguids.d +++ b/libphobos/libdruntime/core/sys/windows/isguids.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_isguids.d) + * Source: $(DRUNTIMESRC core/sys/windows/_isguids.d) */ module core.sys.windows.isguids; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lm.d b/libphobos/libdruntime/core/sys/windows/lm.d index e12f629dcee..3d488564e57 100644 --- a/libphobos/libdruntime/core/sys/windows/lm.d +++ b/libphobos/libdruntime/core/sys/windows/lm.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lm.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lm.d) */ module core.sys.windows.lm; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmaccess.d b/libphobos/libdruntime/core/sys/windows/lmaccess.d index 3e1370d596b..b23e52ed6f9 100644 --- a/libphobos/libdruntime/core/sys/windows/lmaccess.d +++ b/libphobos/libdruntime/core/sys/windows/lmaccess.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmaccess.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmaccess.d) */ module core.sys.windows.lmaccess; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmalert.d b/libphobos/libdruntime/core/sys/windows/lmalert.d index 675dc896a4a..5ddd6d0988c 100644 --- a/libphobos/libdruntime/core/sys/windows/lmalert.d +++ b/libphobos/libdruntime/core/sys/windows/lmalert.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmalert.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmalert.d) */ module core.sys.windows.lmalert; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmapibuf.d b/libphobos/libdruntime/core/sys/windows/lmapibuf.d index f78271a2062..e8559543f3e 100644 --- a/libphobos/libdruntime/core/sys/windows/lmapibuf.d +++ b/libphobos/libdruntime/core/sys/windows/lmapibuf.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmapibuf.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmapibuf.d) */ module core.sys.windows.lmapibuf; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmat.d b/libphobos/libdruntime/core/sys/windows/lmat.d index 1862adf3642..3e1468a0e83 100644 --- a/libphobos/libdruntime/core/sys/windows/lmat.d +++ b/libphobos/libdruntime/core/sys/windows/lmat.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmat.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmat.d) */ module core.sys.windows.lmat; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmaudit.d b/libphobos/libdruntime/core/sys/windows/lmaudit.d index 524332af5e0..f4a7ca243e8 100644 --- a/libphobos/libdruntime/core/sys/windows/lmaudit.d +++ b/libphobos/libdruntime/core/sys/windows/lmaudit.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmaudit.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmaudit.d) */ // COMMENT: This file may be deprecated. module core.sys.windows.lmaudit; diff --git a/libphobos/libdruntime/core/sys/windows/lmbrowsr.d b/libphobos/libdruntime/core/sys/windows/lmbrowsr.d index 971d8cdd416..ea0e0f38ced 100644 --- a/libphobos/libdruntime/core/sys/windows/lmbrowsr.d +++ b/libphobos/libdruntime/core/sys/windows/lmbrowsr.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmbrowsr.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmbrowsr.d) */ module core.sys.windows.lmbrowsr; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmchdev.d b/libphobos/libdruntime/core/sys/windows/lmchdev.d index 39d9e788ef1..00aaafcf50d 100644 --- a/libphobos/libdruntime/core/sys/windows/lmchdev.d +++ b/libphobos/libdruntime/core/sys/windows/lmchdev.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmchdev.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmchdev.d) */ module core.sys.windows.lmchdev; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmconfig.d b/libphobos/libdruntime/core/sys/windows/lmconfig.d index 6bb2472cdde..57d3ed938fb 100644 --- a/libphobos/libdruntime/core/sys/windows/lmconfig.d +++ b/libphobos/libdruntime/core/sys/windows/lmconfig.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmconfig.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmconfig.d) */ module core.sys.windows.lmconfig; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmcons.d b/libphobos/libdruntime/core/sys/windows/lmcons.d index b115cce4da3..69a63df0f19 100644 --- a/libphobos/libdruntime/core/sys/windows/lmcons.d +++ b/libphobos/libdruntime/core/sys/windows/lmcons.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmcons.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmcons.d) */ module core.sys.windows.lmcons; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmerr.d b/libphobos/libdruntime/core/sys/windows/lmerr.d index 77e2378de7a..d50ec49dcb8 100644 --- a/libphobos/libdruntime/core/sys/windows/lmerr.d +++ b/libphobos/libdruntime/core/sys/windows/lmerr.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmerr.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmerr.d) */ module core.sys.windows.lmerr; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmerrlog.d b/libphobos/libdruntime/core/sys/windows/lmerrlog.d index 8e15b4df22c..a49b4988825 100644 --- a/libphobos/libdruntime/core/sys/windows/lmerrlog.d +++ b/libphobos/libdruntime/core/sys/windows/lmerrlog.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmerrlog.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmerrlog.d) */ module core.sys.windows.lmerrlog; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmmsg.d b/libphobos/libdruntime/core/sys/windows/lmmsg.d index 2a2d60ade06..c87f1e00ed3 100644 --- a/libphobos/libdruntime/core/sys/windows/lmmsg.d +++ b/libphobos/libdruntime/core/sys/windows/lmmsg.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmmsg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmmsg.d) */ module core.sys.windows.lmmsg; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmremutl.d b/libphobos/libdruntime/core/sys/windows/lmremutl.d index ce7d45aa349..d0f3b41cc38 100644 --- a/libphobos/libdruntime/core/sys/windows/lmremutl.d +++ b/libphobos/libdruntime/core/sys/windows/lmremutl.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmremutl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmremutl.d) */ module core.sys.windows.lmremutl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmrepl.d b/libphobos/libdruntime/core/sys/windows/lmrepl.d index 02345f81105..093588ca84e 100644 --- a/libphobos/libdruntime/core/sys/windows/lmrepl.d +++ b/libphobos/libdruntime/core/sys/windows/lmrepl.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmrepl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmrepl.d) */ module core.sys.windows.lmrepl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmserver.d b/libphobos/libdruntime/core/sys/windows/lmserver.d index 83a9a84adda..fad5bc509c4 100644 --- a/libphobos/libdruntime/core/sys/windows/lmserver.d +++ b/libphobos/libdruntime/core/sys/windows/lmserver.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmserver.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmserver.d) */ module core.sys.windows.lmserver; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmshare.d b/libphobos/libdruntime/core/sys/windows/lmshare.d index 215fb781e66..d81080edda1 100644 --- a/libphobos/libdruntime/core/sys/windows/lmshare.d +++ b/libphobos/libdruntime/core/sys/windows/lmshare.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmshare.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmshare.d) */ module core.sys.windows.lmshare; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmsname.d b/libphobos/libdruntime/core/sys/windows/lmsname.d index bdb1a6d3dcc..09b1b00cb6d 100644 --- a/libphobos/libdruntime/core/sys/windows/lmsname.d +++ b/libphobos/libdruntime/core/sys/windows/lmsname.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmsname.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmsname.d) */ module core.sys.windows.lmsname; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmstats.d b/libphobos/libdruntime/core/sys/windows/lmstats.d index 0c6e622aab4..4baa3903b15 100644 --- a/libphobos/libdruntime/core/sys/windows/lmstats.d +++ b/libphobos/libdruntime/core/sys/windows/lmstats.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmstats.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmstats.d) */ module core.sys.windows.lmstats; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmsvc.d b/libphobos/libdruntime/core/sys/windows/lmsvc.d index 1743458007d..c0df69902e0 100644 --- a/libphobos/libdruntime/core/sys/windows/lmsvc.d +++ b/libphobos/libdruntime/core/sys/windows/lmsvc.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmsvc.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmsvc.d) */ module core.sys.windows.lmsvc; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmuse.d b/libphobos/libdruntime/core/sys/windows/lmuse.d index a9dbcd40b63..03e153abea8 100644 --- a/libphobos/libdruntime/core/sys/windows/lmuse.d +++ b/libphobos/libdruntime/core/sys/windows/lmuse.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmuse.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmuse.d) */ module core.sys.windows.lmuse; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmuseflg.d b/libphobos/libdruntime/core/sys/windows/lmuseflg.d index 8157abd04ec..06276c3e444 100644 --- a/libphobos/libdruntime/core/sys/windows/lmuseflg.d +++ b/libphobos/libdruntime/core/sys/windows/lmuseflg.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.10 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmuseflg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmuseflg.d) */ module core.sys.windows.lmuseflg; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lmwksta.d b/libphobos/libdruntime/core/sys/windows/lmwksta.d index f4d85fef47b..cdd3a070365 100644 --- a/libphobos/libdruntime/core/sys/windows/lmwksta.d +++ b/libphobos/libdruntime/core/sys/windows/lmwksta.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lmwksta.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lmwksta.d) */ module core.sys.windows.lmwksta; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/lzexpand.d b/libphobos/libdruntime/core/sys/windows/lzexpand.d index 32ab1410b38..a01489bef57 100644 --- a/libphobos/libdruntime/core/sys/windows/lzexpand.d +++ b/libphobos/libdruntime/core/sys/windows/lzexpand.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_lzexpand.d) + * Source: $(DRUNTIMESRC core/sys/windows/_lzexpand.d) */ module core.sys.windows.lzexpand; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mapi.d b/libphobos/libdruntime/core/sys/windows/mapi.d index 194f63bcc74..06fd955611c 100644 --- a/libphobos/libdruntime/core/sys/windows/mapi.d +++ b/libphobos/libdruntime/core/sys/windows/mapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mapi.d) */ module core.sys.windows.mapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mciavi.d b/libphobos/libdruntime/core/sys/windows/mciavi.d index f7367e3caa3..4e3d14e0b6a 100644 --- a/libphobos/libdruntime/core/sys/windows/mciavi.d +++ b/libphobos/libdruntime/core/sys/windows/mciavi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mciavi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mciavi.d) */ module core.sys.windows.mciavi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mcx.d b/libphobos/libdruntime/core/sys/windows/mcx.d index 01b28ad3855..03224130137 100644 --- a/libphobos/libdruntime/core/sys/windows/mcx.d +++ b/libphobos/libdruntime/core/sys/windows/mcx.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mcx.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mcx.d) */ module core.sys.windows.mcx; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mgmtapi.d b/libphobos/libdruntime/core/sys/windows/mgmtapi.d index 673fba8c37e..d9fb6b72a9c 100644 --- a/libphobos/libdruntime/core/sys/windows/mgmtapi.d +++ b/libphobos/libdruntime/core/sys/windows/mgmtapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mgmtapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mgmtapi.d) */ module core.sys.windows.mgmtapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mmsystem.d b/libphobos/libdruntime/core/sys/windows/mmsystem.d index 9359afd0e03..5c3d9207118 100644 --- a/libphobos/libdruntime/core/sys/windows/mmsystem.d +++ b/libphobos/libdruntime/core/sys/windows/mmsystem.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mmsystem.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mmsystem.d) */ module core.sys.windows.mmsystem; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/msacm.d b/libphobos/libdruntime/core/sys/windows/msacm.d index b5d3052d7c6..47263282fb1 100644 --- a/libphobos/libdruntime/core/sys/windows/msacm.d +++ b/libphobos/libdruntime/core/sys/windows/msacm.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_msacm.d) + * Source: $(DRUNTIMESRC core/sys/windows/_msacm.d) */ module core.sys.windows.msacm; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mshtml.d b/libphobos/libdruntime/core/sys/windows/mshtml.d index 2c4410d6bf3..d5cf7cbc012 100644 --- a/libphobos/libdruntime/core/sys/windows/mshtml.d +++ b/libphobos/libdruntime/core/sys/windows/mshtml.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mshtml.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mshtml.d) */ module core.sys.windows.mshtml; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/mswsock.d b/libphobos/libdruntime/core/sys/windows/mswsock.d index cd6b63c197c..27c0cdb5bb2 100644 --- a/libphobos/libdruntime/core/sys/windows/mswsock.d +++ b/libphobos/libdruntime/core/sys/windows/mswsock.d @@ -5,7 +5,7 @@ * * Authors: Daniel Keep * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_mswsock.d) + * Source: $(DRUNTIMESRC core/sys/windows/_mswsock.d) */ module core.sys.windows.mswsock; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/nb30.d b/libphobos/libdruntime/core/sys/windows/nb30.d index 0d250cc40af..8f92eddba17 100644 --- a/libphobos/libdruntime/core/sys/windows/nb30.d +++ b/libphobos/libdruntime/core/sys/windows/nb30.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_nb30.d) + * Source: $(DRUNTIMESRC core/sys/windows/_nb30.d) */ module core.sys.windows.nb30; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/nddeapi.d b/libphobos/libdruntime/core/sys/windows/nddeapi.d index d4692c9db8a..dc3890c6118 100644 --- a/libphobos/libdruntime/core/sys/windows/nddeapi.d +++ b/libphobos/libdruntime/core/sys/windows/nddeapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_nddeapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_nddeapi.d) */ module core.sys.windows.nddeapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/nspapi.d b/libphobos/libdruntime/core/sys/windows/nspapi.d index a2e7fab02f6..79c9fceb45c 100644 --- a/libphobos/libdruntime/core/sys/windows/nspapi.d +++ b/libphobos/libdruntime/core/sys/windows/nspapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_nspapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_nspapi.d) */ module core.sys.windows.nspapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ntdef.d b/libphobos/libdruntime/core/sys/windows/ntdef.d index 83d668c0eeb..78e60e77749 100644 --- a/libphobos/libdruntime/core/sys/windows/ntdef.d +++ b/libphobos/libdruntime/core/sys/windows/ntdef.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ntdef.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ntdef.d) */ module core.sys.windows.ntdef; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ntdll.d b/libphobos/libdruntime/core/sys/windows/ntdll.d index e8aa3a7b4ca..4ac1bcccbb9 100644 --- a/libphobos/libdruntime/core/sys/windows/ntdll.d +++ b/libphobos/libdruntime/core/sys/windows/ntdll.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ntdll.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ntdll.d) */ module core.sys.windows.ntdll; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ntldap.d b/libphobos/libdruntime/core/sys/windows/ntldap.d index e7a55dd2f76..52caddec763 100644 --- a/libphobos/libdruntime/core/sys/windows/ntldap.d +++ b/libphobos/libdruntime/core/sys/windows/ntldap.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ntldap.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ntldap.d) */ module core.sys.windows.ntldap; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ntsecapi.d b/libphobos/libdruntime/core/sys/windows/ntsecapi.d index df9c10a3bb2..1118057b4c9 100644 --- a/libphobos/libdruntime/core/sys/windows/ntsecapi.d +++ b/libphobos/libdruntime/core/sys/windows/ntsecapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ntsecapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ntsecapi.d) */ module core.sys.windows.ntsecapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ntsecpkg.d b/libphobos/libdruntime/core/sys/windows/ntsecpkg.d index 8625b7ae039..d4c93d7b573 100644 --- a/libphobos/libdruntime/core/sys/windows/ntsecpkg.d +++ b/libphobos/libdruntime/core/sys/windows/ntsecpkg.d @@ -5,7 +5,7 @@ * * Authors: Ellery Newcomer * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ntsecpkg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ntsecpkg.d) */ module core.sys.windows.ntsecpkg; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/oaidl.d b/libphobos/libdruntime/core/sys/windows/oaidl.d index 51d6be904df..6c9368241f1 100644 --- a/libphobos/libdruntime/core/sys/windows/oaidl.d +++ b/libphobos/libdruntime/core/sys/windows/oaidl.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_oaidl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_oaidl.d) */ module core.sys.windows.oaidl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/objbase.d b/libphobos/libdruntime/core/sys/windows/objbase.d index 961ebcc833a..3695ea60021 100644 --- a/libphobos/libdruntime/core/sys/windows/objbase.d +++ b/libphobos/libdruntime/core/sys/windows/objbase.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_objbase.d) + * Source: $(DRUNTIMESRC core/sys/windows/_objbase.d) */ module core.sys.windows.objbase; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/objfwd.d b/libphobos/libdruntime/core/sys/windows/objfwd.d index 76d4f4144c5..89d5cad90db 100644 --- a/libphobos/libdruntime/core/sys/windows/objfwd.d +++ b/libphobos/libdruntime/core/sys/windows/objfwd.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_objfwd.d) + * Source: $(DRUNTIMESRC core/sys/windows/_objfwd.d) */ module core.sys.windows.objfwd; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/objidl.d b/libphobos/libdruntime/core/sys/windows/objidl.d index 5368c296c37..528c58b2789 100644 --- a/libphobos/libdruntime/core/sys/windows/objidl.d +++ b/libphobos/libdruntime/core/sys/windows/objidl.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_objidl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_objidl.d) */ // TODO (Don): // # why is "alias IPSFactoryBuffer* LPPSFACTORYBUFFER;" in this file, diff --git a/libphobos/libdruntime/core/sys/windows/objsafe.d b/libphobos/libdruntime/core/sys/windows/objsafe.d index 0bfd19a0fd5..449a4c3166d 100644 --- a/libphobos/libdruntime/core/sys/windows/objsafe.d +++ b/libphobos/libdruntime/core/sys/windows/objsafe.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_objsafe.d) + * Source: $(DRUNTIMESRC core/sys/windows/_objsafe.d) */ module core.sys.windows.objsafe; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ocidl.d b/libphobos/libdruntime/core/sys/windows/ocidl.d index 4b090b0a005..af42beaf159 100644 --- a/libphobos/libdruntime/core/sys/windows/ocidl.d +++ b/libphobos/libdruntime/core/sys/windows/ocidl.d @@ -6,7 +6,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ocidl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ocidl.d) */ module core.sys.windows.ocidl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/odbcinst.d b/libphobos/libdruntime/core/sys/windows/odbcinst.d index ee22bc6a86b..b0ca42adf12 100644 --- a/libphobos/libdruntime/core/sys/windows/odbcinst.d +++ b/libphobos/libdruntime/core/sys/windows/odbcinst.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_odbcinst.d) + * Source: $(DRUNTIMESRC core/sys/windows/_odbcinst.d) */ module core.sys.windows.odbcinst; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ole.d b/libphobos/libdruntime/core/sys/windows/ole.d index 1a49ea51cd4..21218f11605 100644 --- a/libphobos/libdruntime/core/sys/windows/ole.d +++ b/libphobos/libdruntime/core/sys/windows/ole.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ole.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ole.d) */ module core.sys.windows.ole; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ole2.d b/libphobos/libdruntime/core/sys/windows/ole2.d index 575a8eb8d61..0945fcaca26 100644 --- a/libphobos/libdruntime/core/sys/windows/ole2.d +++ b/libphobos/libdruntime/core/sys/windows/ole2.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ole2.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ole2.d) */ module core.sys.windows.ole2; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ole2ver.d b/libphobos/libdruntime/core/sys/windows/ole2ver.d index 9e3badcaed9..6a549e6df42 100644 --- a/libphobos/libdruntime/core/sys/windows/ole2ver.d +++ b/libphobos/libdruntime/core/sys/windows/ole2ver.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.10 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ole2ver.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ole2ver.d) */ module core.sys.windows.ole2ver; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/oleacc.d b/libphobos/libdruntime/core/sys/windows/oleacc.d index 77ced02dc0b..77137c6b617 100644 --- a/libphobos/libdruntime/core/sys/windows/oleacc.d +++ b/libphobos/libdruntime/core/sys/windows/oleacc.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_oleacc.d) + * Source: $(DRUNTIMESRC core/sys/windows/_oleacc.d) */ module core.sys.windows.oleacc; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/oleauto.d b/libphobos/libdruntime/core/sys/windows/oleauto.d index 20f34aff5a7..f8d76e15bef 100644 --- a/libphobos/libdruntime/core/sys/windows/oleauto.d +++ b/libphobos/libdruntime/core/sys/windows/oleauto.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_oleauto.d) + * Source: $(DRUNTIMESRC core/sys/windows/_oleauto.d) */ module core.sys.windows.oleauto; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/olectl.d b/libphobos/libdruntime/core/sys/windows/olectl.d index e0bc679f929..f671ce44804 100644 --- a/libphobos/libdruntime/core/sys/windows/olectl.d +++ b/libphobos/libdruntime/core/sys/windows/olectl.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_olectl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_olectl.d) */ module core.sys.windows.olectl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/olectlid.d b/libphobos/libdruntime/core/sys/windows/olectlid.d index fd3ea899a2a..8bbe657134b 100644 --- a/libphobos/libdruntime/core/sys/windows/olectlid.d +++ b/libphobos/libdruntime/core/sys/windows/olectlid.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_olectlid.d) + * Source: $(DRUNTIMESRC core/sys/windows/_olectlid.d) */ module core.sys.windows.olectlid; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/oledlg.d b/libphobos/libdruntime/core/sys/windows/oledlg.d index e44c0290162..f1a05104d43 100644 --- a/libphobos/libdruntime/core/sys/windows/oledlg.d +++ b/libphobos/libdruntime/core/sys/windows/oledlg.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_oledlg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_oledlg.d) */ module core.sys.windows.oledlg; @system: diff --git a/libphobos/libdruntime/core/sys/windows/oleidl.d b/libphobos/libdruntime/core/sys/windows/oleidl.d index dc0cae85de3..4ef564d20a5 100644 --- a/libphobos/libdruntime/core/sys/windows/oleidl.d +++ b/libphobos/libdruntime/core/sys/windows/oleidl.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_oleidl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_oleidl.d) */ module core.sys.windows.oleidl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/pbt.d b/libphobos/libdruntime/core/sys/windows/pbt.d index aec938e9b82..3b65ba58649 100644 --- a/libphobos/libdruntime/core/sys/windows/pbt.d +++ b/libphobos/libdruntime/core/sys/windows/pbt.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_pbt.d) + * Source: $(DRUNTIMESRC core/sys/windows/_pbt.d) */ module core.sys.windows.pbt; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/powrprof.d b/libphobos/libdruntime/core/sys/windows/powrprof.d index 75ec73e8efe..275dbeabd07 100644 --- a/libphobos/libdruntime/core/sys/windows/powrprof.d +++ b/libphobos/libdruntime/core/sys/windows/powrprof.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_powrprof.d) + * Source: $(DRUNTIMESRC core/sys/windows/_powrprof.d) */ module core.sys.windows.powrprof; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/prsht.d b/libphobos/libdruntime/core/sys/windows/prsht.d index efea4f254c4..ba04b5743c4 100644 --- a/libphobos/libdruntime/core/sys/windows/prsht.d +++ b/libphobos/libdruntime/core/sys/windows/prsht.d @@ -5,7 +5,7 @@ * * Authors: Vladimir Vlasov * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_prsht.d) + * Source: $(DRUNTIMESRC core/sys/windows/_prsht.d) */ module core.sys.windows.prsht; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/psapi.d b/libphobos/libdruntime/core/sys/windows/psapi.d index 7e62d9fc1bd..585f9088813 100644 --- a/libphobos/libdruntime/core/sys/windows/psapi.d +++ b/libphobos/libdruntime/core/sys/windows/psapi.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_psapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_psapi.d) */ /* Comment from MinGW * Process status API (PSAPI) diff --git a/libphobos/libdruntime/core/sys/windows/rapi.d b/libphobos/libdruntime/core/sys/windows/rapi.d index 6c48f6bff26..086b7a6023b 100644 --- a/libphobos/libdruntime/core/sys/windows/rapi.d +++ b/libphobos/libdruntime/core/sys/windows/rapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rapi.d) */ module core.sys.windows.rapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/ras.d b/libphobos/libdruntime/core/sys/windows/ras.d index 1004c6b63f8..1f665461b9c 100644 --- a/libphobos/libdruntime/core/sys/windows/ras.d +++ b/libphobos/libdruntime/core/sys/windows/ras.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_ras.d) + * Source: $(DRUNTIMESRC core/sys/windows/_ras.d) */ module core.sys.windows.ras; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rasdlg.d b/libphobos/libdruntime/core/sys/windows/rasdlg.d index 8304a014129..1add3ae1479 100644 --- a/libphobos/libdruntime/core/sys/windows/rasdlg.d +++ b/libphobos/libdruntime/core/sys/windows/rasdlg.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rasdlg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rasdlg.d) */ module core.sys.windows.rasdlg; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/raserror.d b/libphobos/libdruntime/core/sys/windows/raserror.d index 43bebacd34e..c21409b379b 100644 --- a/libphobos/libdruntime/core/sys/windows/raserror.d +++ b/libphobos/libdruntime/core/sys/windows/raserror.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_raserror.d) + * Source: $(DRUNTIMESRC core/sys/windows/_raserror.d) */ module core.sys.windows.raserror; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rassapi.d b/libphobos/libdruntime/core/sys/windows/rassapi.d index 0eaa5b28f5b..aed14f162f8 100644 --- a/libphobos/libdruntime/core/sys/windows/rassapi.d +++ b/libphobos/libdruntime/core/sys/windows/rassapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rassapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rassapi.d) */ module core.sys.windows.rassapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/reason.d b/libphobos/libdruntime/core/sys/windows/reason.d index b0c49693e18..4274efa33ed 100644 --- a/libphobos/libdruntime/core/sys/windows/reason.d +++ b/libphobos/libdruntime/core/sys/windows/reason.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_reason.d) + * Source: $(DRUNTIMESRC core/sys/windows/_reason.d) */ module core.sys.windows.reason; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/regstr.d b/libphobos/libdruntime/core/sys/windows/regstr.d index 1fa1c7e0d7f..71a86ef8700 100644 --- a/libphobos/libdruntime/core/sys/windows/regstr.d +++ b/libphobos/libdruntime/core/sys/windows/regstr.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_regstr.d) + * Source: $(DRUNTIMESRC core/sys/windows/_regstr.d) */ module core.sys.windows.regstr; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/richedit.d b/libphobos/libdruntime/core/sys/windows/richedit.d index 1abc8f3fd2a..676076480c4 100644 --- a/libphobos/libdruntime/core/sys/windows/richedit.d +++ b/libphobos/libdruntime/core/sys/windows/richedit.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_richedit.d) + * Source: $(DRUNTIMESRC core/sys/windows/_richedit.d) */ module core.sys.windows.richedit; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/richole.d b/libphobos/libdruntime/core/sys/windows/richole.d index a4e64e83b75..288ef220a85 100644 --- a/libphobos/libdruntime/core/sys/windows/richole.d +++ b/libphobos/libdruntime/core/sys/windows/richole.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_richole.d) + * Source: $(DRUNTIMESRC core/sys/windows/_richole.d) */ module core.sys.windows.richole; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpc.d b/libphobos/libdruntime/core/sys/windows/rpc.d index 59221234392..a9640ada476 100644 --- a/libphobos/libdruntime/core/sys/windows/rpc.d +++ b/libphobos/libdruntime/core/sys/windows/rpc.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpc.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpc.d) */ module core.sys.windows.rpc; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcdce.d b/libphobos/libdruntime/core/sys/windows/rpcdce.d index cdffbcf0e5c..1eccb0dcf23 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcdce.d +++ b/libphobos/libdruntime/core/sys/windows/rpcdce.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcdce.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcdce.d) */ module core.sys.windows.rpcdce; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcdce2.d b/libphobos/libdruntime/core/sys/windows/rpcdce2.d index 10ec910faae..c8223f6cd5b 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcdce2.d +++ b/libphobos/libdruntime/core/sys/windows/rpcdce2.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcdce2.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcdce2.d) */ module core.sys.windows.rpcdce2; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcdcep.d b/libphobos/libdruntime/core/sys/windows/rpcdcep.d index fe22bf8c724..1abbb78852d 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcdcep.d +++ b/libphobos/libdruntime/core/sys/windows/rpcdcep.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcdcep.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcdcep.d) */ module core.sys.windows.rpcdcep; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcndr.d b/libphobos/libdruntime/core/sys/windows/rpcndr.d index 6720b94aa9d..6e9722c984f 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcndr.d +++ b/libphobos/libdruntime/core/sys/windows/rpcndr.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcndr.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcndr.d) */ module core.sys.windows.rpcndr; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcnsi.d b/libphobos/libdruntime/core/sys/windows/rpcnsi.d index 2ecae63aefe..608b92cead2 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcnsi.d +++ b/libphobos/libdruntime/core/sys/windows/rpcnsi.d @@ -6,7 +6,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcnsi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcnsi.d) */ module core.sys.windows.rpcnsi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcnsip.d b/libphobos/libdruntime/core/sys/windows/rpcnsip.d index 1c0f050df75..219d7b007d8 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcnsip.d +++ b/libphobos/libdruntime/core/sys/windows/rpcnsip.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcnsip.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcnsip.d) */ module core.sys.windows.rpcnsip; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/rpcnterr.d b/libphobos/libdruntime/core/sys/windows/rpcnterr.d index dcd63ab454f..426077aabe5 100644 --- a/libphobos/libdruntime/core/sys/windows/rpcnterr.d +++ b/libphobos/libdruntime/core/sys/windows/rpcnterr.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_rpcnterr.d) + * Source: $(DRUNTIMESRC core/sys/windows/_rpcnterr.d) */ module core.sys.windows.rpcnterr; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/schannel.d b/libphobos/libdruntime/core/sys/windows/schannel.d index 1d2fbda7ddb..98c5cf80023 100644 --- a/libphobos/libdruntime/core/sys/windows/schannel.d +++ b/libphobos/libdruntime/core/sys/windows/schannel.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_schannel.d) + * Source: $(DRUNTIMESRC core/sys/windows/_schannel.d) */ module core.sys.windows.schannel; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/sdkddkver.d b/libphobos/libdruntime/core/sys/windows/sdkddkver.d index 3af3c86d2c0..4b5bad52822 100644 --- a/libphobos/libdruntime/core/sys/windows/sdkddkver.d +++ b/libphobos/libdruntime/core/sys/windows/sdkddkver.d @@ -4,7 +4,7 @@ * Translated from Windows SDK API * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/sdkddkver.d) + * Source: $(DRUNTIMESRC core/sys/windows/sdkddkver.d) */ module core.sys.windows.sdkddkver; diff --git a/libphobos/libdruntime/core/sys/windows/secext.d b/libphobos/libdruntime/core/sys/windows/secext.d index dd4ec8589a6..6b92fcddf75 100644 --- a/libphobos/libdruntime/core/sys/windows/secext.d +++ b/libphobos/libdruntime/core/sys/windows/secext.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_secext.d) + * Source: $(DRUNTIMESRC core/sys/windows/_secext.d) */ // Don't include this file directly, use core.sys.windows.security instead. module core.sys.windows.secext; diff --git a/libphobos/libdruntime/core/sys/windows/security.d b/libphobos/libdruntime/core/sys/windows/security.d index 2dc7c194975..b81abb3fe2d 100644 --- a/libphobos/libdruntime/core/sys/windows/security.d +++ b/libphobos/libdruntime/core/sys/windows/security.d @@ -5,7 +5,7 @@ * * Authors: Ellery Newcomer, John Colvin * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_security.d) + * Source: $(DRUNTIMESRC core/sys/windows/_security.d) */ module core.sys.windows.security; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/servprov.d b/libphobos/libdruntime/core/sys/windows/servprov.d index 1c061dd8746..89ab47c97cb 100644 --- a/libphobos/libdruntime/core/sys/windows/servprov.d +++ b/libphobos/libdruntime/core/sys/windows/servprov.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.10 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_servprov.d) + * Source: $(DRUNTIMESRC core/sys/windows/_servprov.d) */ module core.sys.windows.servprov; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/setupapi.d b/libphobos/libdruntime/core/sys/windows/setupapi.d index 432ff354642..80e8dbaf961 100644 --- a/libphobos/libdruntime/core/sys/windows/setupapi.d +++ b/libphobos/libdruntime/core/sys/windows/setupapi.d @@ -5,7 +5,7 @@ * * Authors: Vladimir Vlasov * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_setupapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_setupapi.d) */ module core.sys.windows.setupapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/shellapi.d b/libphobos/libdruntime/core/sys/windows/shellapi.d index 2b7f1456d22..f4019979b3c 100644 --- a/libphobos/libdruntime/core/sys/windows/shellapi.d +++ b/libphobos/libdruntime/core/sys/windows/shellapi.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_shellapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_shellapi.d) */ module core.sys.windows.shellapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/shldisp.d b/libphobos/libdruntime/core/sys/windows/shldisp.d index 70cf88428c7..ecb0edee876 100644 --- a/libphobos/libdruntime/core/sys/windows/shldisp.d +++ b/libphobos/libdruntime/core/sys/windows/shldisp.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_shldisp.d) + * Source: $(DRUNTIMESRC core/sys/windows/_shldisp.d) */ module core.sys.windows.shldisp; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/shlguid.d b/libphobos/libdruntime/core/sys/windows/shlguid.d index 15e6138b2f4..1c0c98fc070 100644 --- a/libphobos/libdruntime/core/sys/windows/shlguid.d +++ b/libphobos/libdruntime/core/sys/windows/shlguid.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_shlguid.d) + * Source: $(DRUNTIMESRC core/sys/windows/_shlguid.d) */ module core.sys.windows.shlguid; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/shlobj.d b/libphobos/libdruntime/core/sys/windows/shlobj.d index 5f921b3ca1a..75ac6226306 100644 --- a/libphobos/libdruntime/core/sys/windows/shlobj.d +++ b/libphobos/libdruntime/core/sys/windows/shlobj.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 4.0 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_shlobj.d) + * Source: $(DRUNTIMESRC core/sys/windows/_shlobj.d) */ module core.sys.windows.shlobj; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/shlwapi.d b/libphobos/libdruntime/core/sys/windows/shlwapi.d index 8cb21ef4a4a..d1a61a3844f 100644 --- a/libphobos/libdruntime/core/sys/windows/shlwapi.d +++ b/libphobos/libdruntime/core/sys/windows/shlwapi.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_shlwapi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_shlwapi.d) */ module core.sys.windows.shlwapi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/snmp.d b/libphobos/libdruntime/core/sys/windows/snmp.d index ea64e0d86b5..bf56b28c02b 100644 --- a/libphobos/libdruntime/core/sys/windows/snmp.d +++ b/libphobos/libdruntime/core/sys/windows/snmp.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_snmp.d) + * Source: $(DRUNTIMESRC core/sys/windows/_snmp.d) */ module core.sys.windows.snmp; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/sql.d b/libphobos/libdruntime/core/sys/windows/sql.d index 177a48dc0c3..7c8758efccb 100644 --- a/libphobos/libdruntime/core/sys/windows/sql.d +++ b/libphobos/libdruntime/core/sys/windows/sql.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_sql.d) + * Source: $(DRUNTIMESRC core/sys/windows/_sql.d) */ module core.sys.windows.sql; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/sqlext.d b/libphobos/libdruntime/core/sys/windows/sqlext.d index 1f891056a82..2ddff201279 100644 --- a/libphobos/libdruntime/core/sys/windows/sqlext.d +++ b/libphobos/libdruntime/core/sys/windows/sqlext.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_sqlext.d) + * Source: $(DRUNTIMESRC core/sys/windows/_sqlext.d) */ module core.sys.windows.sqlext; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/sqltypes.d b/libphobos/libdruntime/core/sys/windows/sqltypes.d index aaffeb22585..fd77b819a5e 100644 --- a/libphobos/libdruntime/core/sys/windows/sqltypes.d +++ b/libphobos/libdruntime/core/sys/windows/sqltypes.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_sqltypes.d) + * Source: $(DRUNTIMESRC core/sys/windows/_sqltypes.d) */ module core.sys.windows.sqltypes; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/sqlucode.d b/libphobos/libdruntime/core/sys/windows/sqlucode.d index 21f47f6f54e..85f0d0603c8 100644 --- a/libphobos/libdruntime/core/sys/windows/sqlucode.d +++ b/libphobos/libdruntime/core/sys/windows/sqlucode.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_sqlucode.d) + * Source: $(DRUNTIMESRC core/sys/windows/_sqlucode.d) */ module core.sys.windows.sqlucode; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/sspi.d b/libphobos/libdruntime/core/sys/windows/sspi.d index cf41298a631..07a259622d2 100644 --- a/libphobos/libdruntime/core/sys/windows/sspi.d +++ b/libphobos/libdruntime/core/sys/windows/sspi.d @@ -5,7 +5,7 @@ * * Authors: Ellery Newcomer * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_sspi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_sspi.d) */ module core.sys.windows.sspi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/stdc/malloc.d b/libphobos/libdruntime/core/sys/windows/stdc/malloc.d index f52ba37f27e..278c9fe6fc8 100644 --- a/libphobos/libdruntime/core/sys/windows/stdc/malloc.d +++ b/libphobos/libdruntime/core/sys/windows/stdc/malloc.d @@ -5,7 +5,7 @@ * * Authors: Iain Buclaw * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/stdc/_malloc.d) + * Source: $(DRUNTIMESRC core/sys/windows/stdc/_malloc.d) */ module core.sys.windows.stdc.malloc; version (CRuntime_Microsoft): diff --git a/libphobos/libdruntime/core/sys/windows/subauth.d b/libphobos/libdruntime/core/sys/windows/subauth.d index 42d2fa73cf8..e0d67ffdcee 100644 --- a/libphobos/libdruntime/core/sys/windows/subauth.d +++ b/libphobos/libdruntime/core/sys/windows/subauth.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_subauth.d) + * Source: $(DRUNTIMESRC core/sys/windows/_subauth.d) */ module core.sys.windows.subauth; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/tlhelp32.d b/libphobos/libdruntime/core/sys/windows/tlhelp32.d index 308c5a46cc1..34ed1013ea9 100644 --- a/libphobos/libdruntime/core/sys/windows/tlhelp32.d +++ b/libphobos/libdruntime/core/sys/windows/tlhelp32.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_tlhelp32.d) + * Source: $(DRUNTIMESRC core/sys/windows/_tlhelp32.d) */ module core.sys.windows.tlhelp32; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/tmschema.d b/libphobos/libdruntime/core/sys/windows/tmschema.d index ea7863a97b6..b82dc5c84f3 100644 --- a/libphobos/libdruntime/core/sys/windows/tmschema.d +++ b/libphobos/libdruntime/core/sys/windows/tmschema.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_tmschema.d) + * Source: $(DRUNTIMESRC core/sys/windows/_tmschema.d) */ module core.sys.windows.tmschema; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/unknwn.d b/libphobos/libdruntime/core/sys/windows/unknwn.d index 1c3e4539f01..49d5abf01b6 100644 --- a/libphobos/libdruntime/core/sys/windows/unknwn.d +++ b/libphobos/libdruntime/core/sys/windows/unknwn.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_unknwn.d) + * Source: $(DRUNTIMESRC core/sys/windows/_unknwn.d) */ module core.sys.windows.unknwn; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/vfw.d b/libphobos/libdruntime/core/sys/windows/vfw.d index 3ffff201347..c67753a42e6 100644 --- a/libphobos/libdruntime/core/sys/windows/vfw.d +++ b/libphobos/libdruntime/core/sys/windows/vfw.d @@ -4,7 +4,7 @@ * written in the D programming language * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_vfw.d) + * Source: $(DRUNTIMESRC core/sys/windows/_vfw.d) */ module core.sys.windows.vfw; diff --git a/libphobos/libdruntime/core/sys/windows/w32api.d b/libphobos/libdruntime/core/sys/windows/w32api.d index a392d591a4c..2752da1adc8 100644 --- a/libphobos/libdruntime/core/sys/windows/w32api.d +++ b/libphobos/libdruntime/core/sys/windows/w32api.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_w32api.d) + * Source: $(DRUNTIMESRC core/sys/windows/_w32api.d) */ module core.sys.windows.w32api; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winbase.d b/libphobos/libdruntime/core/sys/windows/winbase.d index a9844de450b..1806796b34d 100644 --- a/libphobos/libdruntime/core/sys/windows/winbase.d +++ b/libphobos/libdruntime/core/sys/windows/winbase.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.10 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winbase.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winbase.d) */ module core.sys.windows.winbase; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winber.d b/libphobos/libdruntime/core/sys/windows/winber.d index 27189038826..d6a79cd3542 100644 --- a/libphobos/libdruntime/core/sys/windows/winber.d +++ b/libphobos/libdruntime/core/sys/windows/winber.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winber.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winber.d) */ module core.sys.windows.winber; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/wincon.d b/libphobos/libdruntime/core/sys/windows/wincon.d index 67bd17e7d09..a404c5c2d69 100644 --- a/libphobos/libdruntime/core/sys/windows/wincon.d +++ b/libphobos/libdruntime/core/sys/windows/wincon.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_wincon.d) + * Source: $(DRUNTIMESRC core/sys/windows/_wincon.d) */ module core.sys.windows.wincon; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/wincrypt.d b/libphobos/libdruntime/core/sys/windows/wincrypt.d index 94951057e68..d6c617d2f14 100644 --- a/libphobos/libdruntime/core/sys/windows/wincrypt.d +++ b/libphobos/libdruntime/core/sys/windows/wincrypt.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_wincrypt.d) + * Source: $(DRUNTIMESRC core/sys/windows/_wincrypt.d) */ module core.sys.windows.wincrypt; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/windef.d b/libphobos/libdruntime/core/sys/windows/windef.d index f79b593c518..31af66a2501 100644 --- a/libphobos/libdruntime/core/sys/windows/windef.d +++ b/libphobos/libdruntime/core/sys/windows/windef.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_windef.d) + * Source: $(DRUNTIMESRC core/sys/windows/_windef.d) */ module core.sys.windows.windef; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/windows.d b/libphobos/libdruntime/core/sys/windows/windows.d index 8b8c8ab3554..4a1b02f9a86 100644 --- a/libphobos/libdruntime/core/sys/windows/windows.d +++ b/libphobos/libdruntime/core/sys/windows/windows.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 4.0 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_windows.d) + * Source: $(DRUNTIMESRC core/sys/windows/_windows.d) */ module core.sys.windows.windows; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winerror.d b/libphobos/libdruntime/core/sys/windows/winerror.d index ab987a3e81a..a26b05c1d2f 100644 --- a/libphobos/libdruntime/core/sys/windows/winerror.d +++ b/libphobos/libdruntime/core/sys/windows/winerror.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winerror.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winerror.d) */ module core.sys.windows.winerror; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/wingdi.d b/libphobos/libdruntime/core/sys/windows/wingdi.d index 4fc125c6225..279f6be627b 100644 --- a/libphobos/libdruntime/core/sys/windows/wingdi.d +++ b/libphobos/libdruntime/core/sys/windows/wingdi.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_wingdi.d) + * Source: $(DRUNTIMESRC core/sys/windows/_wingdi.d) */ module core.sys.windows.wingdi; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winhttp.d b/libphobos/libdruntime/core/sys/windows/winhttp.d index e919635e4ed..f66580508aa 100644 --- a/libphobos/libdruntime/core/sys/windows/winhttp.d +++ b/libphobos/libdruntime/core/sys/windows/winhttp.d @@ -4,7 +4,7 @@ * Translated from Windows SDK Headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winhttp.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winhttp.d) */ module core.sys.windows.winhttp; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/wininet.d b/libphobos/libdruntime/core/sys/windows/wininet.d index 64b95c4c00e..f4aa997b162 100644 --- a/libphobos/libdruntime/core/sys/windows/wininet.d +++ b/libphobos/libdruntime/core/sys/windows/wininet.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_wininet.d) + * Source: $(DRUNTIMESRC core/sys/windows/_wininet.d) */ module core.sys.windows.wininet; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winioctl.d b/libphobos/libdruntime/core/sys/windows/winioctl.d index 84d498e772f..b91ddda1d93 100644 --- a/libphobos/libdruntime/core/sys/windows/winioctl.d +++ b/libphobos/libdruntime/core/sys/windows/winioctl.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winioctl.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winioctl.d) */ module core.sys.windows.winioctl; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winldap.d b/libphobos/libdruntime/core/sys/windows/winldap.d index 78578dd51dd..0ab11d68d5c 100644 --- a/libphobos/libdruntime/core/sys/windows/winldap.d +++ b/libphobos/libdruntime/core/sys/windows/winldap.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winldap.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winldap.d) */ module core.sys.windows.winldap; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winnetwk.d b/libphobos/libdruntime/core/sys/windows/winnetwk.d index 7601279005f..e0c7551096c 100644 --- a/libphobos/libdruntime/core/sys/windows/winnetwk.d +++ b/libphobos/libdruntime/core/sys/windows/winnetwk.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winnetwk.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winnetwk.d) */ module core.sys.windows.winnetwk; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winnls.d b/libphobos/libdruntime/core/sys/windows/winnls.d index 6483f4bcc02..b487a17894f 100644 --- a/libphobos/libdruntime/core/sys/windows/winnls.d +++ b/libphobos/libdruntime/core/sys/windows/winnls.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winnls.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winnls.d) */ module core.sys.windows.winnls; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winnt.d b/libphobos/libdruntime/core/sys/windows/winnt.d index 2d9a28121e9..bf30072fa8a 100644 --- a/libphobos/libdruntime/core/sys/windows/winnt.d +++ b/libphobos/libdruntime/core/sys/windows/winnt.d @@ -4,7 +4,7 @@ * Translated from MinGW API for MS-Windows 3.12 * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winnt.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winnt.d) */ module core.sys.windows.winnt; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winperf.d b/libphobos/libdruntime/core/sys/windows/winperf.d index 367c2b09561..cd31990baef 100644 --- a/libphobos/libdruntime/core/sys/windows/winperf.d +++ b/libphobos/libdruntime/core/sys/windows/winperf.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winperf.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winperf.d) */ module core.sys.windows.winperf; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winreg.d b/libphobos/libdruntime/core/sys/windows/winreg.d index 078bdf7037e..c3e58545b3d 100644 --- a/libphobos/libdruntime/core/sys/windows/winreg.d +++ b/libphobos/libdruntime/core/sys/windows/winreg.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winreg.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winreg.d) */ module core.sys.windows.winreg; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winspool.d b/libphobos/libdruntime/core/sys/windows/winspool.d index db5b23f6eb2..2ff621adf1a 100644 --- a/libphobos/libdruntime/core/sys/windows/winspool.d +++ b/libphobos/libdruntime/core/sys/windows/winspool.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winspool.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winspool.d) */ module core.sys.windows.winspool; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winsvc.d b/libphobos/libdruntime/core/sys/windows/winsvc.d index 44c4563aab6..14ab6e42159 100644 --- a/libphobos/libdruntime/core/sys/windows/winsvc.d +++ b/libphobos/libdruntime/core/sys/windows/winsvc.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winsvc.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winsvc.d) */ module core.sys.windows.winsvc; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winuser.d b/libphobos/libdruntime/core/sys/windows/winuser.d index 07e5efaa33d..078e0610b5e 100644 --- a/libphobos/libdruntime/core/sys/windows/winuser.d +++ b/libphobos/libdruntime/core/sys/windows/winuser.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winuser.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winuser.d) */ module core.sys.windows.winuser; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/winver.d b/libphobos/libdruntime/core/sys/windows/winver.d index afe53d8f7cc..5099c3f51f2 100644 --- a/libphobos/libdruntime/core/sys/windows/winver.d +++ b/libphobos/libdruntime/core/sys/windows/winver.d @@ -5,7 +5,7 @@ * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_winver.d) + * Source: $(DRUNTIMESRC core/sys/windows/_winver.d) */ module core.sys.windows.winver; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/wtsapi32.d b/libphobos/libdruntime/core/sys/windows/wtsapi32.d index 643c049c25c..13576bdd112 100644 --- a/libphobos/libdruntime/core/sys/windows/wtsapi32.d +++ b/libphobos/libdruntime/core/sys/windows/wtsapi32.d @@ -4,7 +4,7 @@ * Translated from MinGW-w64 API * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_wtsapi32.d) + * Source: $(DRUNTIMESRC core/sys/windows/_wtsapi32.d) */ module core.sys.windows.wtsapi32; version (Windows): diff --git a/libphobos/libdruntime/core/sys/windows/wtypes.d b/libphobos/libdruntime/core/sys/windows/wtypes.d index 8af42cf7179..c27dd3a3f3a 100644 --- a/libphobos/libdruntime/core/sys/windows/wtypes.d +++ b/libphobos/libdruntime/core/sys/windows/wtypes.d @@ -4,7 +4,7 @@ * Translated from MinGW Windows headers * * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) - * Source: $(DRUNTIMESRC src/core/sys/windows/_wtypes.d) + * Source: $(DRUNTIMESRC core/sys/windows/_wtypes.d) */ module core.sys.windows.wtypes; version (Windows): diff --git a/libphobos/libdruntime/core/thread/fiber.d b/libphobos/libdruntime/core/thread/fiber.d index 56f6d67d581..bd53eed2d10 100644 --- a/libphobos/libdruntime/core/thread/fiber.d +++ b/libphobos/libdruntime/core/thread/fiber.d @@ -1043,10 +1043,14 @@ private: // Allocate more for the memory guard sz += guardPageSize; + int mmap_flags = MAP_PRIVATE | MAP_ANON; + version (OpenBSD) + mmap_flags |= MAP_STACK; + m_pmem = mmap( null, sz, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, + mmap_flags, -1, 0 ); if ( m_pmem == MAP_FAILED ) @@ -1894,7 +1898,7 @@ unittest try { - (new Fiber({ + (new Fiber(function() { throw new Exception( MSG ); })).call(); assert( false, "Expected rethrown exception." ); diff --git a/libphobos/libdruntime/core/thread/osthread.d b/libphobos/libdruntime/core/thread/osthread.d index c9bc1305ad0..b7dde9387af 100644 --- a/libphobos/libdruntime/core/thread/osthread.d +++ b/libphobos/libdruntime/core/thread/osthread.d @@ -1109,6 +1109,7 @@ unittest try { new Thread( + function() { throw new Exception( MSG ); }).start().join(); diff --git a/libphobos/libdruntime/core/time.d b/libphobos/libdruntime/core/time.d index 26e515bc8b4..0ddf62f478c 100644 --- a/libphobos/libdruntime/core/time.d +++ b/libphobos/libdruntime/core/time.d @@ -1196,8 +1196,8 @@ public: +/ template split(units...) if (allAreAcceptedUnits!("weeks", "days", "hours", "minutes", "seconds", - "msecs", "usecs", "hnsecs", "nsecs")(units) && - unitsAreInDescendingOrder(units)) + "msecs", "usecs", "hnsecs", "nsecs")([units]) && + unitsAreInDescendingOrder([units])) { /++ Ditto +/ void split(Args...)(out Args args) const nothrow @nogc @@ -3709,7 +3709,7 @@ unittest /+ Whether all of the given strings are among the accepted strings. +/ -bool allAreAcceptedUnits(acceptedUnits...)(string[] units...) +bool allAreAcceptedUnits(acceptedUnits...)(scope string[] units) { foreach (unit; units) { @@ -3730,12 +3730,12 @@ bool allAreAcceptedUnits(acceptedUnits...)(string[] units...) unittest { - assert(allAreAcceptedUnits!("hours", "seconds")("seconds", "hours")); - assert(!allAreAcceptedUnits!("hours", "seconds")("minutes", "hours")); - assert(!allAreAcceptedUnits!("hours", "seconds")("seconds", "minutes")); - assert(allAreAcceptedUnits!("days", "hours", "minutes", "seconds", "msecs")("minutes")); - assert(!allAreAcceptedUnits!("days", "hours", "minutes", "seconds", "msecs")("usecs")); - assert(!allAreAcceptedUnits!("days", "hours", "minutes", "seconds", "msecs")("secs")); + assert(allAreAcceptedUnits!("hours", "seconds")(["seconds", "hours"])); + assert(!allAreAcceptedUnits!("hours", "seconds")(["minutes", "hours"])); + assert(!allAreAcceptedUnits!("hours", "seconds")(["seconds", "minutes"])); + assert(allAreAcceptedUnits!("days", "hours", "minutes", "seconds", "msecs")(["minutes"])); + assert(!allAreAcceptedUnits!("days", "hours", "minutes", "seconds", "msecs")(["usecs"])); + assert(!allAreAcceptedUnits!("days", "hours", "minutes", "seconds", "msecs")(["secs"])); } @@ -3743,7 +3743,7 @@ unittest Whether the given time unit strings are arranged in order from largest to smallest. +/ -bool unitsAreInDescendingOrder(string[] units...) +bool unitsAreInDescendingOrder(scope string[] units) { if (units.length <= 1) return true; @@ -3783,13 +3783,13 @@ bool unitsAreInDescendingOrder(string[] units...) unittest { - assert(unitsAreInDescendingOrder("years", "months", "weeks", "days", "hours", "minutes", - "seconds", "msecs", "usecs", "hnsecs", "nsecs")); - assert(unitsAreInDescendingOrder("weeks", "hours", "msecs")); - assert(unitsAreInDescendingOrder("days", "hours", "minutes")); - assert(unitsAreInDescendingOrder("hnsecs")); - assert(!unitsAreInDescendingOrder("days", "hours", "hours")); - assert(!unitsAreInDescendingOrder("days", "hours", "days")); + assert(unitsAreInDescendingOrder(["years", "months", "weeks", "days", "hours", "minutes", + "seconds", "msecs", "usecs", "hnsecs", "nsecs"])); + assert(unitsAreInDescendingOrder(["weeks", "hours", "msecs"])); + assert(unitsAreInDescendingOrder(["days", "hours", "minutes"])); + assert(unitsAreInDescendingOrder(["hnsecs"])); + assert(!unitsAreInDescendingOrder(["days", "hours", "hours"])); + assert(!unitsAreInDescendingOrder(["days", "hours", "days"])); } version (Darwin) diff --git a/libphobos/libdruntime/object.d b/libphobos/libdruntime/object.d index 151755feed0..a079e0e73e9 100644 --- a/libphobos/libdruntime/object.d +++ b/libphobos/libdruntime/object.d @@ -2446,7 +2446,7 @@ class Throwable : Object override string toString() { string s; - toString((buf) { s ~= buf; }); + toString((in buf) { s ~= buf; }); return s; } @@ -4752,3 +4752,79 @@ template _arrayOp(Args...) } public import core.builtins : __ctfeWrite; + +/** + +Provides an "inline import", i.e. an `import` that is only available for a +limited lookup. For example: + +--- +void fun(imported!"std.stdio".File input) +{ + ... use File from std.stdio normally ... +} +--- + +There is no need to import `std.stdio` at top level, so `fun` carries its own +dependencies. The same approach can be used for template constraints: + +--- +void fun(T)(imported!"std.stdio".File input, T value) +if (imported!"std.traits".isIntegral!T) +{ + ... +} +--- + +An inline import may be used in conjunction with the `with` statement as well. +Inside the scope controlled by `with`, all symbols in the imported module are +made available: + +--- +void fun() +{ + with (imported!"std.datetime") + with (imported!"std.stdio") + { + Clock.currTime.writeln; + } +} +--- + +The advantages of inline imports over top-level uses of the `import` declaration +are the following: + +$(UL +$(LI The `imported` template specifies dependencies at declaration level, not at +module level. This allows reasoning about the dependency cost of declarations in +separation instead of aggregated at module level.) +$(LI Declarations using `imported` are easier to move around because they don't +require top-level context, making for simpler and quicker refactorings.) +$(LI Declarations using `imported` scale better with templates. This is because +templates that are not instantiated do not have their parameters and constraints +instantiated, so additional modules are not imported without necessity. This +makes the cost of unused templates negligible. Dependencies are pulled on a need +basis depending on the declarations used by client code.) +) + +The use of `imported` also has drawbacks: + +$(UL +$(LI If most declarations in a module need the same imports, then factoring them +at top level, outside the declarations, is simpler than repeating them.) +$(LI Traditional dependency-tracking tools such as make and other build systems +assume file-level dependencies and need special tooling (such as rdmd) in order +to work efficiently.) +$(LI Dependencies at the top of a module are easier to inspect quickly than +dependencies spread throughout the module.) +) + +See_Also: The $(HTTP forum.dlang.org/post/tzqzmqhankrkbrfsrmbo@forum.dlang.org, +forum discussion) that led to the creation of the `imported` facility. Credit is +due to Daniel Nielsen and Dominikus Dittes Scherkl. + +*/ +template imported(string moduleName) +{ + mixin("import imported = " ~ moduleName ~ ";"); +} diff --git a/libphobos/libdruntime/rt/aApplyR.d b/libphobos/libdruntime/rt/aApplyR.d index 6db653047d3..7f19fa81528 100644 --- a/libphobos/libdruntime/rt/aApplyR.d +++ b/libphobos/libdruntime/rt/aApplyR.d @@ -8,19 +8,8 @@ * Authors: Walter Bright, Sean Kelly * Source: $(DRUNTIMESRC rt/_aApplyR.d) */ - -/* Copyright Digital Mars 2004 - 2010. - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE or copy at - * http://www.boost.org/LICENSE_1_0.txt) - */ module rt.aApplyR; -/* This code handles decoding UTF strings for foreach_reverse loops. - * There are 6 combinations of conversions between char, wchar, - * and dchar, and 2 of each of those. - */ - import core.internal.utf; /**********************************************/ diff --git a/libphobos/libdruntime/rt/aaA.d b/libphobos/libdruntime/rt/aaA.d index 01810536a49..6ff93f76da4 100644 --- a/libphobos/libdruntime/rt/aaA.d +++ b/libphobos/libdruntime/rt/aaA.d @@ -833,11 +833,9 @@ extern (C) hash_t _aaGetHash(scope const AA* paa, scope const TypeInfo tiRaw) no size_t h; foreach (b; aa.buckets) { - if (!b.filled) - continue; - size_t[2] h2 = [keyHash(b.entry), valHash(b.entry + off)]; // use addition here, so that hash is independent of element order - h += hashOf(h2); + if (b.filled) + h += hashOf(valHash(b.entry + off), keyHash(b.entry)); } return h; diff --git a/libphobos/libdruntime/rt/dmain2.d b/libphobos/libdruntime/rt/dmain2.d index 328452e2431..b363e3fea4f 100644 --- a/libphobos/libdruntime/rt/dmain2.d +++ b/libphobos/libdruntime/rt/dmain2.d @@ -538,7 +538,7 @@ private extern (C) int _d_run_main2(char[][] args, size_t totalArgsLength, MainF return result; } -private void formatThrowable(Throwable t, scope void delegate(const scope char[] s) nothrow sink) +private void formatThrowable(Throwable t, scope void delegate(in char[] s) nothrow sink) { foreach (u; t) { @@ -667,7 +667,7 @@ extern (C) void _d_print_throwable(Throwable t) } } - void sink(const scope char[] buf) scope nothrow + void sink(in char[] buf) scope nothrow { fprintf(stderr, "%.*s", cast(int)buf.length, buf.ptr); } diff --git a/libphobos/testsuite/libphobos.betterc/test22336.d b/libphobos/testsuite/libphobos.betterc/test22336.d new file mode 100644 index 00000000000..de0e31d76f0 --- /dev/null +++ b/libphobos/testsuite/libphobos.betterc/test22336.d @@ -0,0 +1,19 @@ +/*******************************************/ +// https://issues.dlang.org/show_bug.cgi?id=22336 + +import core.lifetime; + +struct Foo { + int f = -1; + @disable this(this); + this(int x) { f = x; } + @disable this(); +} + +extern(C) int main() { + Foo a = Foo(42); + Foo b = move(a); + assert(a.f == -1); + assert(b.f == 42); + return 0; +} diff --git a/libphobos/testsuite/libphobos.exceptions/assert_fail.d b/libphobos/testsuite/libphobos.exceptions/assert_fail.d index 79b3cb8139e..352ccca3901 100644 --- a/libphobos/testsuite/libphobos.exceptions/assert_fail.d +++ b/libphobos/testsuite/libphobos.exceptions/assert_fail.d @@ -426,6 +426,18 @@ void testShared() import core.atomic : atomicLoad; static assert( __traits(compiles, atomicLoad(s1))); static assert(!__traits(compiles, atomicLoad(b1))); + + static struct Fail + { + int value; + + @safe pure nothrow @nogc: + bool opCast () shared const scope { return true; } + } + + shared Fail fail = { value: 1 }; + assert(_d_assert_fail!(shared Fail)("==", fail) == "Fail(1) != true"); + assert(_d_assert_fail!(shared Fail)("==", fail, fail) == "Fail(1) != Fail(1)"); } void testException()