summaryrefslogtreecommitdiff
path: root/libphobos
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2021-04-02 13:29:22 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2021-04-04 01:26:20 +0200
commit5a0aa603b2452dca48ad86d97d4b918187d259fc (patch)
tree67439099b8129248a45826b5791912b20ff3c3fb /libphobos
parentba0f6902666430e5d065a92b3d5292cba91813d3 (diff)
d: Merge upstream dmd 3b808e838, druntime 483bc129, phobos f89dc217a
D front-end changes: - Explicit package visibility attribute is now always applied to introducing scopes. - Added `__traits(totype, string)' to convert mangled type string to an existing type. - Printf-like and scanf-like functions are now detected by prefixing them with `pragma(printf)' for printf-like functions or `pragma(scanf)' for scanf-like functions. - Added `__c_wchar_t', `__c_complex_float', `__c_complex_double', and `__c_complex_real' types for interfacing with C and C++. - Template alias parameters can now be instantiated with basic types, such as `int` or `void function()`. - Mixins can now be used as types in the form `mixin(string) var'. - Mixin expressions can take an argument list, same as `pragma(msg)'. - Implement DIP1034, add `typeof(*null)' types to represent `noreturn'. - `pragma(msg)' can print expressions of type `void'. - It is now an error to use private variables selectively imported from other modules. Due to a bug, some imported private members were visible from other modules, violating the specification. - Added new syntax to declare an alias to a function type using the `alias' syntax based on the assignment operator. - Function literals can now return a value by reference. Phobos changes: - Synchronize C bindings with the latest port fixes in upstream druntime. - Added alias for a `noreturn' type in object.d - Make use of the new `pragma(printf)' and `pragma(scanf)' pragmas, fix all code that got flagged as being incorrect. - Fixed code that relied on bugs in the D import package system. Reviewed-on: https://github.com/dlang/dmd/pull/12339 https://github.com/dlang/druntime/pull/3422 https://github.com/dlang/phobos/pull/7932 gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 3b808e838. * Make-lang.in (D_FRONTEND_OBJS): Add d/chkformat.o. * d-codegen.cc (build_struct_literal): Handle special enums. * d-convert.cc (convert_expr): Handle noreturn type. (convert_for_condition): Likewise. * d-target.cc (Target::_init): Set type for wchar_t. (TargetCPP::derivedClassOffset): New method. (Target::libraryObjectMonitors): New method. * decl.cc (get_symbol_decl): Set TREE_THIS_VOLATILE for functions of type noreturn. * toir.cc (IRVisitor::visit (ReturnStatement *)): Handle returning noreturn types. * types.cc (TypeVisitor::visit (TypeNoreturn *)): New method. (TypeVisitor::visit (TypeEnum *)): Handle special enums. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 483bc129. * libdruntime/Makefile.am (DRUNTIME_DSOURCES_DARWIN): Add core/sys/darwin/fcntl.d. (DRUNTIME_DSOURCES_OPENBSD): Add core/sys/openbsd/unistd.d. (DRUNTIME_DSOURCES_WINDOWS): Add core/sys/windows/stdc/malloc.d. * libdruntime/Makefile.in: Regenerate. * src/MERGE: Merge upstream phobos f89dc217a. * src/Makefile.am (PHOBOS_DSOURCES): Add std/regex/internal/tests2.d. * src/Makefile.in: Regenerate. * testsuite/libphobos.exceptions/chain.d: Fix format arguments. * testsuite/libphobos.exceptions/line_trace.d: Likewise.
Diffstat (limited to 'libphobos')
-rw-r--r--libphobos/libdruntime/MERGE2
-rw-r--r--libphobos/libdruntime/Makefile.am58
-rw-r--r--libphobos/libdruntime/Makefile.in105
-rw-r--r--libphobos/libdruntime/core/stdc/complex.d70
-rw-r--r--libphobos/libdruntime/core/stdc/config.d43
-rw-r--r--libphobos/libdruntime/core/stdc/errno.d16
-rw-r--r--libphobos/libdruntime/core/stdc/math.d400
-rw-r--r--libphobos/libdruntime/core/stdc/stdio.d61
-rw-r--r--libphobos/libdruntime/core/stdc/stdlib.d6
-rw-r--r--libphobos/libdruntime/core/stdc/tgmath.d653
-rw-r--r--libphobos/libdruntime/core/stdc/wchar_.d9
-rw-r--r--libphobos/libdruntime/core/sys/darwin/fcntl.d20
-rw-r--r--libphobos/libdruntime/core/sys/linux/epoll.d88
-rw-r--r--libphobos/libdruntime/core/sys/openbsd/string.d2
-rw-r--r--libphobos/libdruntime/core/sys/openbsd/unistd.d17
-rw-r--r--libphobos/libdruntime/core/sys/posix/config.d1
-rw-r--r--libphobos/libdruntime/core/sys/posix/dlfcn.d11
-rw-r--r--libphobos/libdruntime/core/sys/posix/signal.d14
-rw-r--r--libphobos/libdruntime/core/sys/posix/unistd.d48
-rw-r--r--libphobos/libdruntime/core/sys/windows/com.d20
-rw-r--r--libphobos/libdruntime/core/sys/windows/dll.d12
-rw-r--r--libphobos/libdruntime/core/sys/windows/stdc/malloc.d26
-rw-r--r--libphobos/libdruntime/gc/impl/conservative/gc.d4
-rw-r--r--libphobos/libdruntime/object.d7
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/Makefile.am12
-rw-r--r--libphobos/src/Makefile.in14
-rw-r--r--libphobos/src/std/algorithm/iteration.d8
-rw-r--r--libphobos/src/std/algorithm/searching.d4
-rw-r--r--libphobos/src/std/container/rbtree.d4
-rw-r--r--libphobos/src/std/conv.d2
-rw-r--r--libphobos/src/std/datetime/systime.d4
-rw-r--r--libphobos/src/std/experimental/logger/nulllogger.d2
-rw-r--r--libphobos/src/std/experimental/typecons.d6
-rw-r--r--libphobos/src/std/file.d5
-rw-r--r--libphobos/src/std/format.d4
-rw-r--r--libphobos/src/std/internal/math/biguintcore.d4
-rw-r--r--libphobos/src/std/math.d4
-rw-r--r--libphobos/src/std/parallelism.d4
-rw-r--r--libphobos/src/std/range/package.d1
-rw-r--r--libphobos/src/std/regex/internal/tests.d653
-rw-r--r--libphobos/src/std/regex/internal/tests2.d662
-rw-r--r--libphobos/src/std/socket.d2
-rw-r--r--libphobos/src/std/typecons.d10
-rw-r--r--libphobos/src/std/zip.d6
-rw-r--r--libphobos/testsuite/libphobos.exceptions/chain.d4
-rw-r--r--libphobos/testsuite/libphobos.exceptions/line_trace.d2
47 files changed, 1568 insertions, 1544 deletions
diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE
index a4a9a940baf..b797682a4d9 100644
--- a/libphobos/libdruntime/MERGE
+++ b/libphobos/libdruntime/MERGE
@@ -1,4 +1,4 @@
-0fd4364c4a4eb2ce0ebb8f613092c5bed7a63bf9
+483bc12977af3c1288fd52e7b4fa14b716896c5a
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 535ca26e860..2a5c793d7c1 100644
--- a/libphobos/libdruntime/Makefile.am
+++ b/libphobos/libdruntime/Makefile.am
@@ -208,16 +208,17 @@ DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/err.d \
DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
core/sys/darwin/dlfcn.d core/sys/darwin/err.d \
- core/sys/darwin/execinfo.d core/sys/darwin/ifaddrs.d \
- core/sys/darwin/mach/dyld.d core/sys/darwin/mach/getsect.d \
- core/sys/darwin/mach/kern_return.d core/sys/darwin/mach/loader.d \
- core/sys/darwin/mach/nlist.d core/sys/darwin/mach/port.d \
- core/sys/darwin/mach/semaphore.d core/sys/darwin/mach/stab.d \
- core/sys/darwin/mach/thread_act.d core/sys/darwin/netinet/in_.d \
- core/sys/darwin/pthread.d core/sys/darwin/stdlib.d \
- core/sys/darwin/string.d core/sys/darwin/sys/attr.d \
- core/sys/darwin/sys/cdefs.d core/sys/darwin/sys/event.d \
- core/sys/darwin/sys/mman.d core/sys/darwin/sys/sysctl.d
+ core/sys/darwin/execinfo.d core/sys/darwin/fcntl.d \
+ core/sys/darwin/ifaddrs.d core/sys/darwin/mach/dyld.d \
+ core/sys/darwin/mach/getsect.d core/sys/darwin/mach/kern_return.d \
+ core/sys/darwin/mach/loader.d core/sys/darwin/mach/nlist.d \
+ core/sys/darwin/mach/port.d core/sys/darwin/mach/semaphore.d \
+ core/sys/darwin/mach/stab.d core/sys/darwin/mach/thread_act.d \
+ core/sys/darwin/netinet/in_.d core/sys/darwin/pthread.d \
+ core/sys/darwin/stdlib.d core/sys/darwin/string.d \
+ core/sys/darwin/sys/attr.d core/sys/darwin/sys/cdefs.d \
+ core/sys/darwin/sys/event.d core/sys/darwin/sys/mman.d \
+ core/sys/darwin/sys/sysctl.d
DRUNTIME_DSOURCES_DRAGONFLYBSD = core/sys/dragonflybsd/dlfcn.d \
core/sys/dragonflybsd/err.d core/sys/dragonflybsd/execinfo.d \
@@ -275,7 +276,8 @@ DRUNTIME_DSOURCES_OPENBSD = core/sys/openbsd/dlfcn.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/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 \
@@ -382,22 +384,22 @@ DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
core/sys/windows/sqlext.d core/sys/windows/sqltypes.d \
core/sys/windows/sqlucode.d core/sys/windows/sspi.d \
core/sys/windows/stacktrace.d core/sys/windows/stat.d \
- core/sys/windows/stdc/time.d core/sys/windows/subauth.d \
- core/sys/windows/threadaux.d core/sys/windows/tlhelp32.d \
- core/sys/windows/tmschema.d core/sys/windows/unknwn.d \
- core/sys/windows/uuid.d core/sys/windows/vfw.d \
- core/sys/windows/w32api.d core/sys/windows/winbase.d \
- core/sys/windows/winber.d core/sys/windows/wincon.d \
- core/sys/windows/wincrypt.d core/sys/windows/windef.d \
- core/sys/windows/windows.d core/sys/windows/winerror.d \
- core/sys/windows/wingdi.d core/sys/windows/winhttp.d \
- core/sys/windows/wininet.d core/sys/windows/winioctl.d \
- core/sys/windows/winldap.d core/sys/windows/winnetwk.d \
- core/sys/windows/winnls.d core/sys/windows/winnt.d \
- core/sys/windows/winperf.d core/sys/windows/winreg.d \
- core/sys/windows/winsock2.d core/sys/windows/winspool.d \
- core/sys/windows/winsvc.d core/sys/windows/winuser.d \
- core/sys/windows/winver.d core/sys/windows/wtsapi32.d \
- core/sys/windows/wtypes.d
+ core/sys/windows/stdc/malloc.d core/sys/windows/stdc/time.d \
+ core/sys/windows/subauth.d core/sys/windows/threadaux.d \
+ core/sys/windows/tlhelp32.d core/sys/windows/tmschema.d \
+ core/sys/windows/unknwn.d core/sys/windows/uuid.d \
+ core/sys/windows/vfw.d core/sys/windows/w32api.d \
+ core/sys/windows/winbase.d core/sys/windows/winber.d \
+ core/sys/windows/wincon.d core/sys/windows/wincrypt.d \
+ core/sys/windows/windef.d core/sys/windows/windows.d \
+ core/sys/windows/winerror.d core/sys/windows/wingdi.d \
+ core/sys/windows/winhttp.d core/sys/windows/wininet.d \
+ core/sys/windows/winioctl.d core/sys/windows/winldap.d \
+ core/sys/windows/winnetwk.d core/sys/windows/winnls.d \
+ core/sys/windows/winnt.d core/sys/windows/winperf.d \
+ core/sys/windows/winreg.d core/sys/windows/winsock2.d \
+ core/sys/windows/winspool.d core/sys/windows/winsvc.d \
+ core/sys/windows/winuser.d core/sys/windows/winver.d \
+ core/sys/windows/wtsapi32.d core/sys/windows/wtypes.d
DRUNTIME_DISOURCES = __entrypoint.di __main.di
diff --git a/libphobos/libdruntime/Makefile.in b/libphobos/libdruntime/Makefile.in
index 7960add41d8..b00fe022cfa 100644
--- a/libphobos/libdruntime/Makefile.in
+++ b/libphobos/libdruntime/Makefile.in
@@ -256,8 +256,9 @@ am__objects_3 = core/sys/posix/aio.lo core/sys/posix/arpa/inet.lo \
@DRUNTIME_OS_POSIX_TRUE@am__objects_4 = $(am__objects_3)
am__objects_5 = core/sys/darwin/crt_externs.lo \
core/sys/darwin/dlfcn.lo core/sys/darwin/err.lo \
- core/sys/darwin/execinfo.lo core/sys/darwin/ifaddrs.lo \
- core/sys/darwin/mach/dyld.lo core/sys/darwin/mach/getsect.lo \
+ core/sys/darwin/execinfo.lo core/sys/darwin/fcntl.lo \
+ core/sys/darwin/ifaddrs.lo core/sys/darwin/mach/dyld.lo \
+ core/sys/darwin/mach/getsect.lo \
core/sys/darwin/mach/kern_return.lo \
core/sys/darwin/mach/loader.lo core/sys/darwin/mach/nlist.lo \
core/sys/darwin/mach/port.lo core/sys/darwin/mach/semaphore.lo \
@@ -322,7 +323,8 @@ am__objects_15 = core/sys/openbsd/dlfcn.lo core/sys/openbsd/err.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
+ core/sys/openbsd/sys/sysctl.lo core/sys/openbsd/time.lo \
+ core/sys/openbsd/unistd.lo
@DRUNTIME_OS_OPENBSD_TRUE@am__objects_16 = $(am__objects_15)
am__objects_17 = core/sys/linux/config.lo core/sys/linux/dlfcn.lo \
core/sys/linux/elf.lo core/sys/linux/epoll.lo \
@@ -408,23 +410,24 @@ am__objects_19 = core/sys/windows/accctrl.lo \
core/sys/windows/sql.lo core/sys/windows/sqlext.lo \
core/sys/windows/sqltypes.lo core/sys/windows/sqlucode.lo \
core/sys/windows/sspi.lo core/sys/windows/stacktrace.lo \
- core/sys/windows/stat.lo core/sys/windows/stdc/time.lo \
- core/sys/windows/subauth.lo core/sys/windows/threadaux.lo \
- core/sys/windows/tlhelp32.lo core/sys/windows/tmschema.lo \
- core/sys/windows/unknwn.lo core/sys/windows/uuid.lo \
- core/sys/windows/vfw.lo core/sys/windows/w32api.lo \
- core/sys/windows/winbase.lo core/sys/windows/winber.lo \
- core/sys/windows/wincon.lo core/sys/windows/wincrypt.lo \
- core/sys/windows/windef.lo core/sys/windows/windows.lo \
- core/sys/windows/winerror.lo core/sys/windows/wingdi.lo \
- core/sys/windows/winhttp.lo core/sys/windows/wininet.lo \
- core/sys/windows/winioctl.lo core/sys/windows/winldap.lo \
- core/sys/windows/winnetwk.lo core/sys/windows/winnls.lo \
- core/sys/windows/winnt.lo core/sys/windows/winperf.lo \
- core/sys/windows/winreg.lo core/sys/windows/winsock2.lo \
- core/sys/windows/winspool.lo core/sys/windows/winsvc.lo \
- core/sys/windows/winuser.lo core/sys/windows/winver.lo \
- core/sys/windows/wtsapi32.lo core/sys/windows/wtypes.lo
+ core/sys/windows/stat.lo core/sys/windows/stdc/malloc.lo \
+ core/sys/windows/stdc/time.lo core/sys/windows/subauth.lo \
+ core/sys/windows/threadaux.lo core/sys/windows/tlhelp32.lo \
+ core/sys/windows/tmschema.lo core/sys/windows/unknwn.lo \
+ core/sys/windows/uuid.lo core/sys/windows/vfw.lo \
+ core/sys/windows/w32api.lo core/sys/windows/winbase.lo \
+ core/sys/windows/winber.lo core/sys/windows/wincon.lo \
+ core/sys/windows/wincrypt.lo core/sys/windows/windef.lo \
+ core/sys/windows/windows.lo core/sys/windows/winerror.lo \
+ core/sys/windows/wingdi.lo core/sys/windows/winhttp.lo \
+ core/sys/windows/wininet.lo core/sys/windows/winioctl.lo \
+ core/sys/windows/winldap.lo core/sys/windows/winnetwk.lo \
+ core/sys/windows/winnls.lo core/sys/windows/winnt.lo \
+ core/sys/windows/winperf.lo core/sys/windows/winreg.lo \
+ core/sys/windows/winsock2.lo core/sys/windows/winspool.lo \
+ core/sys/windows/winsvc.lo core/sys/windows/winuser.lo \
+ core/sys/windows/winver.lo core/sys/windows/wtsapi32.lo \
+ core/sys/windows/wtypes.lo
@DRUNTIME_OS_MINGW_TRUE@am__objects_20 = $(am__objects_19)
am__objects_21 = core/sys/solaris/dlfcn.lo core/sys/solaris/elf.lo \
core/sys/solaris/err.lo core/sys/solaris/execinfo.lo \
@@ -837,16 +840,17 @@ DRUNTIME_DSOURCES_BIONIC = core/sys/bionic/err.d \
DRUNTIME_DSOURCES_DARWIN = core/sys/darwin/crt_externs.d \
core/sys/darwin/dlfcn.d core/sys/darwin/err.d \
- core/sys/darwin/execinfo.d core/sys/darwin/ifaddrs.d \
- core/sys/darwin/mach/dyld.d core/sys/darwin/mach/getsect.d \
- core/sys/darwin/mach/kern_return.d core/sys/darwin/mach/loader.d \
- core/sys/darwin/mach/nlist.d core/sys/darwin/mach/port.d \
- core/sys/darwin/mach/semaphore.d core/sys/darwin/mach/stab.d \
- core/sys/darwin/mach/thread_act.d core/sys/darwin/netinet/in_.d \
- core/sys/darwin/pthread.d core/sys/darwin/stdlib.d \
- core/sys/darwin/string.d core/sys/darwin/sys/attr.d \
- core/sys/darwin/sys/cdefs.d core/sys/darwin/sys/event.d \
- core/sys/darwin/sys/mman.d core/sys/darwin/sys/sysctl.d
+ core/sys/darwin/execinfo.d core/sys/darwin/fcntl.d \
+ core/sys/darwin/ifaddrs.d core/sys/darwin/mach/dyld.d \
+ core/sys/darwin/mach/getsect.d core/sys/darwin/mach/kern_return.d \
+ core/sys/darwin/mach/loader.d core/sys/darwin/mach/nlist.d \
+ core/sys/darwin/mach/port.d core/sys/darwin/mach/semaphore.d \
+ core/sys/darwin/mach/stab.d core/sys/darwin/mach/thread_act.d \
+ core/sys/darwin/netinet/in_.d core/sys/darwin/pthread.d \
+ core/sys/darwin/stdlib.d core/sys/darwin/string.d \
+ core/sys/darwin/sys/attr.d core/sys/darwin/sys/cdefs.d \
+ core/sys/darwin/sys/event.d core/sys/darwin/sys/mman.d \
+ core/sys/darwin/sys/sysctl.d
DRUNTIME_DSOURCES_DRAGONFLYBSD = core/sys/dragonflybsd/dlfcn.d \
core/sys/dragonflybsd/err.d core/sys/dragonflybsd/execinfo.d \
@@ -904,7 +908,8 @@ DRUNTIME_DSOURCES_OPENBSD = core/sys/openbsd/dlfcn.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/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 \
@@ -1011,23 +1016,23 @@ DRUNTIME_DSOURCES_WINDOWS = core/sys/windows/accctrl.d \
core/sys/windows/sqlext.d core/sys/windows/sqltypes.d \
core/sys/windows/sqlucode.d core/sys/windows/sspi.d \
core/sys/windows/stacktrace.d core/sys/windows/stat.d \
- core/sys/windows/stdc/time.d core/sys/windows/subauth.d \
- core/sys/windows/threadaux.d core/sys/windows/tlhelp32.d \
- core/sys/windows/tmschema.d core/sys/windows/unknwn.d \
- core/sys/windows/uuid.d core/sys/windows/vfw.d \
- core/sys/windows/w32api.d core/sys/windows/winbase.d \
- core/sys/windows/winber.d core/sys/windows/wincon.d \
- core/sys/windows/wincrypt.d core/sys/windows/windef.d \
- core/sys/windows/windows.d core/sys/windows/winerror.d \
- core/sys/windows/wingdi.d core/sys/windows/winhttp.d \
- core/sys/windows/wininet.d core/sys/windows/winioctl.d \
- core/sys/windows/winldap.d core/sys/windows/winnetwk.d \
- core/sys/windows/winnls.d core/sys/windows/winnt.d \
- core/sys/windows/winperf.d core/sys/windows/winreg.d \
- core/sys/windows/winsock2.d core/sys/windows/winspool.d \
- core/sys/windows/winsvc.d core/sys/windows/winuser.d \
- core/sys/windows/winver.d core/sys/windows/wtsapi32.d \
- core/sys/windows/wtypes.d
+ core/sys/windows/stdc/malloc.d core/sys/windows/stdc/time.d \
+ core/sys/windows/subauth.d core/sys/windows/threadaux.d \
+ core/sys/windows/tlhelp32.d core/sys/windows/tmschema.d \
+ core/sys/windows/unknwn.d core/sys/windows/uuid.d \
+ core/sys/windows/vfw.d core/sys/windows/w32api.d \
+ core/sys/windows/winbase.d core/sys/windows/winber.d \
+ core/sys/windows/wincon.d core/sys/windows/wincrypt.d \
+ core/sys/windows/windef.d core/sys/windows/windows.d \
+ core/sys/windows/winerror.d core/sys/windows/wingdi.d \
+ core/sys/windows/winhttp.d core/sys/windows/wininet.d \
+ core/sys/windows/winioctl.d core/sys/windows/winldap.d \
+ core/sys/windows/winnetwk.d core/sys/windows/winnls.d \
+ core/sys/windows/winnt.d core/sys/windows/winperf.d \
+ core/sys/windows/winreg.d core/sys/windows/winsock2.d \
+ core/sys/windows/winspool.d core/sys/windows/winsvc.d \
+ core/sys/windows/winuser.d core/sys/windows/winver.d \
+ core/sys/windows/wtsapi32.d core/sys/windows/wtypes.d
DRUNTIME_DISOURCES = __entrypoint.di __main.di
all: all-am
@@ -1346,6 +1351,7 @@ core/sys/darwin/crt_externs.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/dlfcn.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/err.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/execinfo.lo: core/sys/darwin/$(am__dirstamp)
+core/sys/darwin/fcntl.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/ifaddrs.lo: core/sys/darwin/$(am__dirstamp)
core/sys/darwin/mach/$(am__dirstamp):
@$(MKDIR_P) core/sys/darwin/mach
@@ -1510,6 +1516,7 @@ core/sys/openbsd/sys/link_elf.lo: \
core/sys/openbsd/sys/mman.lo: core/sys/openbsd/sys/$(am__dirstamp)
core/sys/openbsd/sys/sysctl.lo: core/sys/openbsd/sys/$(am__dirstamp)
core/sys/openbsd/time.lo: core/sys/openbsd/$(am__dirstamp)
+core/sys/openbsd/unistd.lo: core/sys/openbsd/$(am__dirstamp)
core/sys/linux/$(am__dirstamp):
@$(MKDIR_P) core/sys/linux
@: > core/sys/linux/$(am__dirstamp)
@@ -1690,6 +1697,8 @@ core/sys/windows/stat.lo: core/sys/windows/$(am__dirstamp)
core/sys/windows/stdc/$(am__dirstamp):
@$(MKDIR_P) core/sys/windows/stdc
@: > core/sys/windows/stdc/$(am__dirstamp)
+core/sys/windows/stdc/malloc.lo: \
+ core/sys/windows/stdc/$(am__dirstamp)
core/sys/windows/stdc/time.lo: core/sys/windows/stdc/$(am__dirstamp)
core/sys/windows/subauth.lo: core/sys/windows/$(am__dirstamp)
core/sys/windows/threadaux.lo: core/sys/windows/$(am__dirstamp)
diff --git a/libphobos/libdruntime/core/stdc/complex.d b/libphobos/libdruntime/core/stdc/complex.d
index d878366b3bd..b84651f3f15 100644
--- a/libphobos/libdruntime/core/stdc/complex.d
+++ b/libphobos/libdruntime/core/stdc/complex.d
@@ -19,163 +19,97 @@ extern (C):
nothrow:
@nogc:
-///
+// @@@DEPRECATED_2.105@@@
+deprecated:
alias creal complex;
-///
alias ireal imaginary;
-///
cdouble cacos(cdouble z);
-///
cfloat cacosf(cfloat z);
-///
creal cacosl(creal z);
-///
cdouble casin(cdouble z);
-///
cfloat casinf(cfloat z);
-///
creal casinl(creal z);
-///
cdouble catan(cdouble z);
-///
cfloat catanf(cfloat z);
-///
creal catanl(creal z);
-///
cdouble ccos(cdouble z);
-///
cfloat ccosf(cfloat z);
-///
creal ccosl(creal z);
-///
cdouble csin(cdouble z);
-///
cfloat csinf(cfloat z);
-///
creal csinl(creal z);
-///
cdouble ctan(cdouble z);
-///
cfloat ctanf(cfloat z);
-///
creal ctanl(creal z);
-///
cdouble cacosh(cdouble z);
-///
cfloat cacoshf(cfloat z);
-///
creal cacoshl(creal z);
-///
cdouble casinh(cdouble z);
-///
cfloat casinhf(cfloat z);
-///
creal casinhl(creal z);
-///
cdouble catanh(cdouble z);
-///
cfloat catanhf(cfloat z);
-///
creal catanhl(creal z);
-///
cdouble ccosh(cdouble z);
-///
cfloat ccoshf(cfloat z);
-///
creal ccoshl(creal z);
-///
cdouble csinh(cdouble z);
-///
cfloat csinhf(cfloat z);
-///
creal csinhl(creal z);
-///
cdouble ctanh(cdouble z);
-///
cfloat ctanhf(cfloat z);
-///
creal ctanhl(creal z);
-///
cdouble cexp(cdouble z);
-///
cfloat cexpf(cfloat z);
-///
creal cexpl(creal z);
-///
cdouble clog(cdouble z);
-///
cfloat clogf(cfloat z);
-///
creal clogl(creal z);
-///
double cabs(cdouble z);
- ///
float cabsf(cfloat z);
- ///
real cabsl(creal z);
- ///
cdouble cpow(cdouble x, cdouble y);
-///
cfloat cpowf(cfloat x, cfloat y);
-///
creal cpowl(creal x, creal y);
-///
cdouble csqrt(cdouble z);
-///
cfloat csqrtf(cfloat z);
-///
creal csqrtl(creal z);
-///
double carg(cdouble z);
- ///
float cargf(cfloat z);
- ///
real cargl(creal z);
-///
pragma(inline, true) double cimag(cdouble z) { return z.im; }
-///
pragma(inline, true) float cimagf(cfloat z) { return z.im; }
-///
pragma(inline, true) real cimagl(creal z) { return z.im; }
-///
cdouble conj(cdouble z);
-///
cfloat conjf(cfloat z);
-///
creal conjl(creal z);
-///
cdouble cproj(cdouble z);
-///
cfloat cprojf(cfloat z);
-///
creal cprojl(creal z);
// Note: `creal` is a keyword in D and so this function is inaccessible, use `creald` instead
//pragma(inline, true) double creal(cdouble z) { return z.re; }
-///
pragma(inline, true) double creald(cdouble z) { return z.re; }
-///
pragma(inline, true) float crealf(cfloat z) { return z.re; }
-///
pragma(inline, true) real creall(creal z) { return z.re; }
diff --git a/libphobos/libdruntime/core/stdc/config.d b/libphobos/libdruntime/core/stdc/config.d
index cdb987f1415..802f5b6fb21 100644
--- a/libphobos/libdruntime/core/stdc/config.d
+++ b/libphobos/libdruntime/core/stdc/config.d
@@ -34,6 +34,7 @@ version (StdDdoc)
alias ddoc_long = int;
alias ddoc_ulong = uint;
}
+ struct ddoc_complex(T) { T re; T im; };
}
/***
@@ -89,6 +90,24 @@ version (StdDdoc)
* C++ compiler's `ptrdiff_t` type.
*/
alias cpp_ptrdiff_t = ptrdiff_t;
+
+ /***
+ * Used for a complex floating point type that corresponds in size and ABI to the associated
+ * C compiler's `_Complex float` type.
+ */
+ alias c_complex_float = ddoc_complex!float;
+
+ /***
+ * Used for a complex floating point type that corresponds in size and ABI to the associated
+ * C compiler's `_Complex double` type.
+ */
+ alias c_complex_double = ddoc_complex!double;
+
+ /***
+ * Used for a complex floating point type that corresponds in size and ABI to the associated
+ * C compiler's `_Complex long double` type.
+ */
+ alias c_complex_real = ddoc_complex!real;
}
else
{
@@ -230,4 +249,28 @@ else
alias cpp_size_t = size_t;
alias cpp_ptrdiff_t = ptrdiff_t;
}
+
+// ABI layout of native complex types.
+private struct _Complex(T)
+{
+ T re;
+ T im;
+}
+
+version (Posix)
+{
+ align(float.alignof) enum __c_complex_float : _Complex!float;
+ align(double.alignof) enum __c_complex_double : _Complex!double;
+ align(real.alignof) enum __c_complex_real : _Complex!real;
+}
+else
+{
+ align(float.sizeof * 2) enum __c_complex_float : _Complex!float;
+ align(double.sizeof * 2) enum __c_complex_double : _Complex!double;
+ align(real.alignof) enum __c_complex_real : _Complex!real;
+}
+
+alias c_complex_float = __c_complex_float;
+alias c_complex_double = __c_complex_double;
+alias c_complex_real = __c_complex_real;
}
diff --git a/libphobos/libdruntime/core/stdc/errno.d b/libphobos/libdruntime/core/stdc/errno.d
index 31f7d11c762..57bc15da6eb 100644
--- a/libphobos/libdruntime/core/stdc/errno.d
+++ b/libphobos/libdruntime/core/stdc/errno.d
@@ -156,15 +156,9 @@ else version (Haiku)
else
{
///
- @property int errno() { return getErrno(); }
+ extern(C) pragma(mangle, "getErrno") @property int errno();
///
- @property int errno(int n) { return setErrno(n); }
-
- extern (C)
- {
- private int getErrno(); // for internal use
- private int setErrno(int); // for internal use
- }
+ extern(C) pragma(mangle, "setErrno") @property int errno(int n);
}
extern (C):
@@ -1532,7 +1526,11 @@ else version (OpenBSD)
enum EIDRM = 89; /// Identifier removed
enum ENOMSG = 90; /// No message of desired type
enum ENOTSUP = 91; /// Not supported
- enum ELAST = 91; /// Must be equal largest errno
+ enum EBADMSG = 92; /// Bad message
+ enum ENOTRECOVERABLE = 93; /// State not recoverable
+ enum EOWNERDEAD = 94; /// Previous owner died
+ enum EPROTO = 95; /// Protocol error
+ enum ELAST = 95; /// Must be equal largest errno
}
else version (DragonFlyBSD)
{
diff --git a/libphobos/libdruntime/core/stdc/math.d b/libphobos/libdruntime/core/stdc/math.d
index e8d1fa8e7b5..fba78ee233a 100644
--- a/libphobos/libdruntime/core/stdc/math.d
+++ b/libphobos/libdruntime/core/stdc/math.d
@@ -319,16 +319,12 @@ version (CRuntime_DigitalMars)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassify_f(x); }
+ extern(C) pragma(mangle, "__fpclassify_f") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassify_d(x); }
+ extern(C) pragma(mangle, "__fpclassify_d") pure int fpclassify(double x);
///
- pure int fpclassify(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __fpclassify_d(x)
- : __fpclassify_ld(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify_d" : "__fpclassify_ld")
+ pure int fpclassify(real x);
//int isfinite(real-floating x);
///
@@ -442,24 +438,18 @@ else version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) o
FP_NAN = 2,
}
- pure private short _fdclass(float x);
- pure private short _dclass(double x);
-
- pure private int _fdsign(float x);
- pure private int _dsign(double x);
-
extern(D)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify()(float x) { return _fdclass(x); }
+ extern(C) pragma(mangle, "_fdclass") pure int fpclassify(float x);
///
- pure int fpclassify()(double x) { return _dclass(x); }
+ extern(C) pragma(mangle, "_dclass") pure int fpclassify(double x);
///
pure int fpclassify()(real x)
{
static if (real.sizeof == double.sizeof)
- return _dclass(cast(double) x);
+ return fpclassify(cast(double) x);
else
static assert(false, "fpclassify(real) not supported by MS C runtime");
}
@@ -495,7 +485,7 @@ else version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) o
///
pure int isnan(float x) { version (Win64) return _isnanf(x); else return _isnan(cast(double) x); }
///
- pure int isnan(double x) { return _isnan(x); }
+ extern(C) pragma(mangle, "_isnan") pure int isnan(double x);
///
pure int isnan(real x) { return _isnan(cast(double) x); }
}
@@ -510,14 +500,14 @@ else version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) o
//int signbit(real-floating x);
///
- pure int signbit()(float x) { return _fdsign(x); }
+ extern(C) pragma(mangle, "_fdsign") pure int signbit(float x);
///
- pure int signbit()(double x) { return _dsign(x); }
+ extern(C) pragma(mangle, "_dsign") pure int signbit(double x);
///
pure int signbit()(real x)
{
static if (real.sizeof == double.sizeof)
- return _dsign(cast(double) x);
+ return signbit(cast(double) x);
else
return (cast(short*)&(x))[4] & 0x8000;
}
@@ -573,55 +563,39 @@ else version (CRuntime_Glibc)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassify(x); }
+ extern(C) pragma(mangle, "__fpclassify") pure int fpclassify(double x);
///
- pure int fpclassify(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __fpclassify(x)
- : __fpclassifyl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
+ pure int fpclassify(real x);
//int isfinite(real-floating x);
///
- pure int isfinite(float x) { return __finitef(x); }
+ extern(C) pragma(mangle, "__finitef") pure int isfinite(float x);
///
- pure int isfinite(double x) { return __finite(x); }
+ extern(C) pragma(mangle, "__finite") pure int isfinite(double x);
///
- pure int isfinite(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __finite(x)
- : __finitel(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__finite" : "__finitel")
+ pure int isfinite(real x);
//int isinf(real-floating x);
///
- pure int isinf(float x) { return __isinff(x); }
+ extern(C) pragma(mangle, "__isinff") pure int isinf(float x);
///
- pure int isinf(double x) { return __isinf(x); }
+ extern(C) pragma(mangle, "__isinf") pure int isinf(double x);
///
- pure int isinf(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __isinf(x)
- : __isinfl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isinf" : "__isinfl")
+ pure int isinf(real x);
//int isnan(real-floating x);
///
- pure int isnan(float x) { return __isnanf(x); }
+ extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
///
- pure int isnan(double x) { return __isnan(x); }
+ extern(C) pragma(mangle, "__isnan") pure int isnan(double x);
///
- pure int isnan(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __isnan(x)
- : __isnanl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
+ pure int isnan(real x);
//int isnormal(real-floating x);
///
@@ -633,16 +607,12 @@ else version (CRuntime_Glibc)
//int signbit(real-floating x);
///
- pure int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
///
- pure int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
///
- pure int signbit(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __signbit(x)
- : __signbitl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
+ pure int signbit(real x);
}
}
else version (CRuntime_Musl)
@@ -685,16 +655,12 @@ else version (CRuntime_Musl)
{
//int fpclassify(real-floating x);
///
- int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") int fpclassify(float x);
///
- int fpclassify(double x) { return __fpclassify(x); }
+ extern(C) pragma(mangle, "__fpclassify") int fpclassify(double x);
///
- int fpclassify(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __fpclassify(x)
- : __fpclassifyl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
+ int fpclassify(real x);
private uint __FLOAT_BITS(float __f)
{
union __u_t {
@@ -765,16 +731,12 @@ else version (CRuntime_Musl)
//int signbit(real-floating x);
///
- int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") int signbit(float x);
///
- int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") int signbit(double x);
///
- int signbit(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __signbit(x)
- : __signbitl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
+ int signbit(real x);
}
}
else version (CRuntime_UClibc)
@@ -826,52 +788,36 @@ else version (CRuntime_UClibc)
extern (D)
{
///
- int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") int fpclassify(float x);
///
- int fpclassify(double x) { return __fpclassify(x); }
+ extern(C) pragma(mangle, "__fpclassify") int fpclassify(double x);
///
- int fpclassify(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __fpclassify(x)
- : __fpclassifyl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
+ int fpclassify(real x);
///
- int isfinite(float x) { return __finitef(x); }
+ extern(C) pragma(mangle, "__finitef") int isfinite(float x);
///
- int isfinite(double x) { return __finite(x); }
+ extern(C) pragma(mangle, "__finite") int isfinite(double x);
///
- int isfinite(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __finite(x)
- : __finitel(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__finite" : "__finitel")
+ int isfinite(real x);
///
- int isinf(float x) { return __isinff(x); }
+ extern(C) pragma(mangle, "__isinff") int isinf(float x);
///
- int isinf(double x) { return __isinf(x); }
+ extern(C) pragma(mangle, "__isinf") int isinf(double x);
///
- int isinf(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __isinf(x)
- : __isinfl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isinf" : "__isinfl")
+ int isinf(real x);
///
- int isnan(float x) { return __isnanf(x); }
+ extern(C) pragma(mangle, "__isnanf") int isnan(float x);
///
- int isnan(double x) { return __isnan(x); }
+ extern(C) pragma(mangle, "__isnan") int isnan(double x);
///
- int isnan(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __isnan(x)
- : __isnanl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
+ int isnan(real x);
///
int isnormal(float x) { return fpclassify(x) == FP_NORMAL; }
@@ -881,16 +827,12 @@ else version (CRuntime_UClibc)
int isnormal(real x) { return fpclassify(x) == FP_NORMAL; }
///
- int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") int signbit(float x);
///
- int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") int signbit(double x);
///
- int signbit(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __signbit(x)
- : __signbitl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
+ int signbit(real x);
}
}
else version (MinGW)
@@ -925,16 +867,12 @@ else version (MinGW)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassify(x); }
+ extern(C) pragma(mangle, "__fpclassify") pure int fpclassify(double x);
///
- pure int fpclassify(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __fpclassify(x)
- : __fpclassifyl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassify" : "__fpclassifyl")
+ pure int fpclassify(real x);
//int isfinite(real-floating x);
///
@@ -954,16 +892,12 @@ else version (MinGW)
//int isnan(real-floating x);
///
- pure int isnan(float x) { return __isnanf(x); }
+ extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
///
- pure int isnan(double x) { return __isnan(x); }
+ extern(C) pragma(mangle, "__isnan") pure int isnan(double x);
///
- pure int isnan(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __isnan(x)
- : __isnanl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
+ pure int isnan(real x);
//int isnormal(real-floating x);
///
@@ -975,16 +909,12 @@ else version (MinGW)
//int signbit(real-floating x);
///
- int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
///
- int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
///
- int signbit(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __signbit(x)
- : __signbitl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__signbit" : "__signbitl")
+ int signbit(real x);
}
}
else version (Darwin)
@@ -1070,35 +1000,35 @@ else version (Darwin)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassifyd(x); }
+ extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
///
- pure int fpclassify(real x) { return __fpclassifyl(x); }
+ extern(C) pragma(mangle, __fpclassifyl.mangleof) pure int fpclassify(real x);
//int isfinite(real-floating x);
///
- pure int isfinite(float x) { return __isfinitef(x); }
+ extern(C) pragma(mangle, "__isfinitef") pure int isfinite(float x);
///
- pure int isfinite(double x) { return __isfinited(x); }
+ extern(C) pragma(mangle, "__isfinited") pure int isfinite(double x);
///
- pure int isfinite(real x) { return __isfinitel(x); }
+ extern(C) pragma(mangle, __isfinitel.mangleof) pure int isfinite(real x);
//int isinf(real-floating x);
///
- pure int isinf(float x) { return __isinff(x); }
+ extern(C) pragma(mangle, "__isinff") pure int isinf(float x);
///
- pure int isinf(double x) { return __isinfd(x); }
+ extern(C) pragma(mangle, "__isinfd") pure int isinf(double x);
///
- pure int isinf(real x) { return __isinfl(x); }
+ extern(C) pragma(mangle, __isinfl.mangleof) pure int isinf(real x);
//int isnan(real-floating x);
///
- pure int isnan(float x) { return __isnanf(x); }
+ extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
///
- pure int isnan(double x) { return __isnand(x); }
+ extern(C) pragma(mangle, "__isnand") pure int isnan(double x);
///
- pure int isnan(real x) { return __isnanl(x); }
+ extern(C) pragma(mangle, __isnanl.mangleof) pure int isnan(real x);
//int isnormal(real-floating x);
///
@@ -1110,11 +1040,11 @@ else version (Darwin)
//int signbit(real-floating x);
///
- pure int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
///
- pure int signbit(double x) { return __signbitd(x); }
+ extern(C) pragma(mangle, "__signbitd") pure int signbit(double x);
///
- pure int signbit(real x) { return __signbitl(x); }
+ extern(C) pragma(mangle, "__signbitl") pure int signbit(real x);
}
}
else version (FreeBSD)
@@ -1163,27 +1093,27 @@ else version (FreeBSD)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassifyd(x); }
+ extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
///
- pure int fpclassify(real x) { return __fpclassifyl(x); }
+ extern(C) pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
//int isfinite(real-floating x);
///
- pure int isfinite(float x) { return __isfinitef(x); }
+ extern(C) pragma(mangle, "__isfinitef") pure int isfinite(float x);
///
- pure int isfinite(double x) { return __isfinite(x); }
+ extern(C) pragma(mangle, "__isfinite") pure int isfinite(double x);
///
- pure int isfinite(real x) { return __isfinitel(x); }
+ extern(C) pragma(mangle, "__isfinitel") pure int isfinite(real x);
//int isinf(real-floating x);
///
- pure int isinf(float x) { return __isinff(x); }
+ extern(C) pragma(mangle, "__isinff") pure int isinf(float x);
///
pure int isinf(double x) { return __isinfl(x); }
///
- pure int isinf(real x) { return __isinfl(x); }
+ extern(C) pragma(mangle, "__isinfl") pure int isinf(real x);
//int isnan(real-floating x);
///
@@ -1191,21 +1121,21 @@ else version (FreeBSD)
///
pure int isnan(double x) { return __isnanl(x); }
///
- pure int isnan(real x) { return __isnanl(x); }
+ extern(C) pragma(mangle, "__isnanl") pure int isnan(real x);
//int isnormal(real-floating x);
///
- pure int isnormal(float x) { return __isnormalf(x); }
+ extern(C) pragma(mangle, "__isnormalf") pure int isnormal(float x);
///
- pure int isnormal(double x) { return __isnormal(x); }
+ extern(C) pragma(mangle, "__isnormal") pure int isnormal(double x);
///
- pure int isnormal(real x) { return __isnormall(x); }
+ extern(C) pragma(mangle, "__isnormall") pure int isnormal(real x);
//int signbit(real-floating x);
///
- pure int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
///
- pure int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
///
pure int signbit(real x) { return __signbit(x); }
}
@@ -1256,27 +1186,27 @@ else version (OpenBSD)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassifyd(x); }
+ extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
///
- pure int fpclassify(real x) { return __fpclassifyl(x); }
+ extern(C) pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
//int isfinite(real-floating x);
///
- pure int isfinite(float x) { return __isfinitef(x); }
+ extern(C) pragma(mangle, "__isfinitef") pure int isfinite(float x);
///
- pure int isfinite(double x) { return __isfinite(x); }
+ extern(C) pragma(mangle, "__isfinite") pure int isfinite(double x);
///
- pure int isfinite(real x) { return __isfinitel(x); }
+ extern(C) pragma(mangle, "__isfinitel") pure int isfinite(real x);
//int isinf(real-floating x);
///
- pure int isinf(float x) { return __isinff(x); }
+ extern(C) pragma(mangle, "__isinff") pure int isinf(float x);
///
pure int isinf(double x) { return __isinfl(x); }
///
- pure int isinf(real x) { return __isinfl(x); }
+ extern(C) pragma(mangle, "__isinfl") pure int isinf(real x);
//int isnan(real-floating x);
///
@@ -1284,21 +1214,21 @@ else version (OpenBSD)
///
pure int isnan(double x) { return __isnanl(x); }
///
- pure int isnan(real x) { return __isnanl(x); }
+ extern(C) pragma(mangle, "__isnanl") pure int isnan(real x);
//int isnormal(real-floating x);
///
- pure int isnormal(float x) { return __isnormalf(x); }
+ extern(C) pragma(mangle, "__isnormalf") pure int isnormal(float x);
///
- pure int isnormal(double x) { return __isnormal(x); }
+ extern(C) pragma(mangle, "__isnormal") pure int isnormal(double x);
///
- pure int isnormal(real x) { return __isnormall(x); }
+ extern(C) pragma(mangle, "__isnormall") pure int isnormal(real x);
//int signbit(real-floating x);
///
- pure int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
///
- pure int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
///
pure int signbit(real x) { return __signbit(x); }
}
@@ -1337,16 +1267,12 @@ else version (NetBSD)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassifyd(x); }
+ extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
///
- pure int fpclassify(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __fpclassifyd(x)
- : __fpclassifyl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__fpclassifyd" : "__fpclassifyl")
+ pure int fpclassify(real x);
//int isfinite(real-floating x);
///
@@ -1433,29 +1359,29 @@ else version (DragonFlyBSD)
extern (D)
{
- pure int fpclassify(float x) { return __fpclassifyf(x); }
- pure int fpclassify(double x) { return __fpclassifyd(x); }
- pure int fpclassify(real x) { return __fpclassifyl(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
+ extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
+ extern(C) pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
- pure int isfinite(float x) { return __isfinitef(x); }
- pure int isfinite(double x) { return __isfinite(x); }
- pure int isfinite(real x) { return __isfinitel(x); }
+ extern(C) pragma(mangle, "__isfinitef") pure int isfinite(float x);
+ extern(C) pragma(mangle, "__isfinite") pure int isfinite(double x);
+ extern(C) pragma(mangle, "__isfinitel") pure int isfinite(real x);
- pure int isinf(float x) { return __isinff(x); }
- pure int isinf(double x) { return __isinf(x); }
- pure int isinf(real x) { return __isinfl(x); }
+ extern(C) pragma(mangle, "__isinff") pure int isinf(float x);
+ extern(C) pragma(mangle, "__isinf") pure int isinf(double x);
+ extern(C) pragma(mangle, "__isinfl") pure int isinf(real x);
- pure int isnan(float x) { return __isnanf(x); }
- pure int isnan(double x) { return __isnan(x); }
- pure int isnan(real x) { return __isnanl(x); }
+ extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
+ extern(C) pragma(mangle, "__isnan") pure int isnan(double x);
+ extern(C) pragma(mangle, "__isnanl") pure int isnan(real x);
- pure int isnormal(float x) { return __isnormalf(x); }
- pure int isnormal(double x) { return __isnormal(x); }
- pure int isnormal(real x) { return __isnormall(x); }
+ extern(C) pragma(mangle, "__isnormalf") pure int isnormal(float x);
+ extern(C) pragma(mangle, "__isnormal") pure int isnormal(double x);
+ extern(C) pragma(mangle, "__isnormall") pure int isnormal(real x);
- pure int signbit(float x) { return __signbitf(x); }
- pure int signbit(double x) { return __signbit(x); }
- pure int signbit(real x) { return __signbitl(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
+ extern(C) pragma(mangle, "__signbitl") pure int signbit(real x);
}
}
else version (Solaris)
@@ -1468,16 +1394,12 @@ else version (Solaris)
{
//int isnan(real-floating x);
///
- pure int isnan(float x) { return __isnanf(x); }
+ extern(C) pragma(mangle, "__isnanf") pure int isnan(float x);
///
- pure int isnan(double x) { return __isnan(x); }
+ extern(C) pragma(mangle, "__isnan") pure int isnan(double x);
///
- pure int isnan(real x)
- {
- return (real.sizeof == double.sizeof)
- ? __isnan(x)
- : __isnanl(x);
- }
+ extern(C) pragma(mangle, real.sizeof == double.sizeof ? "__isnan" : "__isnanl")
+ pure int isnan(real x);
}
}
else version (CRuntime_Bionic)
@@ -1527,49 +1449,49 @@ else version (CRuntime_Bionic)
{
//int fpclassify(real-floating x);
///
- pure int fpclassify(float x) { return __fpclassifyf(x); }
+ extern(C) pragma(mangle, "__fpclassifyf") pure int fpclassify(float x);
///
- pure int fpclassify(double x) { return __fpclassifyd(x); }
+ extern(C) pragma(mangle, "__fpclassifyd") pure int fpclassify(double x);
///
- pure int fpclassify(real x) { return __fpclassifyl(x); }
+ extern(C) pragma(mangle, "__fpclassifyl") pure int fpclassify(real x);
//int isfinite(real-floating x);
///
- pure int isfinite(float x) { return __isfinitef(x); }
+ extern(C) pragma(mangle, "__isfinitef") pure int isfinite(float x);
///
- pure int isfinite(double x) { return __isfinite(x); }
+ extern(C) pragma(mangle, "__isfinite") pure int isfinite(double x);
///
- pure int isfinite(real x) { return __isfinitel(x); }
+ extern(C) pragma(mangle, "__isfinitel") pure int isfinite(real x);
//int isinf(real-floating x);
///
- pure int isinf(float x) { return __isinff(x); }
+ extern(C) pragma(mangle, "__isinff") pure int isinf(float x);
///
- pure int isinf(double x) { return __isinf(x); }
+ extern(C) pragma(mangle, "__isinf") pure int isinf(double x);
///
- pure int isinf(real x) { return __isinfl(x); }
+ extern(C) pragma(mangle, "__isinfl") pure int isinf(real x);
//int isnan(real-floating x);
///
- pure int isnan(float x) { return isnanf(x); }
+ extern(C) pragma(mangle, "isnanf") pure int isnan(float x);
///
- pure int isnan(real x) { return __isnanl(x); }
+ extern(C) pragma(mangle, "__isnanl") pure int isnan(real x);
//int isnormal(real-floating x);
///
- pure int isnormal(float x) { return __isnormalf(x); }
+ extern(C) pragma(mangle, "__isnormalf") pure int isnormal(float x);
///
- pure int isnormal(double x) { return __isnormal(x); }
+ extern(C) pragma(mangle, "__isnormal") pure int isnormal(double x);
///
- pure int isnormal(real x) { return __isnormall(x); }
+ extern(C) pragma(mangle, "__isnormall") pure int isnormal(real x);
//int signbit(real-floating x);
///
- pure int signbit(float x) { return __signbitf(x); }
+ extern(C) pragma(mangle, "__signbitf") pure int signbit(float x);
///
- pure int signbit(double x) { return __signbit(x); }
+ extern(C) pragma(mangle, "__signbit") pure int signbit(double x);
///
- pure int signbit(real x) { return __signbitl(x); }
+ extern(C) pragma(mangle, "__signbitl") pure int signbit(real x);
}
}
@@ -1841,14 +1763,12 @@ version (CRuntime_Microsoft) // fully supported since MSVCRT 12 (VS 2013) only
///
extern(D) pure real fabsl()(real x) { return fabs(cast(double) x); }
- private double _hypot(double x, double y);
- private float _hypotf(float x, float y);
///
- extern(D) double hypot(double x, double y) { return _hypot(x, y); }
+ extern(C) pragma(mangle, "_hypot") double hypot(double x, double y);
///
- extern(D) float hypotf(float x, float y) { return _hypotf(x, y); }
+ extern(C) pragma(mangle, "_hypotf") float hypotf(float x, float y);
///
- extern(D) real hypotl(real x, real y) { return _hypot(cast(double) x, cast(double) y); }
+ extern(D) real hypotl(real x, real y) { return hypot(cast(double) x, cast(double) y); }
///
double pow(double x, double y);
diff --git a/libphobos/libdruntime/core/stdc/stdio.d b/libphobos/libdruntime/core/stdc/stdio.d
index 67011596b1c..532a0803f55 100644
--- a/libphobos/libdruntime/core/stdc/stdio.d
+++ b/libphobos/libdruntime/core/stdc/stdio.d
@@ -1166,61 +1166,73 @@ version (MinGW)
// Prefer the MinGW versions over the MSVC ones, as the latter don't handle
// reals at all.
///
+ pragma(printf)
int __mingw_fprintf(FILE* stream, scope const char* format, scope const ...);
///
alias __mingw_fprintf fprintf;
///
+ pragma(scanf)
int __mingw_fscanf(FILE* stream, scope const char* format, scope ...);
///
alias __mingw_fscanf fscanf;
///
+ pragma(printf)
int __mingw_sprintf(scope char* s, scope const char* format, scope const ...);
///
alias __mingw_sprintf sprintf;
///
+ pragma(scanf)
int __mingw_sscanf(scope const char* s, scope const char* format, scope ...);
///
alias __mingw_sscanf sscanf;
///
+ pragma(printf)
int __mingw_vfprintf(FILE* stream, scope const char* format, va_list arg);
///
alias __mingw_vfprintf vfprintf;
///
+ pragma(scanf)
int __mingw_vfscanf(FILE* stream, scope const char* format, va_list arg);
///
alias __mingw_vfscanf vfscanf;
///
+ pragma(printf)
int __mingw_vsprintf(scope char* s, scope const char* format, va_list arg);
///
alias __mingw_vsprintf vsprintf;
///
+ pragma(scanf)
int __mingw_vsscanf(scope const char* s, scope const char* format, va_list arg);
///
alias __mingw_vsscanf vsscanf;
///
+ pragma(printf)
int __mingw_vprintf(scope const char* format, va_list arg);
///
alias __mingw_vprintf vprintf;
///
+ pragma(scanf)
int __mingw_vscanf(scope const char* format, va_list arg);
///
alias __mingw_vscanf vscanf;
///
+ pragma(printf)
int __mingw_printf(scope const char* format, scope const ...);
///
alias __mingw_printf printf;
///
+ pragma(scanf)
int __mingw_scanf(scope const char* format, scope ...);
///
alias __mingw_scanf scanf;
@@ -1228,28 +1240,40 @@ version (MinGW)
else
{
///
+ pragma(printf)
int fprintf(FILE* stream, scope const char* format, scope const ...);
///
+ pragma(scanf)
int fscanf(FILE* stream, scope const char* format, scope ...);
///
+ pragma(printf)
int sprintf(scope char* s, scope const char* format, scope const ...);
///
+ pragma(scanf)
int sscanf(scope const char* s, scope const char* format, scope ...);
///
+ pragma(printf)
int vfprintf(FILE* stream, scope const char* format, va_list arg);
///
+ pragma(scanf)
int vfscanf(FILE* stream, scope const char* format, va_list arg);
///
+ pragma(printf)
int vsprintf(scope char* s, scope const char* format, va_list arg);
///
+ pragma(scanf)
int vsscanf(scope const char* s, scope const char* format, va_list arg);
///
+ pragma(printf)
int vprintf(scope const char* format, va_list arg);
///
+ pragma(scanf)
int vscanf(scope const char* format, va_list arg);
///
+ pragma(printf)
int printf(scope const char* format, scope const ...);
///
+ pragma(scanf)
int scanf(scope const char* format, scope ...);
}
@@ -1278,13 +1302,14 @@ extern (D) @trusted
int getchar()() { return getc(stdin); }
///
int putchar()(int c) { return putc(c,stdout); }
- ///
- int getc()(FILE* stream) { return fgetc(stream); }
- ///
- int putc()(int c, FILE* stream) { return fputc(c,stream); }
}
///
+alias getc = fgetc;
+///
+alias putc = fputc;
+
+///
@trusted int ungetc(int c, FILE* stream); // No unsafe pointer manipulation.
///
@@ -1323,11 +1348,13 @@ version (CRuntime_DigitalMars)
pure int fileno()(FILE* stream) { return stream._file; }
}
///
+ pragma(printf)
int _snprintf(scope char* s, size_t n, scope const char* fmt, scope const ...);
///
alias _snprintf snprintf;
///
+ pragma(printf)
int _vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
///
alias _vsnprintf vsnprintf;
@@ -1351,6 +1378,7 @@ else version (CRuntime_Microsoft)
version (MinGW)
{
+ pragma(printf)
int __mingw_snprintf(scope char* s, size_t n, scope const char* fmt, scope const ...);
///
alias __mingw_snprintf _snprintf;
@@ -1358,6 +1386,7 @@ else version (CRuntime_Microsoft)
alias __mingw_snprintf snprintf;
///
+ pragma(printf)
int __mingw_vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
///
alias __mingw_vsnprintf _vsnprintf;
@@ -1367,13 +1396,17 @@ else version (CRuntime_Microsoft)
else
{
///
+ pragma(printf)
int _snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int _vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
@@ -1410,8 +1443,10 @@ else version (CRuntime_Glibc)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (Darwin)
@@ -1432,8 +1467,10 @@ else version (Darwin)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (FreeBSD)
@@ -1454,8 +1491,10 @@ else version (FreeBSD)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (NetBSD)
@@ -1476,8 +1515,10 @@ else version (NetBSD)
}
///
+ pragma(printf)
int snprintf(char* s, size_t n, const scope char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(char* s, size_t n, const scope char* format, va_list arg);
}
else version (OpenBSD)
@@ -1567,8 +1608,10 @@ else version (OpenBSD)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (DragonFlyBSD)
@@ -1599,7 +1642,9 @@ else version (DragonFlyBSD)
enum __SALC = 0x4000;
enum __SIGN = 0x8000;
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (Solaris)
@@ -1620,8 +1665,10 @@ else version (Solaris)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (CRuntime_Bionic)
@@ -1642,8 +1689,10 @@ else version (CRuntime_Bionic)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (CRuntime_Musl)
@@ -1663,8 +1712,10 @@ else version (CRuntime_Musl)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else version (CRuntime_UClibc)
@@ -1685,8 +1736,10 @@ else version (CRuntime_UClibc)
}
///
+ pragma(printf)
int snprintf(scope char* s, size_t n, scope const char* format, scope const ...);
///
+ pragma(printf)
int vsnprintf(scope char* s, size_t n, scope const char* format, va_list arg);
}
else
diff --git a/libphobos/libdruntime/core/stdc/stdlib.d b/libphobos/libdruntime/core/stdc/stdlib.d
index 7caef4c1339..5d69b880bc8 100644
--- a/libphobos/libdruntime/core/stdc/stdlib.d
+++ b/libphobos/libdruntime/core/stdc/stdlib.d
@@ -164,13 +164,13 @@ void* realloc(void* ptr, size_t size);
void free(void* ptr);
///
-void abort() @safe;
+noreturn abort() @safe;
///
-void exit(int status);
+noreturn exit(int status);
///
int atexit(void function() func);
///
-void _Exit(int status);
+noreturn _Exit(int status);
///
char* getenv(scope const char* name);
diff --git a/libphobos/libdruntime/core/stdc/tgmath.d b/libphobos/libdruntime/core/stdc/tgmath.d
index 4dd1b3ccc66..2ff1522fd81 100644
--- a/libphobos/libdruntime/core/stdc/tgmath.d
+++ b/libphobos/libdruntime/core/stdc/tgmath.d
@@ -32,12 +32,10 @@ version (NetBSD)
///
alias core.stdc.math.acosl acos;
- ///
- alias core.stdc.complex.cacos acos;
- ///
- alias core.stdc.complex.cacosf acos;
- ///
- alias core.stdc.complex.cacosl acos;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cacos acos;
+ deprecated alias core.stdc.complex.cacosf acos;
+ deprecated alias core.stdc.complex.cacosl acos;
///
alias core.stdc.math.asin asin;
@@ -46,12 +44,10 @@ version (NetBSD)
///
alias core.stdc.math.asinl asin;
- ///
- alias core.stdc.complex.casin asin;
- ///
- alias core.stdc.complex.casinf asin;
- ///
- alias core.stdc.complex.casinl asin;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.casin asin;
+ deprecated alias core.stdc.complex.casinf asin;
+ deprecated alias core.stdc.complex.casinl asin;
///
alias core.stdc.math.atan atan;
@@ -60,12 +56,10 @@ version (NetBSD)
///
alias core.stdc.math.atanl atan;
- ///
- alias core.stdc.complex.catan atan;
- ///
- alias core.stdc.complex.catanf atan;
- ///
- alias core.stdc.complex.catanl atan;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.catan atan;
+ deprecated alias core.stdc.complex.catanf atan;
+ deprecated alias core.stdc.complex.catanl atan;
///
alias core.stdc.math.atan2 atan2;
@@ -81,12 +75,10 @@ version (NetBSD)
///
alias core.stdc.math.cosl cos;
- ///
- alias core.stdc.complex.ccos cos;
- ///
- alias core.stdc.complex.ccosf cos;
- ///
- alias core.stdc.complex.ccosl cos;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ccos cos;
+ deprecated alias core.stdc.complex.ccosf cos;
+ deprecated alias core.stdc.complex.ccosl cos;
///
alias core.stdc.math.sin sin;
@@ -95,12 +87,10 @@ version (NetBSD)
///
alias core.stdc.math.sinl sin;
- ///
- alias core.stdc.complex.csin csin;
- ///
- alias core.stdc.complex.csinf csin;
- ///
- alias core.stdc.complex.csinl csin;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csin csin;
+ deprecated alias core.stdc.complex.csinf csin;
+ deprecated alias core.stdc.complex.csinl csin;
///
alias core.stdc.math.tan tan;
@@ -109,12 +99,10 @@ version (NetBSD)
///
alias core.stdc.math.tanl tan;
- ///
- alias core.stdc.complex.ctan tan;
- ///
- alias core.stdc.complex.ctanf tan;
- ///
- alias core.stdc.complex.ctanl tan;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ctan tan;
+ deprecated alias core.stdc.complex.ctanf tan;
+ deprecated alias core.stdc.complex.ctanl tan;
///
alias core.stdc.math.acosh acosh;
@@ -123,12 +111,10 @@ version (NetBSD)
///
alias core.stdc.math.acoshl acosh;
- ///
- alias core.stdc.complex.cacosh acosh;
- ///
- alias core.stdc.complex.cacoshf acosh;
- ///
- alias core.stdc.complex.cacoshl acosh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cacosh acosh;
+ deprecated alias core.stdc.complex.cacoshf acosh;
+ deprecated alias core.stdc.complex.cacoshl acosh;
///
alias core.stdc.math.asinh asinh;
@@ -137,12 +123,10 @@ version (NetBSD)
///
alias core.stdc.math.asinhl asinh;
- ///
- alias core.stdc.complex.casinh asinh;
- ///
- alias core.stdc.complex.casinhf asinh;
- ///
- alias core.stdc.complex.casinhl asinh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.casinh asinh;
+ deprecated alias core.stdc.complex.casinhf asinh;
+ deprecated alias core.stdc.complex.casinhl asinh;
///
alias core.stdc.math.atanh atanh;
@@ -151,12 +135,10 @@ version (NetBSD)
///
alias core.stdc.math.atanhl atanh;
- ///
- alias core.stdc.complex.catanh atanh;
- ///
- alias core.stdc.complex.catanhf atanh;
- ///
- alias core.stdc.complex.catanhl atanh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.catanh atanh;
+ deprecated alias core.stdc.complex.catanhf atanh;
+ deprecated alias core.stdc.complex.catanhl atanh;
///
alias core.stdc.math.cosh cosh;
@@ -165,12 +147,10 @@ version (NetBSD)
///
alias core.stdc.math.coshl cosh;
- ///
- alias core.stdc.complex.ccosh cosh;
- ///
- alias core.stdc.complex.ccoshf cosh;
- ///
- alias core.stdc.complex.ccoshl cosh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ccosh cosh;
+ deprecated alias core.stdc.complex.ccoshf cosh;
+ deprecated alias core.stdc.complex.ccoshl cosh;
///
alias core.stdc.math.sinh sinh;
@@ -179,12 +159,10 @@ version (NetBSD)
///
alias core.stdc.math.sinhl sinh;
- ///
- alias core.stdc.complex.csinh sinh;
- ///
- alias core.stdc.complex.csinhf sinh;
- ///
- alias core.stdc.complex.csinhl sinh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csinh sinh;
+ deprecated alias core.stdc.complex.csinhf sinh;
+ deprecated alias core.stdc.complex.csinhl sinh;
///
alias core.stdc.math.tanh tanh;
@@ -193,12 +171,10 @@ version (NetBSD)
///
alias core.stdc.math.tanhl tanh;
- ///
- alias core.stdc.complex.ctanh tanh;
- ///
- alias core.stdc.complex.ctanhf tanh;
- ///
- alias core.stdc.complex.ctanhl tanh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ctanh tanh;
+ deprecated alias core.stdc.complex.ctanhf tanh;
+ deprecated alias core.stdc.complex.ctanhl tanh;
///
alias core.stdc.math.exp exp;
@@ -207,12 +183,10 @@ version (NetBSD)
///
alias core.stdc.math.expl exp;
- ///
- alias core.stdc.complex.cexp exp;
- ///
- alias core.stdc.complex.cexpf exp;
- ///
- alias core.stdc.complex.cexpl exp;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cexp exp;
+ deprecated alias core.stdc.complex.cexpf exp;
+ deprecated alias core.stdc.complex.cexpl exp;
///
alias core.stdc.math.exp2 exp2;
@@ -256,12 +230,10 @@ version (NetBSD)
///
alias core.stdc.math.logl log;
- ///
- alias core.stdc.complex.clog log;
- ///
- alias core.stdc.complex.clogf log;
- ///
- alias core.stdc.complex.clogl log;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.clog log;
+ deprecated alias core.stdc.complex.clogf log;
+ deprecated alias core.stdc.complex.clogl log;
///
alias core.stdc.math.log10 log10;
@@ -325,12 +297,10 @@ version (NetBSD)
///
alias core.stdc.math.fabsl fabs;
- ///
- alias core.stdc.complex.cabs fabs;
- ///
- alias core.stdc.complex.cabsf fabs;
- ///
- alias core.stdc.complex.cabsl fabs;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cabs fabs;
+ deprecated alias core.stdc.complex.cabsf fabs;
+ deprecated alias core.stdc.complex.cabsl fabs;
///
alias core.stdc.math.hypot hypot;
@@ -346,12 +316,10 @@ version (NetBSD)
///
alias core.stdc.math.powl pow;
- ///
- alias core.stdc.complex.cpow pow;
- ///
- alias core.stdc.complex.cpowf pow;
- ///
- alias core.stdc.complex.cpowl pow;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cpow pow;
+ deprecated alias core.stdc.complex.cpowf pow;
+ deprecated alias core.stdc.complex.cpowl pow;
///
alias core.stdc.math.sqrt sqrt;
@@ -360,12 +328,10 @@ version (NetBSD)
///
alias core.stdc.math.sqrtl sqrt;
- ///
- alias core.stdc.complex.csqrt sqrt;
- ///
- alias core.stdc.complex.csqrtf sqrt;
- ///
- alias core.stdc.complex.csqrtl sqrt;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csqrt sqrt;
+ deprecated alias core.stdc.complex.csqrtf sqrt;
+ deprecated alias core.stdc.complex.csqrtl sqrt;
///
alias core.stdc.math.erf erf;
@@ -539,37 +505,23 @@ version (NetBSD)
///
alias core.stdc.math.fmal fma;
- ///
- alias core.stdc.complex.carg carg;
- ///
- alias core.stdc.complex.cargf carg;
- ///
- alias core.stdc.complex.cargl carg;
-
- ///
- alias core.stdc.complex.cimag cimag;
- ///
- alias core.stdc.complex.cimagf cimag;
- ///
- alias core.stdc.complex.cimagl cimag;
-
- ///
- alias core.stdc.complex.conj conj;
- ///
- alias core.stdc.complex.conjf conj;
- ///
- alias core.stdc.complex.conjl conj;
-
- ///
- alias core.stdc.complex.cproj cproj;
- ///
- alias core.stdc.complex.cprojf cproj;
- ///
- alias core.stdc.complex.cprojl cproj;
-
-// alias core.stdc.complex.creal creal;
-// alias core.stdc.complex.crealf creal;
-// alias core.stdc.complex.creall creal;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.carg carg;
+ deprecated alias core.stdc.complex.cargf carg;
+ deprecated alias core.stdc.complex.cargl carg;
+ deprecated alias core.stdc.complex.cimag cimag;
+ deprecated alias core.stdc.complex.cimagf cimag;
+ deprecated alias core.stdc.complex.cimagl cimag;
+ deprecated alias core.stdc.complex.conj conj;
+ deprecated alias core.stdc.complex.conjf conj;
+ deprecated alias core.stdc.complex.conjl conj;
+ deprecated alias core.stdc.complex.cproj cproj;
+ deprecated alias core.stdc.complex.cprojf cproj;
+ deprecated alias core.stdc.complex.cprojl cproj;
+
+// deprecated alias core.stdc.complex.creal creal;
+// deprecated alias core.stdc.complex.crealf creal;
+// deprecated alias core.stdc.complex.creall creal;
}
else version (OpenBSD)
{
@@ -580,12 +532,10 @@ else version (OpenBSD)
///
alias core.stdc.math.acosl acos;
- ///
- alias core.stdc.complex.cacos acos;
- ///
- alias core.stdc.complex.cacosf acos;
- ///
- alias core.stdc.complex.cacosl acos;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cacos acos;
+ deprecated alias core.stdc.complex.cacosf acos;
+ deprecated alias core.stdc.complex.cacosl acos;
///
alias core.stdc.math.asin asin;
@@ -594,12 +544,10 @@ else version (OpenBSD)
///
alias core.stdc.math.asinl asin;
- ///
- alias core.stdc.complex.casin asin;
- ///
- alias core.stdc.complex.casinf asin;
- ///
- alias core.stdc.complex.casinl asin;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.casin asin;
+ deprecated alias core.stdc.complex.casinf asin;
+ deprecated alias core.stdc.complex.casinl asin;
///
alias core.stdc.math.atan atan;
@@ -608,12 +556,10 @@ else version (OpenBSD)
///
alias core.stdc.math.atanl atan;
- ///
- alias core.stdc.complex.catan atan;
- ///
- alias core.stdc.complex.catanf atan;
- ///
- alias core.stdc.complex.catanl atan;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.catan atan;
+ deprecated alias core.stdc.complex.catanf atan;
+ deprecated alias core.stdc.complex.catanl atan;
///
alias core.stdc.math.atan2 atan2;
@@ -629,12 +575,10 @@ else version (OpenBSD)
///
alias core.stdc.math.cosl cos;
- ///
- alias core.stdc.complex.ccos cos;
- ///
- alias core.stdc.complex.ccosf cos;
- ///
- alias core.stdc.complex.ccosl cos;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ccos cos;
+ deprecated alias core.stdc.complex.ccosf cos;
+ deprecated alias core.stdc.complex.ccosl cos;
///
alias core.stdc.math.sin sin;
@@ -643,12 +587,10 @@ else version (OpenBSD)
///
alias core.stdc.math.sinl sin;
- ///
- alias core.stdc.complex.csin csin;
- ///
- alias core.stdc.complex.csinf csin;
- ///
- alias core.stdc.complex.csinl csin;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csin csin;
+ deprecated alias core.stdc.complex.csinf csin;
+ deprecated alias core.stdc.complex.csinl csin;
///
alias core.stdc.math.tan tan;
@@ -657,12 +599,10 @@ else version (OpenBSD)
///
alias core.stdc.math.tanl tan;
- ///
- alias core.stdc.complex.ctan tan;
- ///
- alias core.stdc.complex.ctanf tan;
- ///
- alias core.stdc.complex.ctanl tan;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ctan tan;
+ deprecated alias core.stdc.complex.ctanf tan;
+ deprecated alias core.stdc.complex.ctanl tan;
///
alias core.stdc.math.acosh acosh;
@@ -671,12 +611,10 @@ else version (OpenBSD)
///
alias core.stdc.math.acoshl acosh;
- ///
- alias core.stdc.complex.cacosh acosh;
- ///
- alias core.stdc.complex.cacoshf acosh;
- ///
- alias core.stdc.complex.cacoshl acosh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cacosh acosh;
+ deprecated alias core.stdc.complex.cacoshf acosh;
+ deprecated alias core.stdc.complex.cacoshl acosh;
///
alias core.stdc.math.asinh asinh;
@@ -685,12 +623,10 @@ else version (OpenBSD)
///
alias core.stdc.math.asinhl asinh;
- ///
- alias core.stdc.complex.casinh asinh;
- ///
- alias core.stdc.complex.casinhf asinh;
- ///
- alias core.stdc.complex.casinhl asinh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.casinh asinh;
+ deprecated alias core.stdc.complex.casinhf asinh;
+ deprecated alias core.stdc.complex.casinhl asinh;
///
alias core.stdc.math.atanh atanh;
@@ -699,12 +635,10 @@ else version (OpenBSD)
///
alias core.stdc.math.atanhl atanh;
- ///
- alias core.stdc.complex.catanh atanh;
- ///
- alias core.stdc.complex.catanhf atanh;
- ///
- alias core.stdc.complex.catanhl atanh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.catanh atanh;
+ deprecated alias core.stdc.complex.catanhf atanh;
+ deprecated alias core.stdc.complex.catanhl atanh;
///
alias core.stdc.math.cosh cosh;
@@ -713,12 +647,10 @@ else version (OpenBSD)
///
alias core.stdc.math.coshl cosh;
- ///
- alias core.stdc.complex.ccosh cosh;
- ///
- alias core.stdc.complex.ccoshf cosh;
- ///
- alias core.stdc.complex.ccoshl cosh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ccosh cosh;
+ deprecated alias core.stdc.complex.ccoshf cosh;
+ deprecated alias core.stdc.complex.ccoshl cosh;
///
alias core.stdc.math.sinh sinh;
@@ -727,12 +659,10 @@ else version (OpenBSD)
///
alias core.stdc.math.sinhl sinh;
- ///
- alias core.stdc.complex.csinh sinh;
- ///
- alias core.stdc.complex.csinhf sinh;
- ///
- alias core.stdc.complex.csinhl sinh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csinh sinh;
+ deprecated alias core.stdc.complex.csinhf sinh;
+ deprecated alias core.stdc.complex.csinhl sinh;
///
alias core.stdc.math.tanh tanh;
@@ -741,12 +671,10 @@ else version (OpenBSD)
///
alias core.stdc.math.tanhl tanh;
- ///
- alias core.stdc.complex.ctanh tanh;
- ///
- alias core.stdc.complex.ctanhf tanh;
- ///
- alias core.stdc.complex.ctanhl tanh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ctanh tanh;
+ deprecated alias core.stdc.complex.ctanhf tanh;
+ deprecated alias core.stdc.complex.ctanhl tanh;
///
alias core.stdc.math.exp exp;
@@ -755,12 +683,10 @@ else version (OpenBSD)
///
alias core.stdc.math.expl exp;
- ///
- alias core.stdc.complex.cexp exp;
- ///
- alias core.stdc.complex.cexpf exp;
- ///
- alias core.stdc.complex.cexpl exp;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cexp exp;
+ deprecated alias core.stdc.complex.cexpf exp;
+ deprecated alias core.stdc.complex.cexpl exp;
///
alias core.stdc.math.exp2 exp2;
@@ -804,12 +730,10 @@ else version (OpenBSD)
///
alias core.stdc.math.logl log;
- ///
- alias core.stdc.complex.clog log;
- ///
- alias core.stdc.complex.clogf log;
- ///
- alias core.stdc.complex.clogl log;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.clog log;
+ deprecated alias core.stdc.complex.clogf log;
+ deprecated alias core.stdc.complex.clogl log;
///
alias core.stdc.math.log10 log10;
@@ -874,12 +798,10 @@ else version (OpenBSD)
///
alias core.stdc.math.fabsl fabs;
- ///
- alias core.stdc.complex.cabs fabs;
- ///
- alias core.stdc.complex.cabsf fabs;
- ///
- alias core.stdc.complex.cabsl fabs;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cabs fabs;
+ deprecated alias core.stdc.complex.cabsf fabs;
+ deprecated alias core.stdc.complex.cabsl fabs;
///
alias core.stdc.math.hypot hypot;
@@ -895,12 +817,10 @@ else version (OpenBSD)
///
alias core.stdc.math.powl pow;
- ///
- alias core.stdc.complex.cpow pow;
- ///
- alias core.stdc.complex.cpowf pow;
- ///
- alias core.stdc.complex.cpowl pow;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cpow pow;
+ deprecated alias core.stdc.complex.cpowf pow;
+ deprecated alias core.stdc.complex.cpowl pow;
///
alias core.stdc.math.sqrt sqrt;
@@ -909,12 +829,10 @@ else version (OpenBSD)
///
alias core.stdc.math.sqrtl sqrt;
- ///
- alias core.stdc.complex.csqrt sqrt;
- ///
- alias core.stdc.complex.csqrtf sqrt;
- ///
- alias core.stdc.complex.csqrtl sqrt;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csqrt sqrt;
+ deprecated alias core.stdc.complex.csqrtf sqrt;
+ deprecated alias core.stdc.complex.csqrtl sqrt;
///
alias core.stdc.math.erf erf;
@@ -1077,37 +995,23 @@ else version (OpenBSD)
///
alias core.stdc.math.fmal fma;
- ///
- alias core.stdc.complex.carg carg;
- ///
- alias core.stdc.complex.cargf carg;
- ///
- alias core.stdc.complex.cargl carg;
-
- ///
- alias core.stdc.complex.cimag cimag;
- ///
- alias core.stdc.complex.cimagf cimag;
- ///
- alias core.stdc.complex.cimagl cimag;
-
- ///
- alias core.stdc.complex.conj conj;
- ///
- alias core.stdc.complex.conjf conj;
- ///
- alias core.stdc.complex.conjl conj;
-
- ///
- alias core.stdc.complex.cproj cproj;
- ///
- alias core.stdc.complex.cprojf cproj;
- ///
- alias core.stdc.complex.cprojl cproj;
-
-// alias core.stdc.complex.creal creal;
-// alias core.stdc.complex.crealf creal;
-// alias core.stdc.complex.creall creal;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.carg carg;
+ deprecated alias core.stdc.complex.cargf carg;
+ deprecated alias core.stdc.complex.cargl carg;
+ deprecated alias core.stdc.complex.cimag cimag;
+ deprecated alias core.stdc.complex.cimagf cimag;
+ deprecated alias core.stdc.complex.cimagl cimag;
+ deprecated alias core.stdc.complex.conj conj;
+ deprecated alias core.stdc.complex.conjf conj;
+ deprecated alias core.stdc.complex.conjl conj;
+ deprecated alias core.stdc.complex.cproj cproj;
+ deprecated alias core.stdc.complex.cprojf cproj;
+ deprecated alias core.stdc.complex.cprojl cproj;
+
+// deprecated alias core.stdc.complex.creal creal;
+// deprecated alias core.stdc.complex.crealf creal;
+// deprecated alias core.stdc.complex.creall creal;
}
else
{
@@ -1118,12 +1022,10 @@ else
///
alias core.stdc.math.acosl acos;
- ///
- alias core.stdc.complex.cacos acos;
- ///
- alias core.stdc.complex.cacosf acos;
- ///
- alias core.stdc.complex.cacosl acos;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cacos acos;
+ deprecated alias core.stdc.complex.cacosf acos;
+ deprecated alias core.stdc.complex.cacosl acos;
///
alias core.stdc.math.asin asin;
@@ -1132,12 +1034,10 @@ else
///
alias core.stdc.math.asinl asin;
- ///
- alias core.stdc.complex.casin asin;
- ///
- alias core.stdc.complex.casinf asin;
- ///
- alias core.stdc.complex.casinl asin;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.casin asin;
+ deprecated alias core.stdc.complex.casinf asin;
+ deprecated alias core.stdc.complex.casinl asin;
///
alias core.stdc.math.atan atan;
@@ -1146,12 +1046,10 @@ else
///
alias core.stdc.math.atanl atan;
- ///
- alias core.stdc.complex.catan atan;
- ///
- alias core.stdc.complex.catanf atan;
- ///
- alias core.stdc.complex.catanl atan;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.catan atan;
+ deprecated alias core.stdc.complex.catanf atan;
+ deprecated alias core.stdc.complex.catanl atan;
///
alias core.stdc.math.atan2 atan2;
@@ -1167,12 +1065,10 @@ else
///
alias core.stdc.math.cosl cos;
- ///
- alias core.stdc.complex.ccos cos;
- ///
- alias core.stdc.complex.ccosf cos;
- ///
- alias core.stdc.complex.ccosl cos;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ccos cos;
+ deprecated alias core.stdc.complex.ccosf cos;
+ deprecated alias core.stdc.complex.ccosl cos;
///
alias core.stdc.math.sin sin;
@@ -1181,12 +1077,10 @@ else
///
alias core.stdc.math.sinl sin;
- ///
- alias core.stdc.complex.csin csin;
- ///
- alias core.stdc.complex.csinf csin;
- ///
- alias core.stdc.complex.csinl csin;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csin csin;
+ deprecated alias core.stdc.complex.csinf csin;
+ deprecated alias core.stdc.complex.csinl csin;
///
alias core.stdc.math.tan tan;
@@ -1195,12 +1089,10 @@ else
///
alias core.stdc.math.tanl tan;
- ///
- alias core.stdc.complex.ctan tan;
- ///
- alias core.stdc.complex.ctanf tan;
- ///
- alias core.stdc.complex.ctanl tan;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ctan tan;
+ deprecated alias core.stdc.complex.ctanf tan;
+ deprecated alias core.stdc.complex.ctanl tan;
///
alias core.stdc.math.acosh acosh;
@@ -1209,12 +1101,10 @@ else
///
alias core.stdc.math.acoshl acosh;
- ///
- alias core.stdc.complex.cacosh acosh;
- ///
- alias core.stdc.complex.cacoshf acosh;
- ///
- alias core.stdc.complex.cacoshl acosh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cacosh acosh;
+ deprecated alias core.stdc.complex.cacoshf acosh;
+ deprecated alias core.stdc.complex.cacoshl acosh;
///
alias core.stdc.math.asinh asinh;
@@ -1223,12 +1113,10 @@ else
///
alias core.stdc.math.asinhl asinh;
- ///
- alias core.stdc.complex.casinh asinh;
- ///
- alias core.stdc.complex.casinhf asinh;
- ///
- alias core.stdc.complex.casinhl asinh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.casinh asinh;
+ deprecated alias core.stdc.complex.casinhf asinh;
+ deprecated alias core.stdc.complex.casinhl asinh;
///
alias core.stdc.math.atanh atanh;
@@ -1237,12 +1125,10 @@ else
///
alias core.stdc.math.atanhl atanh;
- ///
- alias core.stdc.complex.catanh atanh;
- ///
- alias core.stdc.complex.catanhf atanh;
- ///
- alias core.stdc.complex.catanhl atanh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.catanh atanh;
+ deprecated alias core.stdc.complex.catanhf atanh;
+ deprecated alias core.stdc.complex.catanhl atanh;
///
alias core.stdc.math.cosh cosh;
@@ -1251,12 +1137,10 @@ else
///
alias core.stdc.math.coshl cosh;
- ///
- alias core.stdc.complex.ccosh cosh;
- ///
- alias core.stdc.complex.ccoshf cosh;
- ///
- alias core.stdc.complex.ccoshl cosh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ccosh cosh;
+ deprecated alias core.stdc.complex.ccoshf cosh;
+ deprecated alias core.stdc.complex.ccoshl cosh;
///
alias core.stdc.math.sinh sinh;
@@ -1265,12 +1149,10 @@ else
///
alias core.stdc.math.sinhl sinh;
- ///
- alias core.stdc.complex.csinh sinh;
- ///
- alias core.stdc.complex.csinhf sinh;
- ///
- alias core.stdc.complex.csinhl sinh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csinh sinh;
+ deprecated alias core.stdc.complex.csinhf sinh;
+ deprecated alias core.stdc.complex.csinhl sinh;
///
alias core.stdc.math.tanh tanh;
@@ -1279,12 +1161,10 @@ else
///
alias core.stdc.math.tanhl tanh;
- ///
- alias core.stdc.complex.ctanh tanh;
- ///
- alias core.stdc.complex.ctanhf tanh;
- ///
- alias core.stdc.complex.ctanhl tanh;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.ctanh tanh;
+ deprecated alias core.stdc.complex.ctanhf tanh;
+ deprecated alias core.stdc.complex.ctanhl tanh;
///
alias core.stdc.math.exp exp;
@@ -1293,12 +1173,10 @@ else
///
alias core.stdc.math.expl exp;
- ///
- alias core.stdc.complex.cexp exp;
- ///
- alias core.stdc.complex.cexpf exp;
- ///
- alias core.stdc.complex.cexpl exp;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cexp exp;
+ deprecated alias core.stdc.complex.cexpf exp;
+ deprecated alias core.stdc.complex.cexpl exp;
///
alias core.stdc.math.exp2 exp2;
@@ -1342,12 +1220,10 @@ else
///
alias core.stdc.math.logl log;
- ///
- alias core.stdc.complex.clog log;
- ///
- alias core.stdc.complex.clogf log;
- ///
- alias core.stdc.complex.clogl log;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.clog log;
+ deprecated alias core.stdc.complex.clogf log;
+ deprecated alias core.stdc.complex.clogl log;
///
alias core.stdc.math.log10 log10;
@@ -1418,12 +1294,10 @@ else
alias core.stdc.math.fabsl fabs;
}
- ///
- alias core.stdc.complex.cabs fabs;
- ///
- alias core.stdc.complex.cabsf fabs;
- ///
- alias core.stdc.complex.cabsl fabs;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cabs fabs;
+ deprecated alias core.stdc.complex.cabsf fabs;
+ deprecated alias core.stdc.complex.cabsl fabs;
///
alias core.stdc.math.hypot hypot;
@@ -1439,12 +1313,10 @@ else
///
alias core.stdc.math.powl pow;
- ///
- alias core.stdc.complex.cpow pow;
- ///
- alias core.stdc.complex.cpowf pow;
- ///
- alias core.stdc.complex.cpowl pow;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.cpow pow;
+ deprecated alias core.stdc.complex.cpowf pow;
+ deprecated alias core.stdc.complex.cpowl pow;
///
alias core.stdc.math.sqrt sqrt;
@@ -1453,12 +1325,10 @@ else
///
alias core.stdc.math.sqrtl sqrt;
- ///
- alias core.stdc.complex.csqrt sqrt;
- ///
- alias core.stdc.complex.csqrtf sqrt;
- ///
- alias core.stdc.complex.csqrtl sqrt;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.csqrt sqrt;
+ deprecated alias core.stdc.complex.csqrtf sqrt;
+ deprecated alias core.stdc.complex.csqrtl sqrt;
///
alias core.stdc.math.erf erf;
@@ -1635,35 +1505,20 @@ else
///
alias core.stdc.math.fmal fma;
- ///
- alias core.stdc.complex.carg carg;
- ///
- alias core.stdc.complex.cargf carg;
- ///
- alias core.stdc.complex.cargl carg;
-
- ///
- alias core.stdc.complex.cimag cimag;
- ///
- alias core.stdc.complex.cimagf cimag;
- ///
- alias core.stdc.complex.cimagl cimag;
-
- ///
- alias core.stdc.complex.conj conj;
- ///
- alias core.stdc.complex.conjf conj;
- ///
- alias core.stdc.complex.conjl conj;
-
- ///
- alias core.stdc.complex.cproj cproj;
- ///
- alias core.stdc.complex.cprojf cproj;
- ///
- alias core.stdc.complex.cprojl cproj;
-
-// alias core.stdc.complex.creal creal;
-// alias core.stdc.complex.crealf creal;
-// alias core.stdc.complex.creall creal;
+ // @@@DEPRECATED_2.105@@@
+ deprecated alias core.stdc.complex.carg carg;
+ deprecated alias core.stdc.complex.cargf carg;
+ deprecated alias core.stdc.complex.cargl carg;
+ deprecated alias core.stdc.complex.cimag cimag;
+ deprecated alias core.stdc.complex.cimagf cimag;
+ deprecated alias core.stdc.complex.cimagl cimag;
+ deprecated alias core.stdc.complex.conj conj;
+ deprecated alias core.stdc.complex.conjf conj;
+ deprecated alias core.stdc.complex.conjl conj;
+ deprecated alias core.stdc.complex.cproj cproj;
+ deprecated alias core.stdc.complex.cprojf cproj;
+ deprecated alias core.stdc.complex.cprojl cproj;
+// deprecated alias core.stdc.complex.creal creal;
+// deprecated alias core.stdc.complex.crealf creal;
+// deprecated alias core.stdc.complex.creall creal;
}
diff --git a/libphobos/libdruntime/core/stdc/wchar_.d b/libphobos/libdruntime/core/stdc/wchar_.d
index eecc8ef918e..6da5618ada6 100644
--- a/libphobos/libdruntime/core/stdc/wchar_.d
+++ b/libphobos/libdruntime/core/stdc/wchar_.d
@@ -173,12 +173,13 @@ extern (D) @trusted
wint_t getwchar() { return fgetwc(stdin); }
///
wint_t putwchar(wchar_t c) { return fputwc(c,stdout); }
- ///
- wint_t getwc(FILE* stream) { return fgetwc(stream); }
- ///
- wint_t putwc(wchar_t c, FILE* stream) { return fputwc(c, stream); }
}
+///
+alias getwc = fgetwc;
+///
+alias putwc = fputwc;
+
// No unsafe pointer manipulation.
@trusted
{
diff --git a/libphobos/libdruntime/core/sys/darwin/fcntl.d b/libphobos/libdruntime/core/sys/darwin/fcntl.d
new file mode 100644
index 00000000000..47d895ad6cb
--- /dev/null
+++ b/libphobos/libdruntime/core/sys/darwin/fcntl.d
@@ -0,0 +1,20 @@
+module core.sys.darwin.fcntl;
+
+public import core.sys.posix.fcntl;
+
+version (OSX)
+ version = Darwin;
+else version (iOS)
+ version = Darwin;
+else version (TVOS)
+ version = Darwin;
+else version (WatchOS)
+ version = Darwin;
+
+version (Darwin):
+extern (C):
+nothrow:
+@nogc:
+@system:
+
+enum F_FULLFSYNC = 51;
diff --git a/libphobos/libdruntime/core/sys/linux/epoll.d b/libphobos/libdruntime/core/sys/linux/epoll.d
index 0c3aed98853..f5ff7dba0f8 100644
--- a/libphobos/libdruntime/core/sys/linux/epoll.d
+++ b/libphobos/libdruntime/core/sys/linux/epoll.d
@@ -10,6 +10,8 @@ module core.sys.linux.epoll;
version (linux):
+import core.sys.posix.signal : sigset_t;
+
extern (C):
@system:
@nogc:
@@ -52,16 +54,19 @@ enum
EPOLLHUP = 0x010,
EPOLLRDHUP = 0x2000, // since Linux 2.6.17
EPOLLEXCLUSIVE = 1u << 28, // since Linux 4.5
+ EPOLLWAKEUP = 1u << 29,
EPOLLONESHOT = 1u << 30,
EPOLLET = 1u << 31
}
-/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */
+/**
+ * Valid opcodes ( "op" parameter ) to issue to epoll_ctl().
+ */
enum
{
- EPOLL_CTL_ADD = 1, // Add a file descriptor to the interface.
- EPOLL_CTL_DEL = 2, // Remove a file descriptor from the interface.
- EPOLL_CTL_MOD = 3, // Change file descriptor epoll_event structure.
+ EPOLL_CTL_ADD = 1, /// Add a file descriptor to the interface.
+ EPOLL_CTL_DEL = 2, /// Remove a file descriptor from the interface.
+ EPOLL_CTL_MOD = 3, /// Change file descriptor epoll_event structure.
}
version (X86_Any)
@@ -142,7 +147,82 @@ union epoll_data_t
ulong u64;
}
+/**
+ * Creates an epoll instance.
+ *
+ * Params:
+ * size = a hint specifying the number of file descriptors to be associated
+ * with the new instance. T
+ * Returns: an fd for the new instance. The fd returned by epoll_create() should
+ * be closed with close().
+ * See_also: epoll_create1 (int flags)
+ */
int epoll_create (int size);
+
+/* Same as epoll_create but with an FLAGS parameter. The unused SIZE
+ parameter has been dropped. */
+
+/**
+ * Creates an epoll instance.
+ *
+ * Params:
+ * flags = a specified flag. If flags is 0, then, other than the fact that the
+ * obsolete size argument is dropped, epoll_create1() is the same as
+ * epoll_create().
+ * Returns: an fd for the new instance. The fd returned by epoll_create() should
+ * be closed with close().
+ * See_also: epoll_create (int size)
+ */
int epoll_create1 (int flags);
+
+/**
+ * Manipulate an epoll instance
+ *
+ * Params:
+ * epfd = an epoll file descriptor instance
+ * op = one of the EPOLL_CTL_* constants
+ * fd = target file descriptor of the operation
+ * event = describes which events the caller is interested in and any
+ * associated user dat
+ * Returns: 0 in case of success, -1 in case of error ( the "errno" variable
+ * will contain the specific error code )
+ */
int epoll_ctl (int epfd, int op, int fd, epoll_event *event);
+
+
+/**
+ * Wait for events on an epoll instance.
+ *
+ *
+ * Params:
+ * epfd = an epoll file descriptor instance
+ * events = a buffer that will contain triggered events
+ * maxevents = the maximum number of events to be returned ( usually size of
+ * "events" )
+ * timeout = specifies the maximum wait time in milliseconds (-1 == infinite)
+ *
+ * Returns: the number of triggered events returned in "events" buffer. Or -1 in
+ * case of error with the "errno" variable set to the specific error
+ * code.
+ */
int epoll_wait (int epfd, epoll_event *events, int maxevents, int timeout);
+
+/**
+ * Wait for events on an epoll instance
+ *
+ *
+ * Params:
+ * epfd = an epoll file descriptor instance
+ * events = a buffer that will contain triggered events
+ * maxevents = the maximum number of events to be returned ( usually size of
+ * "events" )
+ * timeout = specifies the maximum wait time in milliseconds (-1 == infinite)
+ * ss = a signal set. May be specified as `null`, in which case epoll_pwait() is
+ * equivalent to epoll_wait().
+ *
+ * Returns: the number of triggered events returned in "events" buffer. Or -1 in
+ * case of error with the "errno" variable set to the specific error
+ * code.
+ */
+int epoll_pwait (int epfd, epoll_event *events, int maxevents, int timeout,
+ const sigset_t *ss);
diff --git a/libphobos/libdruntime/core/sys/openbsd/string.d b/libphobos/libdruntime/core/sys/openbsd/string.d
index 8d35b9c9c12..cb978c8249b 100644
--- a/libphobos/libdruntime/core/sys/openbsd/string.d
+++ b/libphobos/libdruntime/core/sys/openbsd/string.d
@@ -18,4 +18,6 @@ nothrow:
static if (__BSD_VISIBLE)
{
pure void* memmem(return const void* haystack, size_t haystacklen, scope const void* needle, size_t needlelen);
+ 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/unistd.d b/libphobos/libdruntime/core/sys/openbsd/unistd.d
new file mode 100644
index 00000000000..ddd102cdeae
--- /dev/null
+++ b/libphobos/libdruntime/core/sys/openbsd/unistd.d
@@ -0,0 +1,17 @@
+/**
+ * D header file for OpenBSD unistd.h.
+ *
+ * Copyright: Copyright © 2021, The D Language Foundation
+ * License: <a href="http://www.boost.org/LICENSE_1_0.txt">Boost License 1.0</a>.
+ * Authors: Brian Callahan
+ */
+module core.sys.openbsd.unistd;
+public import core.sys.posix.unistd;
+
+version (OpenBSD):
+extern (C):
+nothrow:
+@nogc:
+
+int pledge(const scope char*, const scope char*);
+int unveil(const scope char*, const scope char*);
diff --git a/libphobos/libdruntime/core/sys/posix/config.d b/libphobos/libdruntime/core/sys/posix/config.d
index c02debffadd..3b575fa5b48 100644
--- a/libphobos/libdruntime/core/sys/posix/config.d
+++ b/libphobos/libdruntime/core/sys/posix/config.d
@@ -117,6 +117,7 @@ else version (CRuntime_UClibc)
else version (CRuntime_Bionic)
{
enum _GNU_SOURCE = false;
+ enum __USE_FILE_OFFSET64 = false; // see https://android.googlesource.com/platform/bionic/+/master/docs/32-bit-abi.md
enum __USE_GNU = _GNU_SOURCE;
version (D_LP64)
diff --git a/libphobos/libdruntime/core/sys/posix/dlfcn.d b/libphobos/libdruntime/core/sys/posix/dlfcn.d
index e97c7ea3960..2477e26dc53 100644
--- a/libphobos/libdruntime/core/sys/posix/dlfcn.d
+++ b/libphobos/libdruntime/core/sys/posix/dlfcn.d
@@ -139,7 +139,7 @@ else version (Darwin)
char* dlerror();
void* dlopen(const scope char*, int);
void* dlsym(void*, const scope char*);
- int dladdr(void* addr, Dl_info* info);
+ int dladdr(scope const void* addr, Dl_info* info);
struct Dl_info
{
@@ -294,6 +294,15 @@ else version (CRuntime_Musl)
const(char)* dlerror();
void* dlopen(const scope char*, int);
void* dlsym(void*, const scope char*);
+
+ int dladdr(scope const void *addr, Dl_info *info);
+ struct Dl_info
+ {
+ const(char)* dli_fname;
+ void* dli_fbase;
+ const(char)* dli_sname;
+ void* dli_saddr;
+ }
}
else version (CRuntime_UClibc)
{
diff --git a/libphobos/libdruntime/core/sys/posix/signal.d b/libphobos/libdruntime/core/sys/posix/signal.d
index 44f45f2e0c3..0dce8c53f31 100644
--- a/libphobos/libdruntime/core/sys/posix/signal.d
+++ b/libphobos/libdruntime/core/sys/posix/signal.d
@@ -3503,7 +3503,7 @@ struct sigevent
pthread_attr_t* sigev_notify_attributes;
}
-int sigqueue(pid_t, int, in sigval);
+int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
*/
@@ -3543,7 +3543,7 @@ version (CRuntime_Glibc)
} _sigev_un_t _sigev_un;
}
- int sigqueue(pid_t, int, in sigval);
+ int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
}
@@ -3566,7 +3566,7 @@ else version (FreeBSD)
}
}
- int sigqueue(pid_t, int, in sigval);
+ int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
}
@@ -3581,7 +3581,7 @@ else version (NetBSD)
void /* pthread_attr_t */*sigev_notify_attributes;
}
- int sigqueue(pid_t, int, in sigval);
+ int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
}
@@ -3613,7 +3613,7 @@ else version (DragonFlyBSD)
void function(_sigval_t) sigev_notify_function;
}
- int sigqueue(pid_t, int, in sigval);
+ int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
}
@@ -3640,7 +3640,7 @@ else version (Solaris)
int __sigev_pad2;
}
- int sigqueue(pid_t, int, in sigval);
+ int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
}
@@ -3717,7 +3717,7 @@ else version (CRuntime_UClibc)
@property void function(sigval) sigev_notify_function(ref sigevent _sigevent) { return _sigevent._sigev_un._sigev_thread._function; }
@property void* sigev_notify_attributes(ref sigevent _sigevent) { return _sigevent._sigev_un._sigev_thread._attribute; }
- int sigqueue(pid_t, int, in sigval);
+ int sigqueue(pid_t, int, const sigval);
int sigtimedwait(const scope sigset_t*, siginfo_t*, const scope timespec*);
int sigwaitinfo(const scope sigset_t*, siginfo_t*);
}
diff --git a/libphobos/libdruntime/core/sys/posix/unistd.d b/libphobos/libdruntime/core/sys/posix/unistd.d
index a691884cb2e..d996556fca0 100644
--- a/libphobos/libdruntime/core/sys/posix/unistd.d
+++ b/libphobos/libdruntime/core/sys/posix/unistd.d
@@ -2722,3 +2722,51 @@ else version (CRuntime_UClibc)
int truncate(const scope char*, off_t);
}
}
+
+// Non-standard definition to access user process environment
+version (CRuntime_Glibc)
+{
+ extern __gshared const char** environ;
+}
+else version (Darwin)
+{
+ extern (D) @property const(char**) environ()()
+ {
+ pragma (inline, true);
+ import core.sys.darwin.crt_externs : _NSGetEnviron;
+ return *_NSGetEnviron();
+ }
+}
+else version (FreeBSD)
+{
+ extern __gshared const char** environ;
+}
+else version (NetBSD)
+{
+ extern __gshared const char** environ;
+}
+else version (OpenBSD)
+{
+ extern __gshared const char** environ;
+}
+else version (DragonFlyBSD)
+{
+ extern __gshared const char** environ;
+}
+else version (CRuntime_Bionic)
+{
+ extern __gshared const char** environ;
+}
+else version (CRuntime_Musl)
+{
+ extern __gshared const char** environ;
+}
+else version (Solaris)
+{
+ extern __gshared const char** environ;
+}
+else version (CRuntime_UClibc)
+{
+ extern __gshared const char** __environ;
+ alias environ = __environ;
+}
diff --git a/libphobos/libdruntime/core/sys/windows/com.d b/libphobos/libdruntime/core/sys/windows/com.d
index 90a294343fc..88007adb141 100644
--- a/libphobos/libdruntime/core/sys/windows/com.d
+++ b/libphobos/libdruntime/core/sys/windows/com.d
@@ -39,16 +39,16 @@ public import core.sys.windows.winerror :
RPC_E_CHANGED_MODE;
public import core.sys.windows.wtypes :
- OLECHAR, LPOLESTR, LPCOLESTR;
-
-alias CLSCTX_INPROC_SERVER = core.sys.windows.wtypes.CLSCTX.CLSCTX_INPROC_SERVER ;
-alias CLSCTX_INPROC_HANDLER = core.sys.windows.wtypes.CLSCTX.CLSCTX_INPROC_HANDLER ;
-alias CLSCTX_LOCAL_SERVER = core.sys.windows.wtypes.CLSCTX.CLSCTX_LOCAL_SERVER ;
-alias CLSCTX_INPROC_SERVER16 = core.sys.windows.wtypes.CLSCTX.CLSCTX_INPROC_SERVER16 ;
-alias CLSCTX_REMOTE_SERVER = core.sys.windows.wtypes.CLSCTX.CLSCTX_REMOTE_SERVER ;
-alias CLSCTX_INPROC_HANDLER16 = core.sys.windows.wtypes.CLSCTX.CLSCTX_INPROC_HANDLER16 ;
-alias CLSCTX_INPROC_SERVERX86 = core.sys.windows.wtypes.CLSCTX.CLSCTX_INPROC_SERVERX86 ;
-alias CLSCTX_INPROC_HANDLERX86 = core.sys.windows.wtypes.CLSCTX.CLSCTX_INPROC_HANDLERX86;
+ CLSCTX, OLECHAR, LPOLESTR, LPCOLESTR;
+
+alias CLSCTX_INPROC_SERVER = CLSCTX.CLSCTX_INPROC_SERVER ;
+alias CLSCTX_INPROC_HANDLER = CLSCTX.CLSCTX_INPROC_HANDLER ;
+alias CLSCTX_LOCAL_SERVER = CLSCTX.CLSCTX_LOCAL_SERVER ;
+alias CLSCTX_INPROC_SERVER16 = CLSCTX.CLSCTX_INPROC_SERVER16 ;
+alias CLSCTX_REMOTE_SERVER = CLSCTX.CLSCTX_REMOTE_SERVER ;
+alias CLSCTX_INPROC_HANDLER16 = CLSCTX.CLSCTX_INPROC_HANDLER16 ;
+alias CLSCTX_INPROC_SERVERX86 = CLSCTX.CLSCTX_INPROC_SERVERX86 ;
+alias CLSCTX_INPROC_HANDLERX86 = CLSCTX.CLSCTX_INPROC_HANDLERX86;
alias COINIT_APARTMENTTHREADED = COINIT.COINIT_APARTMENTTHREADED;
alias COINIT_MULTITHREADED = COINIT.COINIT_MULTITHREADED ;
diff --git a/libphobos/libdruntime/core/sys/windows/dll.d b/libphobos/libdruntime/core/sys/windows/dll.d
index 9f36ac389a6..3df0d7fd41b 100644
--- a/libphobos/libdruntime/core/sys/windows/dll.d
+++ b/libphobos/libdruntime/core/sys/windows/dll.d
@@ -31,17 +31,7 @@ public import core.sys.windows.threadaux;
// not access tls_array[tls_index] as needed for thread local _tlsstart and _tlsend
extern (C)
{
- version (MinGW)
- {
- extern __gshared void* _tls_start;
- extern __gshared void* _tls_end;
- extern __gshared void* __xl_a;
-
- alias _tls_start _tlsstart;
- alias _tls_end _tlsend;
- alias __xl_a _tls_callbacks_a;
- }
- else version (Win32)
+ version (Win32)
{
version (CRuntime_DigitalMars)
{
diff --git a/libphobos/libdruntime/core/sys/windows/stdc/malloc.d b/libphobos/libdruntime/core/sys/windows/stdc/malloc.d
new file mode 100644
index 00000000000..f52ba37f27e
--- /dev/null
+++ b/libphobos/libdruntime/core/sys/windows/stdc/malloc.d
@@ -0,0 +1,26 @@
+/**
+ * D header file for Windows malloc.h.
+ *
+ * Translated from MinGW Windows headers
+ *
+ * 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)
+ */
+module core.sys.windows.stdc.malloc;
+version (CRuntime_Microsoft):
+extern (C):
+@system:
+nothrow:
+@nogc:
+
+export void* _recalloc(void*, size_t, size_t);
+
+export void _aligned_free(void*);
+export void* _aligned_malloc(size_t, size_t);
+
+export void* _aligned_offset_malloc(size_t, size_t, size_t);
+export void* _aligned_realloc(void*, size_t, size_t);
+export void* _aligned_recalloc(void*, size_t, size_t, size_t);
+export void* _aligned_offset_realloc(void*, size_t, size_t, size_t);
+export void* _aligned_offset_recalloc(void*, size_t, size_t, size_t, size_t);
diff --git a/libphobos/libdruntime/gc/impl/conservative/gc.d b/libphobos/libdruntime/gc/impl/conservative/gc.d
index b7bb9b0c36f..300a32ad2b0 100644
--- a/libphobos/libdruntime/gc/impl/conservative/gc.d
+++ b/libphobos/libdruntime/gc/impl/conservative/gc.d
@@ -76,7 +76,7 @@ debug(PRINTF_TO_FILE)
gcStartTick = MonoTime.currTime;
immutable timeElapsed = MonoTime.currTime - gcStartTick;
immutable secondsAsDouble = timeElapsed.total!"hnsecs" / cast(double)convert!("seconds", "hnsecs")(1);
- len = fprintf(gcx_fh, "%10.6lf: ", secondsAsDouble);
+ len = fprintf(gcx_fh, "%10.6f: ", secondsAsDouble);
}
len += fprintf(gcx_fh, fmt, args);
fflush(gcx_fh);
@@ -159,7 +159,7 @@ debug (LOGGING)
printf(" p = %p, size = %zd, parent = %p ", p, size, parent);
if (file)
{
- printf("%s(%u)", file, line);
+ printf("%s(%u)", file, cast(uint)line);
}
printf("\n");
}
diff --git a/libphobos/libdruntime/object.d b/libphobos/libdruntime/object.d
index 04d54575a5b..c05643bf36d 100644
--- a/libphobos/libdruntime/object.d
+++ b/libphobos/libdruntime/object.d
@@ -19,10 +19,11 @@ private
alias size_t = typeof(int.sizeof);
alias ptrdiff_t = typeof(cast(void*)0 - cast(void*)0);
-alias sizediff_t = ptrdiff_t; //For backwards compatibility only.
+alias sizediff_t = ptrdiff_t; // For backwards compatibility only.
+alias noreturn = typeof(*null); /// bottom type
-alias hash_t = size_t; //For backwards compatibility only.
-alias equals_t = bool; //For backwards compatibility only.
+alias hash_t = size_t; // For backwards compatibility only.
+alias equals_t = bool; // For backwards compatibility only.
alias string = immutable(char)[];
alias wstring = immutable(wchar)[];
diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE
index 6de04b453ff..4f6a168350b 100644
--- a/libphobos/src/MERGE
+++ b/libphobos/src/MERGE
@@ -1,4 +1,4 @@
-9d575282edeccecbc061e615bf2486fd07e8c084
+f89dc217a680fa1a83f2999fea04b7c562f705ee
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.
diff --git a/libphobos/src/Makefile.am b/libphobos/src/Makefile.am
index 0dc2a2625a9..2dedc740f16 100644
--- a/libphobos/src/Makefile.am
+++ b/libphobos/src/Makefile.am
@@ -135,11 +135,11 @@ PHOBOS_DSOURCES = etc/c/curl.d etc/c/sqlite3.d etc/c/zlib.d \
std/regex/internal/backtracking.d std/regex/internal/generator.d \
std/regex/internal/ir.d std/regex/internal/kickstart.d \
std/regex/internal/parser.d std/regex/internal/tests.d \
- std/regex/internal/thompson.d std/regex/package.d std/signals.d \
- std/socket.d std/stdint.d std/stdio.d std/string.d std/system.d \
- std/traits.d std/typecons.d std/typetuple.d std/uni.d std/uri.d \
- std/utf.d std/uuid.d std/variant.d std/windows/charset.d \
- std/windows/registry.d std/windows/syserror.d std/xml.d std/zip.d \
- std/zlib.d
+ std/regex/internal/tests2.d std/regex/internal/thompson.d \
+ std/regex/package.d std/signals.d std/socket.d std/stdint.d \
+ std/stdio.d std/string.d std/system.d std/traits.d std/typecons.d \
+ std/typetuple.d std/uni.d std/uri.d std/utf.d std/uuid.d std/variant.d \
+ std/windows/charset.d std/windows/registry.d std/windows/syserror.d \
+ std/xml.d std/zip.d std/zlib.d
endif
diff --git a/libphobos/src/Makefile.in b/libphobos/src/Makefile.in
index 33453517153..9e410e5b642 100644
--- a/libphobos/src/Makefile.in
+++ b/libphobos/src/Makefile.in
@@ -249,6 +249,7 @@ am__dirstamp = $(am__leading_dot)dirstamp
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/kickstart.lo \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/parser.lo \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/tests.lo \
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/tests2.lo \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/thompson.lo \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/package.lo \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/signals.lo std/socket.lo \
@@ -572,12 +573,12 @@ libgphobos_la_LINK = $(LIBTOOL) --tag=D $(libgphobos_la_LIBTOOLFLAGS) \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/backtracking.d std/regex/internal/generator.d \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/ir.d std/regex/internal/kickstart.d \
@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/parser.d std/regex/internal/tests.d \
-@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/thompson.d std/regex/package.d std/signals.d \
-@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/socket.d std/stdint.d std/stdio.d std/string.d std/system.d \
-@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/traits.d std/typecons.d std/typetuple.d std/uni.d std/uri.d \
-@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/utf.d std/uuid.d std/variant.d std/windows/charset.d \
-@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/windows/registry.d std/windows/syserror.d std/xml.d std/zip.d \
-@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/zlib.d
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/internal/tests2.d std/regex/internal/thompson.d \
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/regex/package.d std/signals.d std/socket.d std/stdint.d \
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/stdio.d std/string.d std/system.d std/traits.d std/typecons.d \
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/typetuple.d std/uni.d std/uri.d std/utf.d std/uuid.d std/variant.d \
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/windows/charset.d std/windows/registry.d std/windows/syserror.d \
+@ENABLE_LIBDRUNTIME_ONLY_FALSE@ std/xml.d std/zip.d std/zlib.d
# Source file definitions. Boring stuff, auto-generated with
@@ -851,6 +852,7 @@ std/regex/internal/ir.lo: std/regex/internal/$(am__dirstamp)
std/regex/internal/kickstart.lo: std/regex/internal/$(am__dirstamp)
std/regex/internal/parser.lo: std/regex/internal/$(am__dirstamp)
std/regex/internal/tests.lo: std/regex/internal/$(am__dirstamp)
+std/regex/internal/tests2.lo: std/regex/internal/$(am__dirstamp)
std/regex/internal/thompson.lo: std/regex/internal/$(am__dirstamp)
std/regex/$(am__dirstamp):
@$(MKDIR_P) std/regex
diff --git a/libphobos/src/std/algorithm/iteration.d b/libphobos/src/std/algorithm/iteration.d
index c77792d3024..19cfb77053d 100644
--- a/libphobos/src/std/algorithm/iteration.d
+++ b/libphobos/src/std/algorithm/iteration.d
@@ -769,9 +769,9 @@ private struct MapResult(alias fun, Range)
string s1 = "hello world!";
dstring s2 = "日本語";
dstring s3 = "hello world!"d;
- auto ms1 = map!(std.ascii.toUpper)(s1);
- auto ms2 = map!(std.ascii.toUpper)(s2);
- auto ms3 = map!(std.ascii.toUpper)(s3);
+ auto ms1 = map!(toUpper)(s1);
+ auto ms2 = map!(toUpper)(s2);
+ auto ms3 = map!(toUpper)(s3);
static assert(!is(ms1[0])); //narrow strings can't be indexed
assert(ms2[0] == '日');
assert(ms3[0] == 'H');
@@ -4450,7 +4450,7 @@ private struct SplitterResult(alias isTerminator, Range)
["là", "dove", "terminava", "quella", "valle"]
));
assert(equal(
- splitter!(std.uni.isWhite)("là dove terminava quella valle"),
+ splitter!(isWhite)("là dove terminava quella valle"),
["là", "dove", "terminava", "quella", "valle"]
));
assert(equal(splitter!"a=='本'"("日本語"), ["日", "語"]));
diff --git a/libphobos/src/std/algorithm/searching.d b/libphobos/src/std/algorithm/searching.d
index 6468a87469c..09073f6d1aa 100644
--- a/libphobos/src/std/algorithm/searching.d
+++ b/libphobos/src/std/algorithm/searching.d
@@ -959,8 +959,8 @@ if (isInputRange!R &&
import std.ascii : isDigit;
import std.uni : isWhite;
- assert(countUntil!(std.uni.isWhite)("hello world") == 5);
- assert(countUntil!(std.ascii.isDigit)("hello world") == -1);
+ assert(countUntil!(isWhite)("hello world") == 5);
+ assert(countUntil!(isDigit)("hello world") == -1);
assert(countUntil!"a > 20"([0, 7, 12, 22, 9]) == 3);
}
diff --git a/libphobos/src/std/container/rbtree.d b/libphobos/src/std/container/rbtree.d
index 861da5e09fb..5e31ac2989b 100644
--- a/libphobos/src/std/container/rbtree.d
+++ b/libphobos/src/std/container/rbtree.d
@@ -1814,8 +1814,8 @@ assert(equal(rbt[], [5]));
test!byte();
}
-import std.range.primitives : isInputRange, isSomeString, ElementType;
-import std.traits : isArray;
+import std.range.primitives : isInputRange, ElementType;
+import std.traits : isArray, isSomeString;
/++
Convenience function for creating a $(D RedBlackTree!E) from a list of
diff --git a/libphobos/src/std/conv.d b/libphobos/src/std/conv.d
index 31cc6517173..3560d134f58 100644
--- a/libphobos/src/std/conv.d
+++ b/libphobos/src/std/conv.d
@@ -3967,7 +3967,7 @@ if (isOctalLiteral(num))
/// Ditto
template octal(alias decimalInteger)
-if (isIntegral!(typeof(decimalInteger)))
+if (is(typeof(decimalInteger)) && isIntegral!(typeof(decimalInteger)))
{
enum octal = octal!(typeof(decimalInteger))(to!string(decimalInteger));
}
diff --git a/libphobos/src/std/datetime/systime.d b/libphobos/src/std/datetime/systime.d
index b2291910616..913d360c655 100644
--- a/libphobos/src/std/datetime/systime.d
+++ b/libphobos/src/std/datetime/systime.d
@@ -9569,7 +9569,7 @@ afterMon: stripAndCheckLen(value[3 .. value.length], "1200:00A".length);
}
// year
- auto found = value[2 .. value.length].find!(not!(std.ascii.isDigit))();
+ auto found = value[2 .. value.length].find!(not!(isDigit))();
size_t yearLen = value.length - found.length;
if (found.length == 0)
throw new DateTimeException("Invalid year");
@@ -9659,7 +9659,7 @@ afterMon: stripAndCheckLen(value[3 .. value.length], "1200:00A".length);
case "J": case "j": throw new DateTimeException("Invalid timezone");
default:
{
- if (all!(std.ascii.isAlpha)(value[0 .. tzLen]))
+ if (all!(isAlpha)(value[0 .. tzLen]))
{
tz = new immutable SimpleTimeZone(Duration.zero);
break;
diff --git a/libphobos/src/std/experimental/logger/nulllogger.d b/libphobos/src/std/experimental/logger/nulllogger.d
index fa511be2b3f..0c55377d0f9 100644
--- a/libphobos/src/std/experimental/logger/nulllogger.d
+++ b/libphobos/src/std/experimental/logger/nulllogger.d
@@ -31,7 +31,7 @@ class NullLogger : Logger
///
@safe unittest
{
- import std.experimental.logger.nulllogger : LogLevel;
+ import std.experimental.logger.core : LogLevel;
auto nl1 = new NullLogger(LogLevel.all);
nl1.info("You will never read this.");
diff --git a/libphobos/src/std/experimental/typecons.d b/libphobos/src/std/experimental/typecons.d
index 6906f05a4a8..07eed8fad69 100644
--- a/libphobos/src/std/experimental/typecons.d
+++ b/libphobos/src/std/experimental/typecons.d
@@ -23,8 +23,7 @@ module std.experimental.typecons;
import std.meta; // : AliasSeq, allSatisfy;
import std.traits;
-import std.typecons : Tuple, tuple, Bind, DerivedFunctionType,
- isImplicitlyConvertible, mixinAll, staticIota,
+import std.typecons : Tuple, tuple, Bind, DerivedFunctionType, mixinAll, staticIota,
GetOverloadedMethods;
private
@@ -113,7 +112,8 @@ if (Targets.length >= 1 && allSatisfy!(isMutable, Targets))
else
{
enum foundFunc = findCovariantFunction!(TargetMembers[i], Source, SourceMembers);
- debug
+ version (unittest) {}
+ else debug
{
static if (foundFunc == -1)
pragma(msg, "Could not locate matching function for: ",
diff --git a/libphobos/src/std/file.d b/libphobos/src/std/file.d
index 13a3db0ff66..99530cbbeb0 100644
--- a/libphobos/src/std/file.d
+++ b/libphobos/src/std/file.d
@@ -2301,7 +2301,7 @@ if (isConvertibleToString!R)
@safe unittest
{
- import std.path : mkdir;
+ import std.file : mkdir;
static assert(__traits(compiles, mkdir(TestAliasedString(null))));
}
@@ -4112,7 +4112,8 @@ auto dirEntries(string path, SpanMode mode, bool followSymlink = true)
import std.algorithm.searching : startsWith;
import std.array : array;
import std.conv : to;
- import std.path : dirEntries, buildPath, absolutePath;
+ import std.path : buildPath, absolutePath;
+ import std.file : dirEntries;
import std.process : thisProcessID;
import std.range.primitives : walkLength;
diff --git a/libphobos/src/std/format.d b/libphobos/src/std/format.d
index 64b1bd30e2c..17e5906baf7 100644
--- a/libphobos/src/std/format.d
+++ b/libphobos/src/std/format.d
@@ -5199,7 +5199,7 @@ body
}
debug (unformatRange) printf("\t");
debug (unformatRange) if (!input.empty) printf("input.front = %c, ", input.front);
- debug (unformatRange) printf("cont = %.*s\n", cont);
+ debug (unformatRange) printf("cont = %.*s\n", cast(int) cont.length, cont.ptr);
bool checkEnd()
{
@@ -5246,7 +5246,7 @@ body
auto sep = spec.sep !is null ? spec.sep
: fmt.trailing;
debug (unformatRange) {
- if (!sep.empty && !input.empty) printf("-> %c, sep = %.*s\n", input.front, sep);
+ if (!sep.empty && !input.empty) printf("-> %c, sep = %.*s\n", input.front, cast(int) sep.length, sep.ptr);
else printf("\n");
}
diff --git a/libphobos/src/std/internal/math/biguintcore.d b/libphobos/src/std/internal/math/biguintcore.d
index f5cd769e7f2..6fc2d16734f 100644
--- a/libphobos/src/std/internal/math/biguintcore.d
+++ b/libphobos/src/std/internal/math/biguintcore.d
@@ -2503,13 +2503,13 @@ pure nothrow
void printBiguint(const uint [] data)
{
char [] buff = biguintToHex(new char[data.length*9], data, '_');
- printf("%.*s\n", buff.length, buff.ptr);
+ printf("%.*s\n", cast(int) buff.length, buff.ptr);
}
void printDecimalBigUint(BigUint data)
{
auto str = data.toDecimalString(0);
- printf("%.*s\n", str.length, str.ptr);
+ printf("%.*s\n", cast(int) str.length, str.ptr);
}
uint [] a, b;
diff --git a/libphobos/src/std/math.d b/libphobos/src/std/math.d
index ff368b79f9d..336c11a55e2 100644
--- a/libphobos/src/std/math.d
+++ b/libphobos/src/std/math.d
@@ -263,8 +263,8 @@ version (unittest)
alias real_t = double;
else
alias real_t = real;
- ix = sprintf(bufx.ptr, "%.*Lg", ndigits, cast(real_t) x);
- iy = sprintf(bufy.ptr, "%.*Lg", ndigits, cast(real_t) y);
+ ix = sprintf(bufx.ptr, is(real_t == real) ? "%.*Lg" : "%.*g", ndigits, cast(real_t) x);
+ iy = sprintf(bufy.ptr, is(real_t == real) ? "%.*Lg" : "%.*g", ndigits, cast(real_t) y);
assert(ix < bufx.length && ix > 0);
assert(ix < bufy.length && ix > 0);
diff --git a/libphobos/src/std/parallelism.d b/libphobos/src/std/parallelism.d
index 43a1ba59527..61d5cea55f9 100644
--- a/libphobos/src/std/parallelism.d
+++ b/libphobos/src/std/parallelism.d
@@ -4000,7 +4000,7 @@ version (unittest)
import std.array : split;
import std.conv : text;
import std.exception : assertThrown;
- import std.math : approxEqual, sqrt, log;
+ import std.math : approxEqual, sqrt, log, abs;
import std.range : indexed, iota, join;
import std.typecons : Tuple, tuple;
@@ -4329,7 +4329,7 @@ version (unittest)
assert(equal(iota(1_000_000), bufTrickTest));
- auto myTask = task!(std.math.abs)(-1);
+ auto myTask = task!(abs)(-1);
taskPool.put(myTask);
assert(myTask.spinForce == 1);
diff --git a/libphobos/src/std/range/package.d b/libphobos/src/std/range/package.d
index 13601cb9da9..deedb689974 100644
--- a/libphobos/src/std/range/package.d
+++ b/libphobos/src/std/range/package.d
@@ -11379,7 +11379,6 @@ if (isInputRange!R && isIntegral!(ElementType!R))
bw.popFront();
assert(bw[2 * bitsNum - 3] == true);
- import core.exception : Error;
import std.exception : assertThrown;
// Check out of bounds error
diff --git a/libphobos/src/std/regex/internal/tests.d b/libphobos/src/std/regex/internal/tests.d
index 1c4f295c4ca..fe75ce03c0a 100644
--- a/libphobos/src/std/regex/internal/tests.d
+++ b/libphobos/src/std/regex/internal/tests.d
@@ -8,7 +8,7 @@ package(std.regex):
import std.conv, std.exception, std.meta, std.range,
std.typecons, std.regex;
-import std.regex.internal.parser : Escapables; // characters that need escaping
+import std.regex.internal.ir : Escapables; // characters that need escaping
alias Sequence(int B, int E) = staticIota!(B, E);
@@ -467,654 +467,3 @@ alias Sequence(int B, int E) = staticIota!(B, E);
run_tests!match(); //thompson VM
}
-@safe unittest
-{
- auto cr = ctRegex!("abc");
- assert(bmatch("abc",cr).hit == "abc");
- auto cr2 = ctRegex!("ab*c");
- assert(bmatch("abbbbc",cr2).hit == "abbbbc");
-}
-@safe unittest
-{
- auto cr3 = ctRegex!("^abc$");
- assert(bmatch("abc",cr3).hit == "abc");
- auto cr4 = ctRegex!(`\b(a\B[a-z]b)\b`);
- assert(array(match("azb",cr4).captures) == ["azb", "azb"]);
-}
-
-@safe unittest
-{
- auto cr5 = ctRegex!("(?:a{2,4}b{1,3}){1,2}");
- assert(bmatch("aaabaaaabbb", cr5).hit == "aaabaaaabbb");
- auto cr6 = ctRegex!("(?:a{2,4}b{1,3}){1,2}?"w);
- assert(bmatch("aaabaaaabbb"w, cr6).hit == "aaab"w);
-}
-
-@safe unittest
-{
- auto cr7 = ctRegex!(`\r.*?$`,"sm");
- assert(bmatch("abc\r\nxy", cr7).hit == "\r\nxy");
- auto greed = ctRegex!("<packet.*?/packet>");
- assert(bmatch("<packet>text</packet><packet>text</packet>", greed).hit
- == "<packet>text</packet>");
-}
-
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- auto cr8 = ctRegex!("^(a)(b)?(c*)");
- auto m8 = bmatch("abcc",cr8);
- assert(m8);
- assert(m8.captures[1] == "a");
- assert(m8.captures[2] == "b");
- assert(m8.captures[3] == "cc");
- auto cr9 = ctRegex!("q(a|b)*q");
- auto m9 = match("xxqababqyy",cr9);
- assert(m9);
- assert(equal(bmatch("xxqababqyy",cr9).captures, ["qababq", "b"]));
-}
-
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- auto rtr = regex("a|b|c");
- enum ctr = regex("a|b|c");
- assert(equal(rtr.ir,ctr.ir));
- //CTFE parser BUG is triggered by group
- //in the middle of alternation (at least not first and not last)
- enum testCT = regex(`abc|(edf)|xyz`);
- auto testRT = regex(`abc|(edf)|xyz`);
- assert(equal(testCT.ir,testRT.ir));
-}
-
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- import std.algorithm.iteration : map;
- enum cx = ctRegex!"(A|B|C)";
- auto mx = match("B",cx);
- assert(mx);
- assert(equal(mx.captures, [ "B", "B"]));
- enum cx2 = ctRegex!"(A|B)*";
- assert(match("BAAA",cx2));
-
- enum cx3 = ctRegex!("a{3,4}","i");
- auto mx3 = match("AaA",cx3);
- assert(mx3);
- assert(mx3.captures[0] == "AaA");
- enum cx4 = ctRegex!(`^a{3,4}?[a-zA-Z0-9~]{1,2}`,"i");
- auto mx4 = match("aaaabc", cx4);
- assert(mx4);
- assert(mx4.captures[0] == "aaaab");
- auto cr8 = ctRegex!("(a)(b)?(c*)");
- auto m8 = bmatch("abcc",cr8);
- assert(m8);
- assert(m8.captures[1] == "a");
- assert(m8.captures[2] == "b");
- assert(m8.captures[3] == "cc");
- auto cr9 = ctRegex!(".*$", "gm");
- auto m9 = match("First\rSecond", cr9);
- assert(m9);
- assert(equal(map!"a.hit"(m9), ["First", "", "Second"]));
-}
-
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- import std.algorithm.iteration : map;
-//global matching
- void test_body(alias matchFn)()
- {
- string s = "a quick brown fox jumps over a lazy dog";
- auto r1 = regex("\\b[a-z]+\\b","g");
- string[] test;
- foreach (m; matchFn(s, r1))
- test ~= m.hit;
- assert(equal(test, [ "a", "quick", "brown", "fox", "jumps", "over", "a", "lazy", "dog"]));
- auto free_reg = regex(`
-
- abc
- \s+
- "
- (
- [^"]+
- | \\ "
- )+
- "
- z
- `, "x");
- auto m = match(`abc "quoted string with \" inside"z`,free_reg);
- assert(m);
- string mails = " hey@you.com no@spam.net ";
- auto rm = regex(`@(?<=\S+@)\S+`,"g");
- assert(equal(map!"a[0]"(matchFn(mails, rm)), ["@you.com", "@spam.net"]));
- auto m2 = matchFn("First line\nSecond line",regex(".*$","gm"));
- assert(equal(map!"a[0]"(m2), ["First line", "", "Second line"]));
- auto m2a = matchFn("First line\nSecond line",regex(".+$","gm"));
- assert(equal(map!"a[0]"(m2a), ["First line", "Second line"]));
- auto m2b = matchFn("First line\nSecond line",regex(".+?$","gm"));
- assert(equal(map!"a[0]"(m2b), ["First line", "Second line"]));
- debug(std_regex_test) writeln("!!! FReD FLAGS test done "~matchFn.stringof~" !!!");
- }
- test_body!bmatch();
- test_body!match();
-}
-
-//tests for accumulated std.regex issues and other regressions
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- import std.algorithm.iteration : map;
- void test_body(alias matchFn)()
- {
- //issue 5857
- //matching goes out of control if ... in (...){x} has .*/.+
- auto c = matchFn("axxxzayyyyyzd",regex("(a.*z){2}d")).captures;
- assert(c[0] == "axxxzayyyyyzd");
- assert(c[1] == "ayyyyyz");
- auto c2 = matchFn("axxxayyyyyd",regex("(a.*){2}d")).captures;
- assert(c2[0] == "axxxayyyyyd");
- assert(c2[1] == "ayyyyy");
- //issue 2108
- //greedy vs non-greedy
- auto nogreed = regex("<packet.*?/packet>");
- assert(matchFn("<packet>text</packet><packet>text</packet>", nogreed).hit
- == "<packet>text</packet>");
- auto greed = regex("<packet.*/packet>");
- assert(matchFn("<packet>text</packet><packet>text</packet>", greed).hit
- == "<packet>text</packet><packet>text</packet>");
- //issue 4574
- //empty successful match still advances the input
- string[] pres, posts, hits;
- foreach (m; matchFn("abcabc", regex("","g")))
- {
- pres ~= m.pre;
- posts ~= m.post;
- assert(m.hit.empty);
-
- }
- auto heads = [
- "abcabc",
- "abcab",
- "abca",
- "abc",
- "ab",
- "a",
- ""
- ];
- auto tails = [
- "abcabc",
- "bcabc",
- "cabc",
- "abc",
- "bc",
- "c",
- ""
- ];
- assert(pres == array(retro(heads)));
- assert(posts == tails);
- //issue 6076
- //regression on .*
- auto re = regex("c.*|d");
- auto m = matchFn("mm", re);
- assert(!m);
- debug(std_regex_test) writeln("!!! FReD REGRESSION test done "~matchFn.stringof~" !!!");
- auto rprealloc = regex(`((.){5}.{1,10}){5}`);
- auto arr = array(repeat('0',100));
- auto m2 = matchFn(arr, rprealloc);
- assert(m2);
- assert(collectException(
- regex(r"^(import|file|binary|config)\s+([^\(]+)\(?([^\)]*)\)?\s*$")
- ) is null);
- foreach (ch; [Escapables])
- {
- assert(match(to!string(ch),regex(`[\`~ch~`]`)));
- assert(!match(to!string(ch),regex(`[^\`~ch~`]`)));
- assert(match(to!string(ch),regex(`[\`~ch~`-\`~ch~`]`)));
- }
- //bugzilla 7718
- string strcmd = "./myApp.rb -os OSX -path \"/GIT/Ruby Apps/sec\" -conf 'notimer'";
- auto reStrCmd = regex (`(".*")|('.*')`, "g");
- assert(equal(map!"a[0]"(matchFn(strcmd, reStrCmd)),
- [`"/GIT/Ruby Apps/sec"`, `'notimer'`]));
- }
- test_body!bmatch();
- test_body!match();
-}
-
-// tests for replace
-@safe unittest
-{
- void test(alias matchFn)()
- {
- import std.uni : toUpper;
-
- foreach (i, v; AliasSeq!(string, wstring, dstring))
- {
- auto baz(Cap)(Cap m)
- if (is(Cap == Captures!(Cap.String)))
- {
- return toUpper(m.hit);
- }
- alias String = v;
- assert(std.regex.replace!(matchFn)(to!String("ark rapacity"), regex(to!String("r")), to!String("c"))
- == to!String("ack rapacity"));
- assert(std.regex.replace!(matchFn)(to!String("ark rapacity"), regex(to!String("r"), "g"), to!String("c"))
- == to!String("ack capacity"));
- assert(std.regex.replace!(matchFn)(to!String("noon"), regex(to!String("^n")), to!String("[$&]"))
- == to!String("[n]oon"));
- assert(std.regex.replace!(matchFn)(
- to!String("test1 test2"), regex(to!String(`\w+`),"g"), to!String("$`:$'")
- ) == to!String(": test2 test1 :"));
- auto s = std.regex.replace!(baz!(Captures!(String)))(to!String("Strap a rocket engine on a chicken."),
- regex(to!String("[ar]"), "g"));
- assert(s == "StRAp A Rocket engine on A chicken.");
- }
- debug(std_regex_test) writeln("!!! Replace test done "~matchFn.stringof~" !!!");
- }
- test!(bmatch)();
- test!(match)();
-}
-
-// tests for splitter
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- auto s1 = ", abc, de, fg, hi, ";
- auto sp1 = splitter(s1, regex(", *"));
- auto w1 = ["", "abc", "de", "fg", "hi", ""];
- assert(equal(sp1, w1));
-
- auto s2 = ", abc, de, fg, hi";
- auto sp2 = splitter(s2, regex(", *"));
- auto w2 = ["", "abc", "de", "fg", "hi"];
-
- uint cnt;
- foreach (e; sp2)
- {
- assert(w2[cnt++] == e);
- }
- assert(equal(sp2, w2));
-}
-
-@safe unittest
-{
- char[] s1 = ", abc, de, fg, hi, ".dup;
- auto sp2 = splitter(s1, regex(", *"));
-}
-
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- auto s1 = ", abc, de, fg, hi, ";
- auto w1 = ["", "abc", "de", "fg", "hi", ""];
- assert(equal(split(s1, regex(", *")), w1[]));
-}
-
-@safe unittest
-{ // bugzilla 7141
- string pattern = `[a\--b]`;
- assert(match("-", pattern));
- assert(match("b", pattern));
- string pattern2 = `[&-z]`;
- assert(match("b", pattern2));
-}
-@safe unittest
-{//bugzilla 7111
- assert(match("", regex("^")));
-}
-@safe unittest
-{//bugzilla 7300
- assert(!match("a"d, "aa"d));
-}
-
-// bugzilla 7551
-@safe unittest
-{
- auto r = regex("[]abc]*");
- assert("]ab".matchFirst(r).hit == "]ab");
- assertThrown(regex("[]"));
- auto r2 = regex("[]abc--ab]*");
- assert("]ac".matchFirst(r2).hit == "]");
-}
-
-@safe unittest
-{//bugzilla 7674
- assert("1234".replace(regex("^"), "$$") == "$1234");
- assert("hello?".replace(regex(r"\?", "g"), r"\?") == r"hello\?");
- assert("hello?".replace(regex(r"\?", "g"), r"\\?") != r"hello\?");
-}
-@safe unittest
-{// bugzilla 7679
- import std.algorithm.comparison : equal;
- foreach (S; AliasSeq!(string, wstring, dstring))
- (){ // avoid slow optimizations for large functions @@@BUG@@@ 2396
- enum re = ctRegex!(to!S(r"\."));
- auto str = to!S("a.b");
- assert(equal(std.regex.splitter(str, re), [to!S("a"), to!S("b")]));
- assert(split(str, re) == [to!S("a"), to!S("b")]);
- }();
-}
-@safe unittest
-{//bugzilla 8203
- string data = "
- NAME = XPAW01_STA:STATION
- NAME = XPAW01_STA
- ";
- auto uniFileOld = data;
- auto r = regex(
- r"^NAME = (?P<comp>[a-zA-Z0-9_]+):*(?P<blk>[a-zA-Z0-9_]*)","gm");
- auto uniCapturesNew = match(uniFileOld, r);
- for (int i = 0; i < 20; i++)
- foreach (matchNew; uniCapturesNew) {}
- //a second issue with same symptoms
- auto r2 = regex(`([а-яА-Я\-_]+\s*)+(?<=[\s\.,\^])`);
- match("аллея Театральная", r2);
-}
-@safe unittest
-{// bugzilla 8637 purity of enforce
- auto m = match("hello world", regex("world"));
- enforce(m);
-}
-
-// bugzilla 8725
-@safe unittest
-{
- static italic = regex( r"\*
- (?!\s+)
- (.*?)
- (?!\s+)
- \*", "gx" );
- string input = "this * is* interesting, *very* interesting";
- assert(replace(input, italic, "<i>$1</i>") ==
- "this * is* interesting, <i>very</i> interesting");
-}
-
-// bugzilla 8349
-@safe unittest
-{
- enum peakRegexStr = r"\>(wgEncode.*Tfbs.*\.(?:narrow)|(?:broad)Peak.gz)</a>";
- enum peakRegex = ctRegex!(peakRegexStr);
- //note that the regex pattern itself is probably bogus
- assert(match(r"\>wgEncode-blah-Tfbs.narrow</a>", peakRegex));
-}
-
-// bugzilla 9211
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- auto rx_1 = regex(r"^(\w)*(\d)");
- auto m = match("1234", rx_1);
- assert(equal(m.front, ["1234", "3", "4"]));
- auto rx_2 = regex(r"^([0-9])*(\d)");
- auto m2 = match("1234", rx_2);
- assert(equal(m2.front, ["1234", "3", "4"]));
-}
-
-// bugzilla 9280
-@safe unittest
-{
- string tomatch = "a!b@c";
- static r = regex(r"^(?P<nick>.*?)!(?P<ident>.*?)@(?P<host>.*?)$");
- auto nm = match(tomatch, r);
- assert(nm);
- auto c = nm.captures;
- assert(c[1] == "a");
- assert(c["nick"] == "a");
-}
-
-
-// bugzilla 9579
-@safe unittest
-{
- char[] input = ['a', 'b', 'c'];
- string format = "($1)";
- // used to give a compile error:
- auto re = regex(`(a)`, "g");
- auto r = replace(input, re, format);
- assert(r == "(a)bc");
-}
-
-// bugzilla 9634
-@safe unittest
-{
- auto re = ctRegex!"(?:a+)";
- assert(match("aaaa", re).hit == "aaaa");
-}
-
-//bugzilla 10798
-@safe unittest
-{
- auto cr = ctRegex!("[abcd--c]*");
- auto m = "abc".match(cr);
- assert(m);
- assert(m.hit == "ab");
-}
-
-// bugzilla 10913
-@system unittest
-{
- @system static string foo(const(char)[] s)
- {
- return s.dup;
- }
- @safe static string bar(const(char)[] s)
- {
- return s.dup;
- }
- () @system {
- replace!((a) => foo(a.hit))("blah", regex(`a`));
- }();
- () @safe {
- replace!((a) => bar(a.hit))("blah", regex(`a`));
- }();
-}
-
-// bugzilla 11262
-@safe unittest
-{
- enum reg = ctRegex!(r",", "g");
- auto str = "This,List";
- str = str.replace(reg, "-");
- assert(str == "This-List");
-}
-
-// bugzilla 11775
-@safe unittest
-{
- assert(collectException(regex("a{1,0}")));
-}
-
-// bugzilla 11839
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- assert(regex(`(?P<var1>\w+)`).namedCaptures.equal(["var1"]));
- assert(collectException(regex(`(?P<1>\w+)`)));
- assert(regex(`(?P<v1>\w+)`).namedCaptures.equal(["v1"]));
- assert(regex(`(?P<__>\w+)`).namedCaptures.equal(["__"]));
- assert(regex(`(?P<я>\w+)`).namedCaptures.equal(["я"]));
-}
-
-// bugzilla 12076
-@safe unittest
-{
- auto RE = ctRegex!(r"(?<!x[a-z]+)\s([a-z]+)");
- string s = "one two";
- auto m = match(s, RE);
-}
-
-// bugzilla 12105
-@safe unittest
-{
- auto r = ctRegex!`.*?(?!a)`;
- assert("aaab".matchFirst(r).hit == "aaa");
- auto r2 = ctRegex!`.*(?!a)`;
- assert("aaab".matchFirst(r2).hit == "aaab");
-}
-
-//bugzilla 11784
-@safe unittest
-{
- assert("abcdefghijklmnopqrstuvwxyz"
- .matchFirst("[a-z&&[^aeiuo]]").hit == "b");
-}
-
-//bugzilla 12366
-@safe unittest
-{
- auto re = ctRegex!(`^((?=(xx+?)\2+$)((?=\2+$)(?=(x+)(\4+$))\5){2})*x?$`);
- assert("xxxxxxxx".match(re).empty);
- assert(!"xxxx".match(re).empty);
-}
-
-// bugzilla 12582
-@safe unittest
-{
- auto r = regex(`(?P<a>abc)`);
- assert(collectException("abc".matchFirst(r)["b"]));
-}
-
-// bugzilla 12691
-@safe unittest
-{
- assert(bmatch("e@", "^([a-z]|)*$").empty);
- assert(bmatch("e@", ctRegex!`^([a-z]|)*$`).empty);
-}
-
-//bugzilla 12713
-@safe unittest
-{
- assertThrown(regex("[[a-z]([a-z]|(([[a-z])))"));
-}
-
-//bugzilla 12747
-@safe unittest
-{
- assertThrown(regex(`^x(\1)`));
- assertThrown(regex(`^(x(\1))`));
- assertThrown(regex(`^((x)(?=\1))`));
-}
-
-// bugzilla 14504
-@safe unittest
-{
- auto p = ctRegex!("a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?" ~
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
-}
-
-// bugzilla 14529
-@safe unittest
-{
- auto ctPat2 = regex(r"^[CDF]$", "i");
- foreach (v; ["C", "c", "D", "d", "F", "f"])
- assert(matchAll(v, ctPat2).front.hit == v);
-}
-
-// bugzilla 14615
-@safe unittest
-{
- import std.array : appender;
- import std.regex : replaceFirst, replaceFirstInto, regex;
- import std.stdio : writeln;
-
- auto example = "Hello, world!";
- auto pattern = regex("^Hello, (bug)"); // won't find this one
- auto result = replaceFirst(example, pattern, "$1 Sponge Bob");
- assert(result == "Hello, world!"); // Ok.
-
- auto sink = appender!string;
- replaceFirstInto(sink, example, pattern, "$1 Sponge Bob");
- assert(sink.data == "Hello, world!");
- replaceAllInto(sink, example, pattern, "$1 Sponge Bob");
- assert(sink.data == "Hello, world!Hello, world!");
-}
-
-// bugzilla 15573
-@safe unittest
-{
- auto rx = regex("[c d]", "x");
- assert("a b".matchFirst(rx));
-}
-
-// bugzilla 15864
-@safe unittest
-{
- regex(`(<a (?:(?:\w+=\"[^"]*\")?\s*)*href="\.\.?)"`);
-}
-
-@safe unittest
-{
- auto r = regex("(?# comment)abc(?# comment2)");
- assert("abc".matchFirst(r));
- assertThrown(regex("(?#..."));
-}
-
-// bugzilla 17075
-@safe unittest
-{
- enum titlePattern = `<title>(.+)</title>`;
- static titleRegex = ctRegex!titlePattern;
- string input = "<title>" ~ "<".repeat(100_000).join;
- assert(input.matchFirst(titleRegex).empty);
-}
-
-// bugzilla 17212
-@safe unittest
-{
- auto r = regex(" [a] ", "x");
- assert("a".matchFirst(r));
-}
-
-// bugzilla 17157
-@safe unittest
-{
- import std.algorithm.comparison : equal;
- auto ctr = ctRegex!"(a)|(b)|(c)|(d)";
- auto r = regex("(a)|(b)|(c)|(d)", "g");
- auto s = "--a--b--c--d--";
- auto outcomes = [
- ["a", "a", "", "", ""],
- ["b", "", "b", "", ""],
- ["c", "", "", "c", ""],
- ["d", "", "", "", "d"]
- ];
- assert(equal!equal(s.matchAll(ctr), outcomes));
- assert(equal!equal(s.bmatch(r), outcomes));
-}
-
-// bugzilla 17667
-@safe unittest
-{
- import std.algorithm.searching : canFind;
- void willThrow(T, size_t line = __LINE__)(T arg, string msg)
- {
- auto e = collectException(regex(arg));
- assert(e.msg.canFind(msg), to!string(line) ~ ": " ~ e.msg);
- }
- willThrow([r".", r"[\(\{[\]\}\)]"], "no matching ']' found while parsing character class");
- willThrow([r"[\", r"123"], "no matching ']' found while parsing character class");
- willThrow([r"[a-", r"123"], "no matching ']' found while parsing character class");
- willThrow([r"[a-\", r"123"], "invalid escape sequence");
- willThrow([r"\", r"123"], "invalid escape sequence");
-}
-
-// bugzilla 17668
-@safe unittest
-{
- import std.algorithm.searching;
- auto e = collectException!RegexException(regex(q"<[^]>"));
- assert(e.msg.canFind("no operand for '^'"));
-}
-
-// bugzilla 17673
-@safe unittest
-{
- string str = `<">`;
- string[] regexps = ["abc", "\"|x"];
- auto regexp = regex(regexps);
- auto c = matchFirst(str, regexp);
- assert(c);
- assert(c.whichPattern == 2);
-}
-
diff --git a/libphobos/src/std/regex/internal/tests2.d b/libphobos/src/std/regex/internal/tests2.d
new file mode 100644
index 00000000000..420f8d3d6cc
--- /dev/null
+++ b/libphobos/src/std/regex/internal/tests2.d
@@ -0,0 +1,662 @@
+// Split-up due to DMD's enormous memory consumption
+
+module std.regex.internal.tests2;
+
+package(std.regex):
+
+import std.conv, std.exception, std.meta, std.range,
+ std.typecons, std.regex;
+
+import std.regex.internal.ir : Escapables; // characters that need escaping
+
+@safe unittest
+{
+ auto cr = ctRegex!("abc");
+ assert(bmatch("abc",cr).hit == "abc");
+ auto cr2 = ctRegex!("ab*c");
+ assert(bmatch("abbbbc",cr2).hit == "abbbbc");
+}
+@safe unittest
+{
+ auto cr3 = ctRegex!("^abc$");
+ assert(bmatch("abc",cr3).hit == "abc");
+ auto cr4 = ctRegex!(`\b(a\B[a-z]b)\b`);
+ assert(array(match("azb",cr4).captures) == ["azb", "azb"]);
+}
+
+@safe unittest
+{
+ auto cr5 = ctRegex!("(?:a{2,4}b{1,3}){1,2}");
+ assert(bmatch("aaabaaaabbb", cr5).hit == "aaabaaaabbb");
+ auto cr6 = ctRegex!("(?:a{2,4}b{1,3}){1,2}?"w);
+ assert(bmatch("aaabaaaabbb"w, cr6).hit == "aaab"w);
+}
+
+@safe unittest
+{
+ auto cr7 = ctRegex!(`\r.*?$`,"sm");
+ assert(bmatch("abc\r\nxy", cr7).hit == "\r\nxy");
+ auto greed = ctRegex!("<packet.*?/packet>");
+ assert(bmatch("<packet>text</packet><packet>text</packet>", greed).hit
+ == "<packet>text</packet>");
+}
+
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ auto cr8 = ctRegex!("^(a)(b)?(c*)");
+ auto m8 = bmatch("abcc",cr8);
+ assert(m8);
+ assert(m8.captures[1] == "a");
+ assert(m8.captures[2] == "b");
+ assert(m8.captures[3] == "cc");
+ auto cr9 = ctRegex!("q(a|b)*q");
+ auto m9 = match("xxqababqyy",cr9);
+ assert(m9);
+ assert(equal(bmatch("xxqababqyy",cr9).captures, ["qababq", "b"]));
+}
+
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ auto rtr = regex("a|b|c");
+ enum ctr = regex("a|b|c");
+ assert(equal(rtr.ir,ctr.ir));
+ //CTFE parser BUG is triggered by group
+ //in the middle of alternation (at least not first and not last)
+ enum testCT = regex(`abc|(edf)|xyz`);
+ auto testRT = regex(`abc|(edf)|xyz`);
+ assert(equal(testCT.ir,testRT.ir));
+}
+
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ import std.algorithm.iteration : map;
+ enum cx = ctRegex!"(A|B|C)";
+ auto mx = match("B",cx);
+ assert(mx);
+ assert(equal(mx.captures, [ "B", "B"]));
+ enum cx2 = ctRegex!"(A|B)*";
+ assert(match("BAAA",cx2));
+
+ enum cx3 = ctRegex!("a{3,4}","i");
+ auto mx3 = match("AaA",cx3);
+ assert(mx3);
+ assert(mx3.captures[0] == "AaA");
+ enum cx4 = ctRegex!(`^a{3,4}?[a-zA-Z0-9~]{1,2}`,"i");
+ auto mx4 = match("aaaabc", cx4);
+ assert(mx4);
+ assert(mx4.captures[0] == "aaaab");
+ auto cr8 = ctRegex!("(a)(b)?(c*)");
+ auto m8 = bmatch("abcc",cr8);
+ assert(m8);
+ assert(m8.captures[1] == "a");
+ assert(m8.captures[2] == "b");
+ assert(m8.captures[3] == "cc");
+ auto cr9 = ctRegex!(".*$", "gm");
+ auto m9 = match("First\rSecond", cr9);
+ assert(m9);
+ assert(equal(map!"a.hit"(m9), ["First", "", "Second"]));
+}
+
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ import std.algorithm.iteration : map;
+//global matching
+ void test_body(alias matchFn)()
+ {
+ string s = "a quick brown fox jumps over a lazy dog";
+ auto r1 = regex("\\b[a-z]+\\b","g");
+ string[] test;
+ foreach (m; matchFn(s, r1))
+ test ~= m.hit;
+ assert(equal(test, [ "a", "quick", "brown", "fox", "jumps", "over", "a", "lazy", "dog"]));
+ auto free_reg = regex(`
+
+ abc
+ \s+
+ "
+ (
+ [^"]+
+ | \\ "
+ )+
+ "
+ z
+ `, "x");
+ auto m = match(`abc "quoted string with \" inside"z`,free_reg);
+ assert(m);
+ string mails = " hey@you.com no@spam.net ";
+ auto rm = regex(`@(?<=\S+@)\S+`,"g");
+ assert(equal(map!"a[0]"(matchFn(mails, rm)), ["@you.com", "@spam.net"]));
+ auto m2 = matchFn("First line\nSecond line",regex(".*$","gm"));
+ assert(equal(map!"a[0]"(m2), ["First line", "", "Second line"]));
+ auto m2a = matchFn("First line\nSecond line",regex(".+$","gm"));
+ assert(equal(map!"a[0]"(m2a), ["First line", "Second line"]));
+ auto m2b = matchFn("First line\nSecond line",regex(".+?$","gm"));
+ assert(equal(map!"a[0]"(m2b), ["First line", "Second line"]));
+ debug(std_regex_test) writeln("!!! FReD FLAGS test done "~matchFn.stringof~" !!!");
+ }
+ test_body!bmatch();
+ test_body!match();
+}
+
+//tests for accumulated std.regex issues and other regressions
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ import std.algorithm.iteration : map;
+ void test_body(alias matchFn)()
+ {
+ //issue 5857
+ //matching goes out of control if ... in (...){x} has .*/.+
+ auto c = matchFn("axxxzayyyyyzd",regex("(a.*z){2}d")).captures;
+ assert(c[0] == "axxxzayyyyyzd");
+ assert(c[1] == "ayyyyyz");
+ auto c2 = matchFn("axxxayyyyyd",regex("(a.*){2}d")).captures;
+ assert(c2[0] == "axxxayyyyyd");
+ assert(c2[1] == "ayyyyy");
+ //issue 2108
+ //greedy vs non-greedy
+ auto nogreed = regex("<packet.*?/packet>");
+ assert(matchFn("<packet>text</packet><packet>text</packet>", nogreed).hit
+ == "<packet>text</packet>");
+ auto greed = regex("<packet.*/packet>");
+ assert(matchFn("<packet>text</packet><packet>text</packet>", greed).hit
+ == "<packet>text</packet><packet>text</packet>");
+ //issue 4574
+ //empty successful match still advances the input
+ string[] pres, posts, hits;
+ foreach (m; matchFn("abcabc", regex("","g")))
+ {
+ pres ~= m.pre;
+ posts ~= m.post;
+ assert(m.hit.empty);
+
+ }
+ auto heads = [
+ "abcabc",
+ "abcab",
+ "abca",
+ "abc",
+ "ab",
+ "a",
+ ""
+ ];
+ auto tails = [
+ "abcabc",
+ "bcabc",
+ "cabc",
+ "abc",
+ "bc",
+ "c",
+ ""
+ ];
+ assert(pres == array(retro(heads)));
+ assert(posts == tails);
+ //issue 6076
+ //regression on .*
+ auto re = regex("c.*|d");
+ auto m = matchFn("mm", re);
+ assert(!m);
+ debug(std_regex_test) writeln("!!! FReD REGRESSION test done "~matchFn.stringof~" !!!");
+ auto rprealloc = regex(`((.){5}.{1,10}){5}`);
+ auto arr = array(repeat('0',100));
+ auto m2 = matchFn(arr, rprealloc);
+ assert(m2);
+ assert(collectException(
+ regex(r"^(import|file|binary|config)\s+([^\(]+)\(?([^\)]*)\)?\s*$")
+ ) is null);
+ foreach (ch; [Escapables])
+ {
+ assert(match(to!string(ch),regex(`[\`~ch~`]`)));
+ assert(!match(to!string(ch),regex(`[^\`~ch~`]`)));
+ assert(match(to!string(ch),regex(`[\`~ch~`-\`~ch~`]`)));
+ }
+ //bugzilla 7718
+ string strcmd = "./myApp.rb -os OSX -path \"/GIT/Ruby Apps/sec\" -conf 'notimer'";
+ auto reStrCmd = regex (`(".*")|('.*')`, "g");
+ assert(equal(map!"a[0]"(matchFn(strcmd, reStrCmd)),
+ [`"/GIT/Ruby Apps/sec"`, `'notimer'`]));
+ }
+ test_body!bmatch();
+ test_body!match();
+}
+
+// tests for replace
+@safe unittest
+{
+ void test(alias matchFn)()
+ {
+ import std.uni : toUpper;
+
+ foreach (i, v; AliasSeq!(string, wstring, dstring))
+ {
+ auto baz(Cap)(Cap m)
+ if (is(Cap == Captures!(Cap.String)))
+ {
+ return toUpper(m.hit);
+ }
+ alias String = v;
+ assert(std.regex.replace!(matchFn)(to!String("ark rapacity"), regex(to!String("r")), to!String("c"))
+ == to!String("ack rapacity"));
+ assert(std.regex.replace!(matchFn)(to!String("ark rapacity"), regex(to!String("r"), "g"), to!String("c"))
+ == to!String("ack capacity"));
+ assert(std.regex.replace!(matchFn)(to!String("noon"), regex(to!String("^n")), to!String("[$&]"))
+ == to!String("[n]oon"));
+ assert(std.regex.replace!(matchFn)(
+ to!String("test1 test2"), regex(to!String(`\w+`),"g"), to!String("$`:$'")
+ ) == to!String(": test2 test1 :"));
+ auto s = std.regex.replace!(baz!(Captures!(String)))(to!String("Strap a rocket engine on a chicken."),
+ regex(to!String("[ar]"), "g"));
+ assert(s == "StRAp A Rocket engine on A chicken.");
+ }
+ debug(std_regex_test) writeln("!!! Replace test done "~matchFn.stringof~" !!!");
+ }
+ test!(bmatch)();
+ test!(match)();
+}
+
+// tests for splitter
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ auto s1 = ", abc, de, fg, hi, ";
+ auto sp1 = splitter(s1, regex(", *"));
+ auto w1 = ["", "abc", "de", "fg", "hi", ""];
+ assert(equal(sp1, w1));
+
+ auto s2 = ", abc, de, fg, hi";
+ auto sp2 = splitter(s2, regex(", *"));
+ auto w2 = ["", "abc", "de", "fg", "hi"];
+
+ uint cnt;
+ foreach (e; sp2)
+ {
+ assert(w2[cnt++] == e);
+ }
+ assert(equal(sp2, w2));
+}
+
+@safe unittest
+{
+ char[] s1 = ", abc, de, fg, hi, ".dup;
+ auto sp2 = splitter(s1, regex(", *"));
+}
+
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ auto s1 = ", abc, de, fg, hi, ";
+ auto w1 = ["", "abc", "de", "fg", "hi", ""];
+ assert(equal(split(s1, regex(", *")), w1[]));
+}
+
+@safe unittest
+{ // bugzilla 7141
+ string pattern = `[a\--b]`;
+ assert(match("-", pattern));
+ assert(match("b", pattern));
+ string pattern2 = `[&-z]`;
+ assert(match("b", pattern2));
+}
+@safe unittest
+{//bugzilla 7111
+ assert(match("", regex("^")));
+}
+@safe unittest
+{//bugzilla 7300
+ assert(!match("a"d, "aa"d));
+}
+
+// bugzilla 7551
+@safe unittest
+{
+ auto r = regex("[]abc]*");
+ assert("]ab".matchFirst(r).hit == "]ab");
+ assertThrown(regex("[]"));
+ auto r2 = regex("[]abc--ab]*");
+ assert("]ac".matchFirst(r2).hit == "]");
+}
+
+@safe unittest
+{//bugzilla 7674
+ assert("1234".replace(regex("^"), "$$") == "$1234");
+ assert("hello?".replace(regex(r"\?", "g"), r"\?") == r"hello\?");
+ assert("hello?".replace(regex(r"\?", "g"), r"\\?") != r"hello\?");
+}
+@safe unittest
+{// bugzilla 7679
+ import std.algorithm.comparison : equal;
+ foreach (S; AliasSeq!(string, wstring, dstring))
+ (){ // avoid slow optimizations for large functions @@@BUG@@@ 2396
+ enum re = ctRegex!(to!S(r"\."));
+ auto str = to!S("a.b");
+ assert(equal(std.regex.splitter(str, re), [to!S("a"), to!S("b")]));
+ assert(split(str, re) == [to!S("a"), to!S("b")]);
+ }();
+}
+@safe unittest
+{//bugzilla 8203
+ string data = "
+ NAME = XPAW01_STA:STATION
+ NAME = XPAW01_STA
+ ";
+ auto uniFileOld = data;
+ auto r = regex(
+ r"^NAME = (?P<comp>[a-zA-Z0-9_]+):*(?P<blk>[a-zA-Z0-9_]*)","gm");
+ auto uniCapturesNew = match(uniFileOld, r);
+ for (int i = 0; i < 20; i++)
+ foreach (matchNew; uniCapturesNew) {}
+ //a second issue with same symptoms
+ auto r2 = regex(`([а-яА-Я\-_]+\s*)+(?<=[\s\.,\^])`);
+ match("аллея Театральная", r2);
+}
+@safe unittest
+{// bugzilla 8637 purity of enforce
+ auto m = match("hello world", regex("world"));
+ enforce(m);
+}
+
+// bugzilla 8725
+@safe unittest
+{
+ static italic = regex( r"\*
+ (?!\s+)
+ (.*?)
+ (?!\s+)
+ \*", "gx" );
+ string input = "this * is* interesting, *very* interesting";
+ assert(replace(input, italic, "<i>$1</i>") ==
+ "this * is* interesting, <i>very</i> interesting");
+}
+
+// bugzilla 8349
+@safe unittest
+{
+ enum peakRegexStr = r"\>(wgEncode.*Tfbs.*\.(?:narrow)|(?:broad)Peak.gz)</a>";
+ enum peakRegex = ctRegex!(peakRegexStr);
+ //note that the regex pattern itself is probably bogus
+ assert(match(r"\>wgEncode-blah-Tfbs.narrow</a>", peakRegex));
+}
+
+// bugzilla 9211
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ auto rx_1 = regex(r"^(\w)*(\d)");
+ auto m = match("1234", rx_1);
+ assert(equal(m.front, ["1234", "3", "4"]));
+ auto rx_2 = regex(r"^([0-9])*(\d)");
+ auto m2 = match("1234", rx_2);
+ assert(equal(m2.front, ["1234", "3", "4"]));
+}
+
+// bugzilla 9280
+@safe unittest
+{
+ string tomatch = "a!b@c";
+ static r = regex(r"^(?P<nick>.*?)!(?P<ident>.*?)@(?P<host>.*?)$");
+ auto nm = match(tomatch, r);
+ assert(nm);
+ auto c = nm.captures;
+ assert(c[1] == "a");
+ assert(c["nick"] == "a");
+}
+
+
+// bugzilla 9579
+@safe unittest
+{
+ char[] input = ['a', 'b', 'c'];
+ string format = "($1)";
+ // used to give a compile error:
+ auto re = regex(`(a)`, "g");
+ auto r = replace(input, re, format);
+ assert(r == "(a)bc");
+}
+
+// bugzilla 9634
+@safe unittest
+{
+ auto re = ctRegex!"(?:a+)";
+ assert(match("aaaa", re).hit == "aaaa");
+}
+
+//bugzilla 10798
+@safe unittest
+{
+ auto cr = ctRegex!("[abcd--c]*");
+ auto m = "abc".match(cr);
+ assert(m);
+ assert(m.hit == "ab");
+}
+
+// bugzilla 10913
+@system unittest
+{
+ @system static string foo(const(char)[] s)
+ {
+ return s.dup;
+ }
+ @safe static string bar(const(char)[] s)
+ {
+ return s.dup;
+ }
+ () @system {
+ replace!((a) => foo(a.hit))("blah", regex(`a`));
+ }();
+ () @safe {
+ replace!((a) => bar(a.hit))("blah", regex(`a`));
+ }();
+}
+
+// bugzilla 11262
+@safe unittest
+{
+ enum reg = ctRegex!(r",", "g");
+ auto str = "This,List";
+ str = str.replace(reg, "-");
+ assert(str == "This-List");
+}
+
+// bugzilla 11775
+@safe unittest
+{
+ assert(collectException(regex("a{1,0}")));
+}
+
+// bugzilla 11839
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ assert(regex(`(?P<var1>\w+)`).namedCaptures.equal(["var1"]));
+ assert(collectException(regex(`(?P<1>\w+)`)));
+ assert(regex(`(?P<v1>\w+)`).namedCaptures.equal(["v1"]));
+ assert(regex(`(?P<__>\w+)`).namedCaptures.equal(["__"]));
+ assert(regex(`(?P<я>\w+)`).namedCaptures.equal(["я"]));
+}
+
+// bugzilla 12076
+@safe unittest
+{
+ auto RE = ctRegex!(r"(?<!x[a-z]+)\s([a-z]+)");
+ string s = "one two";
+ auto m = match(s, RE);
+}
+
+// bugzilla 12105
+@safe unittest
+{
+ auto r = ctRegex!`.*?(?!a)`;
+ assert("aaab".matchFirst(r).hit == "aaa");
+ auto r2 = ctRegex!`.*(?!a)`;
+ assert("aaab".matchFirst(r2).hit == "aaab");
+}
+
+//bugzilla 11784
+@safe unittest
+{
+ assert("abcdefghijklmnopqrstuvwxyz"
+ .matchFirst("[a-z&&[^aeiuo]]").hit == "b");
+}
+
+//bugzilla 12366
+@safe unittest
+{
+ auto re = ctRegex!(`^((?=(xx+?)\2+$)((?=\2+$)(?=(x+)(\4+$))\5){2})*x?$`);
+ assert("xxxxxxxx".match(re).empty);
+ assert(!"xxxx".match(re).empty);
+}
+
+// bugzilla 12582
+@safe unittest
+{
+ auto r = regex(`(?P<a>abc)`);
+ assert(collectException("abc".matchFirst(r)["b"]));
+}
+
+// bugzilla 12691
+@safe unittest
+{
+ assert(bmatch("e@", "^([a-z]|)*$").empty);
+ assert(bmatch("e@", ctRegex!`^([a-z]|)*$`).empty);
+}
+
+//bugzilla 12713
+@safe unittest
+{
+ assertThrown(regex("[[a-z]([a-z]|(([[a-z])))"));
+}
+
+//bugzilla 12747
+@safe unittest
+{
+ assertThrown(regex(`^x(\1)`));
+ assertThrown(regex(`^(x(\1))`));
+ assertThrown(regex(`^((x)(?=\1))`));
+}
+
+// bugzilla 14504
+@safe unittest
+{
+ auto p = ctRegex!("a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?" ~
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
+}
+
+// bugzilla 14529
+@safe unittest
+{
+ auto ctPat2 = regex(r"^[CDF]$", "i");
+ foreach (v; ["C", "c", "D", "d", "F", "f"])
+ assert(matchAll(v, ctPat2).front.hit == v);
+}
+
+// bugzilla 14615
+@safe unittest
+{
+ import std.array : appender;
+ import std.regex : replaceFirst, replaceFirstInto, regex;
+ import std.stdio : writeln;
+
+ auto example = "Hello, world!";
+ auto pattern = regex("^Hello, (bug)"); // won't find this one
+ auto result = replaceFirst(example, pattern, "$1 Sponge Bob");
+ assert(result == "Hello, world!"); // Ok.
+
+ auto sink = appender!string;
+ replaceFirstInto(sink, example, pattern, "$1 Sponge Bob");
+ assert(sink.data == "Hello, world!");
+ replaceAllInto(sink, example, pattern, "$1 Sponge Bob");
+ assert(sink.data == "Hello, world!Hello, world!");
+}
+
+// bugzilla 15573
+@safe unittest
+{
+ auto rx = regex("[c d]", "x");
+ assert("a b".matchFirst(rx));
+}
+
+// bugzilla 15864
+@safe unittest
+{
+ regex(`(<a (?:(?:\w+=\"[^"]*\")?\s*)*href="\.\.?)"`);
+}
+
+@safe unittest
+{
+ auto r = regex("(?# comment)abc(?# comment2)");
+ assert("abc".matchFirst(r));
+ assertThrown(regex("(?#..."));
+}
+
+// bugzilla 17075
+@safe unittest
+{
+ enum titlePattern = `<title>(.+)</title>`;
+ static titleRegex = ctRegex!titlePattern;
+ string input = "<title>" ~ "<".repeat(100_000).join;
+ assert(input.matchFirst(titleRegex).empty);
+}
+
+// bugzilla 17212
+@safe unittest
+{
+ auto r = regex(" [a] ", "x");
+ assert("a".matchFirst(r));
+}
+
+// bugzilla 17157
+@safe unittest
+{
+ import std.algorithm.comparison : equal;
+ auto ctr = ctRegex!"(a)|(b)|(c)|(d)";
+ auto r = regex("(a)|(b)|(c)|(d)", "g");
+ auto s = "--a--b--c--d--";
+ auto outcomes = [
+ ["a", "a", "", "", ""],
+ ["b", "", "b", "", ""],
+ ["c", "", "", "c", ""],
+ ["d", "", "", "", "d"]
+ ];
+ assert(equal!equal(s.matchAll(ctr), outcomes));
+ assert(equal!equal(s.bmatch(r), outcomes));
+}
+
+// bugzilla 17667
+@safe unittest
+{
+ import std.algorithm.searching : canFind;
+ void willThrow(T, size_t line = __LINE__)(T arg, string msg)
+ {
+ auto e = collectException(regex(arg));
+ assert(e.msg.canFind(msg), to!string(line) ~ ": " ~ e.msg);
+ }
+ willThrow([r".", r"[\(\{[\]\}\)]"], "no matching ']' found while parsing character class");
+ willThrow([r"[\", r"123"], "no matching ']' found while parsing character class");
+ willThrow([r"[a-", r"123"], "no matching ']' found while parsing character class");
+ willThrow([r"[a-\", r"123"], "invalid escape sequence");
+ willThrow([r"\", r"123"], "invalid escape sequence");
+}
+
+// bugzilla 17668
+@safe unittest
+{
+ import std.algorithm.searching;
+ auto e = collectException!RegexException(regex(q"<[^]>"));
+ assert(e.msg.canFind("no operand for '^'"));
+}
+
+// bugzilla 17673
+@safe unittest
+{
+ string str = `<">`;
+ string[] regexps = ["abc", "\"|x"];
+ auto regexp = regex(regexps);
+ auto c = matchFirst(str, regexp);
+ assert(c);
+ assert(c.whichPattern == 2);
+}
+
diff --git a/libphobos/src/std/socket.d b/libphobos/src/std/socket.d
index ecb2c8b916e..d7de153063f 100644
--- a/libphobos/src/std/socket.d
+++ b/libphobos/src/std/socket.d
@@ -85,10 +85,10 @@ else version (Posix)
}
}
+ public import core.sys.posix.netinet.in_;
import core.sys.posix.arpa.inet;
import core.sys.posix.fcntl;
import core.sys.posix.netdb;
- import core.sys.posix.netinet.in_;
import core.sys.posix.netinet.tcp;
import core.sys.posix.sys.select;
import core.sys.posix.sys.socket;
diff --git a/libphobos/src/std/typecons.d b/libphobos/src/std/typecons.d
index a63227cee8b..55119fc2780 100644
--- a/libphobos/src/std/typecons.d
+++ b/libphobos/src/std/typecons.d
@@ -4204,10 +4204,11 @@ package template OverloadSet(string nam, T...)
/*
Used by MemberFunctionGenerator.
*/
-package template FuncInfo(alias func, /+[BUG 4217 ?]+/ T = typeof(&func))
+package template FuncInfo(alias func)
+if (is(typeof(&func)))
{
- alias RT = ReturnType!T;
- alias PT = Parameters!T;
+ alias RT = ReturnType!(typeof(&func));
+ alias PT = Parameters!(typeof(&func));
}
package template FuncInfo(Func)
{
@@ -4248,6 +4249,7 @@ private static:
// Internal stuffs
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
import std.format;
+ alias format = std.format.format;
enum CONSTRUCTOR_NAME = "__ctor";
@@ -5024,7 +5026,7 @@ package template GetOverloadedMethods(T)
enum isMethod = false;
}
alias follows = AliasSeq!(
- std.meta.Filter!(isMethod, __traits(getOverloads, T, name)),
+ Filter!(isMethod, __traits(getOverloads, T, name)),
follows!(i + 1));
}
}
diff --git a/libphobos/src/std/zip.d b/libphobos/src/std/zip.d
index 8b130ea2dd9..9e55d199a9b 100644
--- a/libphobos/src/std/zip.d
+++ b/libphobos/src/std/zip.d
@@ -263,8 +263,8 @@ final class ArchiveMember
{
void print()
{
- printf("name = '%.*s'\n", name.length, name.ptr);
- printf("\tcomment = '%.*s'\n", comment.length, comment.ptr);
+ printf("name = '%.*s'\n", cast(int) name.length, name.ptr);
+ printf("\tcomment = '%.*s'\n", cast(int) comment.length, comment.ptr);
printf("\tmadeVersion = x%04x\n", _madeVersion);
printf("\textractVersion = x%04x\n", extractVersion);
printf("\tflags = x%04x\n", flags);
@@ -348,7 +348,7 @@ final class ZipArchive
printf("\tdiskStartDir = %u\n", diskStartDir);
printf("\tnumEntries = %u\n", numEntries);
printf("\ttotalEntries = %u\n", totalEntries);
- printf("\tcomment = '%.*s'\n", comment.length, comment.ptr);
+ printf("\tcomment = '%.*s'\n", cast(int) comment.length, comment.ptr);
}
}
diff --git a/libphobos/testsuite/libphobos.exceptions/chain.d b/libphobos/testsuite/libphobos.exceptions/chain.d
index 462ba245e55..0305707fc62 100644
--- a/libphobos/testsuite/libphobos.exceptions/chain.d
+++ b/libphobos/testsuite/libphobos.exceptions/chain.d
@@ -65,14 +65,14 @@ void main()
string prefix = "";
for ({ size_t i; Throwable ex = original; } ex; ex = ex.next, ++i)
{
- printf("%.*s%.*s\n", prefix.length, prefix.ptr, ex.msg.length, ex.msg.ptr);
+ printf("%.*s%.*s\n", cast(int)prefix.length, prefix.ptr, cast(int)ex.msg.length, ex.msg.ptr);
prefix = prefix~" ";
}
printf("Bypassed chain was:\n");
prefix = "";
for ({ size_t i; Throwable ex = original.bypassedException; } ex; ex = ex.next, ++i)
{
- printf("%.*s%.*s\n", prefix.length, prefix.ptr, ex.msg.length, ex.msg.ptr);
+ printf("%.*s%.*s\n", cast(int)prefix.length, prefix.ptr, cast(int)ex.msg.length, ex.msg.ptr);
prefix = prefix~" ";
}
}
diff --git a/libphobos/testsuite/libphobos.exceptions/line_trace.d b/libphobos/testsuite/libphobos.exceptions/line_trace.d
index 7b75d3af277..70762ff227c 100644
--- a/libphobos/testsuite/libphobos.exceptions/line_trace.d
+++ b/libphobos/testsuite/libphobos.exceptions/line_trace.d
@@ -9,7 +9,7 @@ void main()
{
import core.stdc.stdio;
auto str = e.toString();
- printf("%.*s\n", str.length, str.ptr);
+ printf("%.*s\n", cast(int)str.length, str.ptr);
}
}