aboutsummaryrefslogtreecommitdiff
path: root/libphobos/libdruntime
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2023-09-23 12:27:26 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2023-09-23 13:01:16 +0200
commitd6679fa2d65316e80a267c94c17ad9e23f433f77 (patch)
treeeca9ecef18b21760629c54620785c18bc4452bbd /libphobos/libdruntime
parent59d27cc55a0588ed7b03bef804662cb844e8a24d (diff)
downloadgcc-d6679fa2d65316e80a267c94c17ad9e23f433f77.zip
gcc-d6679fa2d65316e80a267c94c17ad9e23f433f77.tar.gz
gcc-d6679fa2d65316e80a267c94c17ad9e23f433f77.tar.bz2
d: Merge upstream dmd, druntime 4574d1728d, phobos d7e79f024.
D front-end changes: - Import dmd v2.105.0. - Catch clause must take only `const' or mutable exceptions. - Creating a `scope' class instance with a non-scope constructor is now `@system' only with `-fpreview=dip1000'. - Global `const' variables can no longer be initialized from a non-shared static constructor D runtime changes: - Import druntime v2.105.0. Phobos changes: - Import phobos v2.105.0. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd 4574d1728d. * dmd/VERSION: Bump version to v2.105.0. * d-diagnostic.cc (verror): Remove. (verrorSupplemental): Remove. (vwarning): Remove. (vwarningSupplemental): Remove. (vdeprecation): Remove. (vdeprecationSupplemental): Remove. (vmessage): Remove. (vtip): Remove. (verrorReport): New function. (verrorReportSupplemental): New function. * d-lang.cc (d_parse_file): Update for new front-end interface. * decl.cc (d_mangle_decl): Update for new front-end interface. * intrinsics.cc (maybe_set_intrinsic): Update for new front-end interface. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime 4574d1728d. * src/MERGE: Merge upstream phobos d7e79f024.
Diffstat (limited to 'libphobos/libdruntime')
-rw-r--r--libphobos/libdruntime/MERGE2
-rw-r--r--libphobos/libdruntime/core/demangle.d12
-rw-r--r--libphobos/libdruntime/core/internal/array/appending.d4
-rw-r--r--libphobos/libdruntime/core/internal/array/capacity.d2
-rw-r--r--libphobos/libdruntime/core/internal/array/construction.d4
-rw-r--r--libphobos/libdruntime/core/memory.d8
-rw-r--r--libphobos/libdruntime/core/sys/windows/basetsd.d31
-rw-r--r--libphobos/libdruntime/core/sys/windows/mmsystem.d22
-rw-r--r--libphobos/libdruntime/core/sys/windows/ole.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/ras.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/rpcdcep.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/rpcndr.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/sqltypes.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/vfw.d16
-rw-r--r--libphobos/libdruntime/core/sys/windows/winbase.d2
-rw-r--r--libphobos/libdruntime/core/sys/windows/wingdi.d100
-rw-r--r--libphobos/libdruntime/core/sys/windows/winuser.d4
-rw-r--r--libphobos/libdruntime/object.d96
18 files changed, 189 insertions, 124 deletions
diff --git a/libphobos/libdruntime/MERGE b/libphobos/libdruntime/MERGE
index a02a8cb..dc26778 100644
--- a/libphobos/libdruntime/MERGE
+++ b/libphobos/libdruntime/MERGE
@@ -1,4 +1,4 @@
-26f049fb26e755096dea3f1474decea7c0fef187
+4574d1728d1f7e52ff40e6733b8c39889d128349
The first line of this file holds the git revision number of the last
merge done from the dlang/dmd repository.
diff --git a/libphobos/libdruntime/core/demangle.d b/libphobos/libdruntime/core/demangle.d
index f08e1f8..f113159 100644
--- a/libphobos/libdruntime/core/demangle.d
+++ b/libphobos/libdruntime/core/demangle.d
@@ -127,7 +127,7 @@ pure @safe:
void putComma(size_t n)
{
- pragma(inline, false);
+ version (DigitalMars) pragma(inline, false);
if (n)
put(", ");
}
@@ -2861,7 +2861,7 @@ private class OverflowException : Exception
/// Ditto
private noreturn error(string msg = "Invalid symbol") @trusted pure
{
- pragma(inline, false); // tame dmd inliner
+ version (DigitalMars) pragma(inline, false); // tame dmd inliner
//throw new ParseException( msg );
debug(info) printf( "error: %.*s\n", cast(int) msg.length, msg.ptr );
@@ -2872,7 +2872,7 @@ private noreturn error(string msg = "Invalid symbol") @trusted pure
/// Ditto
private noreturn overflow(string msg = "Buffer overflow") @trusted pure
{
- pragma(inline, false); // tame dmd inliner
+ version (DigitalMars) pragma(inline, false); // tame dmd inliner
//throw new OverflowException( msg );
debug(info) printf( "overflow: %.*s\n", cast(int) msg.length, msg.ptr );
@@ -2927,7 +2927,7 @@ private struct Buffer
// move val to the end of the dst buffer
char[] shift(scope const(char)[] val) return scope
{
- pragma(inline, false); // tame dmd inliner
+ version (DigitalMars) pragma(inline, false); // tame dmd inliner
if (val.length)
{
@@ -2949,7 +2949,7 @@ private struct Buffer
// remove val from dst buffer
void remove(scope const(char)[] val) scope
{
- pragma(inline, false); // tame dmd inliner
+ version (DigitalMars) pragma(inline, false); // tame dmd inliner
if ( val.length )
{
@@ -2965,7 +2965,7 @@ private struct Buffer
char[] append(scope const(char)[] val) return scope
{
- pragma(inline, false); // tame dmd inliner
+ version (DigitalMars) pragma(inline, false); // tame dmd inliner
if (val.length)
{
diff --git a/libphobos/libdruntime/core/internal/array/appending.d b/libphobos/libdruntime/core/internal/array/appending.d
index b609167..bb24813 100644
--- a/libphobos/libdruntime/core/internal/array/appending.d
+++ b/libphobos/libdruntime/core/internal/array/appending.d
@@ -35,7 +35,7 @@ template _d_arrayappendcTXImpl(Tarr : T[], T)
ref Tarr _d_arrayappendcTX(return ref scope Tarr px, size_t n) @trusted pure nothrow
{
// needed for CTFE: https://github.com/dlang/druntime/pull/3870#issuecomment-1178800718
- pragma(inline, false);
+ version (DigitalMars) pragma(inline, false);
version (D_TypeInfo)
{
auto ti = typeid(Tarr);
@@ -70,7 +70,7 @@ template _d_arrayappendcTXImpl(Tarr : T[], T)
/// Implementation of `_d_arrayappendT`
ref Tarr _d_arrayappendT(Tarr : T[], T)(return ref scope Tarr x, scope Tarr y) @trusted
{
- pragma(inline, false);
+ version (DigitalMars) pragma(inline, false);
import core.stdc.string : memcpy;
import core.internal.traits : hasElaborateCopyConstructor, Unqual;
diff --git a/libphobos/libdruntime/core/internal/array/capacity.d b/libphobos/libdruntime/core/internal/array/capacity.d
index 254e950..10ce2c6 100644
--- a/libphobos/libdruntime/core/internal/array/capacity.d
+++ b/libphobos/libdruntime/core/internal/array/capacity.d
@@ -36,7 +36,7 @@ template _d_arraysetlengthTImpl(Tarr : T[], T)
*/
size_t _d_arraysetlengthT(return scope ref Tarr arr, size_t newlength) @trusted pure nothrow
{
- pragma(inline, false);
+ version (DigitalMars) pragma(inline, false);
version (D_TypeInfo)
{
auto ti = typeid(Tarr);
diff --git a/libphobos/libdruntime/core/internal/array/construction.d b/libphobos/libdruntime/core/internal/array/construction.d
index ae71f51..2508359 100644
--- a/libphobos/libdruntime/core/internal/array/construction.d
+++ b/libphobos/libdruntime/core/internal/array/construction.d
@@ -36,7 +36,7 @@ import core.internal.traits : Unqual;
*/
Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from, char* makeWeaklyPure = null) @trusted
{
- pragma(inline, false);
+ version (DigitalMars) pragma(inline, false);
import core.internal.traits : hasElaborateCopyConstructor;
import core.lifetime : copyEmplace;
import core.stdc.string : memcpy;
@@ -200,7 +200,7 @@ Tarr _d_arrayctor(Tarr : T[], T)(return scope Tarr to, scope Tarr from, char* ma
*/
void _d_arraysetctor(Tarr : T[], T)(scope Tarr p, scope ref T value) @trusted
{
- pragma(inline, false);
+ version (DigitalMars) pragma(inline, false);
import core.lifetime : copyEmplace;
size_t i;
diff --git a/libphobos/libdruntime/core/memory.d b/libphobos/libdruntime/core/memory.d
index 96c2af4..4f44b60 100644
--- a/libphobos/libdruntime/core/memory.d
+++ b/libphobos/libdruntime/core/memory.d
@@ -270,7 +270,7 @@ extern(C):
* reentrant, and must be called once for every call to disable before
* automatic collections are enabled.
*/
- pragma(mangle, "gc_enable") static void enable() nothrow pure;
+ pragma(mangle, "gc_enable") static void enable() @safe nothrow pure;
/**
@@ -280,7 +280,7 @@ extern(C):
* such as during an out of memory condition. This function is reentrant,
* but enable must be called once for each call to disable.
*/
- pragma(mangle, "gc_disable") static void disable() nothrow pure;
+ pragma(mangle, "gc_disable") static void disable() @safe nothrow pure;
/**
@@ -290,14 +290,14 @@ extern(C):
* and then to reclaim free space. This action may need to suspend all
* running threads for at least part of the collection process.
*/
- pragma(mangle, "gc_collect") static void collect() nothrow pure;
+ pragma(mangle, "gc_collect") static void collect() @safe nothrow pure;
/**
* Indicates that the managed memory space be minimized by returning free
* physical memory to the operating system. The amount of free memory
* returned depends on the allocator design and on program behavior.
*/
- pragma(mangle, "gc_minimize") static void minimize() nothrow pure;
+ pragma(mangle, "gc_minimize") static void minimize() @safe nothrow pure;
extern(D):
diff --git a/libphobos/libdruntime/core/sys/windows/basetsd.d b/libphobos/libdruntime/core/sys/windows/basetsd.d
index 3c5c35f..e70dbdc 100644
--- a/libphobos/libdruntime/core/sys/windows/basetsd.d
+++ b/libphobos/libdruntime/core/sys/windows/basetsd.d
@@ -10,39 +10,10 @@
module core.sys.windows.basetsd;
version (Windows):
-/* This template is used in these modules to declare constant pointer types,
- * in order to support both D 1.x and 2.x.
- * Since removed - now supporting only D2
- */
-/*template CPtr(T) {
- version (D_Version2) {
- // must use mixin so that it doesn't cause a syntax error under D1
- mixin("alias const(T)* CPtr;");
- } else {
- alias T* CPtr;
- }
-}*/
-
-/* [CyberShadow VP 2011.12.22] typedef is now deprecated in D2.
- */
-template TypeDef(T) {
- version (D_Version2) {
- alias T TypeDef;
- } else {
- // must use mixin so that it doesn't cause a deprecation error under D2
- mixin("typedef T TypeDef;");
- }
-}
-
// [SnakE 2009-02-23] Moved HANDLE definition here from winnt.d to avoid
// 'forwatd template reference' to CPtr from winnt.d caused by a circular
// import.
-
-alias TypeDef!(void*) HANDLE;
-/+struct HANDLE {
-const(void)* h;
- alias h this;
-}+/
+alias HANDLE = void*;
package template DECLARE_HANDLE(string name, base = HANDLE) {
mixin ("alias " ~ base.stringof ~ " " ~ name ~ ";");
diff --git a/libphobos/libdruntime/core/sys/windows/mmsystem.d b/libphobos/libdruntime/core/sys/windows/mmsystem.d
index 7e7c34b..29c066e 100644
--- a/libphobos/libdruntime/core/sys/windows/mmsystem.d
+++ b/libphobos/libdruntime/core/sys/windows/mmsystem.d
@@ -1049,7 +1049,7 @@ struct MMTIME {
}
alias MMTIME* PMMTIME, LPMMTIME;
-alias TypeDef!(HANDLE) HDRVR;
+alias HANDLE HDRVR;
struct DRVCONFIGINFO {
align(1):
@@ -1083,9 +1083,9 @@ alias MIDICALLBACK* LPMIDICALLBACK;
+/
-alias TypeDef!(HANDLE) HWAVE;
-alias TypeDef!(HANDLE) HWAVEIN;
-alias TypeDef!(HANDLE) HWAVEOUT;
+alias HANDLE HWAVE;
+alias HANDLE HWAVEIN;
+alias HANDLE HWAVEOUT;
alias HWAVEIN* LPHWAVEIN;
alias HWAVEOUT* LPHWAVEOUT;
@@ -1175,10 +1175,10 @@ struct WAVEFORMATEX {
alias WAVEFORMATEX* PWAVEFORMATEX, LPWAVEFORMATEX;
alias const(WAVEFORMATEX)* LPCWAVEFORMATEX;
-alias TypeDef!(HANDLE) HMIDI;
-alias TypeDef!(HANDLE) HMIDIIN;
-alias TypeDef!(HANDLE) HMIDIOUT;
-alias TypeDef!(HANDLE) HMIDISTRM;
+alias HANDLE HMIDI;
+alias HANDLE HMIDIIN;
+alias HANDLE HMIDIOUT;
+alias HANDLE HMIDISTRM;
alias HMIDI* LPHMIDI;
alias HMIDIIN* LPHMIDIIN;
@@ -1295,10 +1295,10 @@ struct AUXCAPSW {
}
alias AUXCAPSW* PAUXCAPSW, LPAUXCAPSW;
-alias TypeDef!(HANDLE) HMIXEROBJ;
+alias HANDLE HMIXEROBJ;
alias HMIXEROBJ* LPHMIXEROBJ;
-alias TypeDef!(HANDLE) HMIXER;
+alias HANDLE HMIXER;
alias HMIXER* LPHMIXER;
struct MIXERCAPSA {
@@ -1595,7 +1595,7 @@ alias JOYINFOEX* PJOYINFOEX, LPJOYINFOEX;
alias DWORD FOURCC;
alias char* HPSTR;
-alias TypeDef!(HANDLE) HMMIO;
+alias HANDLE HMMIO;
alias LRESULT function (LPSTR, UINT, LPARAM, LPARAM) LPMMIOPROC;
diff --git a/libphobos/libdruntime/core/sys/windows/ole.d b/libphobos/libdruntime/core/sys/windows/ole.d
index c29ec50..a844124 100644
--- a/libphobos/libdruntime/core/sys/windows/ole.d
+++ b/libphobos/libdruntime/core/sys/windows/ole.d
@@ -257,7 +257,7 @@ struct OLESERVERVTBL {
OLESTATUS function(LPOLESERVER) Release;
OLESTATUS function(LPOLESERVER, HGLOBAL) Execute;
}
-alias TypeDef!(OLESERVERVTBL*) LPOLESERVERVTBL;
+alias OLESERVERVTBL* LPOLESERVERVTBL;
struct OLESERVER {
LPOLESERVERVTBL lpvtbl;
diff --git a/libphobos/libdruntime/core/sys/windows/ras.d b/libphobos/libdruntime/core/sys/windows/ras.d
index cb69686..4561799 100644
--- a/libphobos/libdruntime/core/sys/windows/ras.d
+++ b/libphobos/libdruntime/core/sys/windows/ras.d
@@ -223,7 +223,7 @@ enum RASPROJECTION {
}
alias RASPROJECTION* LPRASPROJECTION;
-alias TypeDef!(HANDLE) HRASCONN;
+alias HANDLE HRASCONN;
alias HRASCONN* LPHRASCONN;
struct RASCONNW {
diff --git a/libphobos/libdruntime/core/sys/windows/rpcdcep.d b/libphobos/libdruntime/core/sys/windows/rpcdcep.d
index cebe981..71b82be 100644
--- a/libphobos/libdruntime/core/sys/windows/rpcdcep.d
+++ b/libphobos/libdruntime/core/sys/windows/rpcdcep.d
@@ -97,7 +97,7 @@ const(void)* InterpreterInfo;
}
alias RPC_CLIENT_INTERFACE* PRPC_CLIENT_INTERFACE;
-alias TypeDef!(void*) I_RPC_MUTEX;
+alias void* I_RPC_MUTEX;
struct RPC_TRANSFER_SYNTAX {
GUID Uuid;
diff --git a/libphobos/libdruntime/core/sys/windows/rpcndr.d b/libphobos/libdruntime/core/sys/windows/rpcndr.d
index 127d88b..f5744ec 100644
--- a/libphobos/libdruntime/core/sys/windows/rpcndr.d
+++ b/libphobos/libdruntime/core/sys/windows/rpcndr.d
@@ -387,7 +387,7 @@ enum PROXY_PHASE {
PROXY_UNMARSHAL
}
-alias TypeDef!(void *) RPC_SS_THREAD_HANDLE;
+alias void * RPC_SS_THREAD_HANDLE;
extern (Windows) {
alias void function (void*) NDR_RUNDOWN;
diff --git a/libphobos/libdruntime/core/sys/windows/sqltypes.d b/libphobos/libdruntime/core/sys/windows/sqltypes.d
index 28d5f5d..e86834f 100644
--- a/libphobos/libdruntime/core/sys/windows/sqltypes.d
+++ b/libphobos/libdruntime/core/sys/windows/sqltypes.d
@@ -32,7 +32,7 @@ alias UDWORD SQLUINTEGER;
// #endif
//static if (ODBCVER >= 0x0300) {
-alias TypeDef!(HANDLE) SQLHANDLE;
+alias HANDLE SQLHANDLE;
alias SQLHANDLE SQLHENV, SQLHDBC, SQLHSTMT, SQLHDESC;
/*
} else {
diff --git a/libphobos/libdruntime/core/sys/windows/vfw.d b/libphobos/libdruntime/core/sys/windows/vfw.d
index ebe0ed0..e8ca74e 100644
--- a/libphobos/libdruntime/core/sys/windows/vfw.d
+++ b/libphobos/libdruntime/core/sys/windows/vfw.d
@@ -38,7 +38,7 @@ DWORD MKFOURCC(char ch0, char ch1, char ch2, char ch3) {
enum ICVERSION = 0x0104;
-alias TypeDef!(HANDLE) HIC;
+alias HANDLE HIC;
enum BI_1632 = 0x32333631;
@@ -1045,7 +1045,7 @@ DECLARE_INTERFACE_(IAVIStream, IUnknown)
#endif
};
-alias TypeDef!(IAVIStream FAR*) PAVISTREAM;
+alias IAVIStream FAR* PAVISTREAM;
#undef INTERFACE
#define INTERFACE IAVIStreaming
@@ -1063,7 +1063,7 @@ DECLARE_INTERFACE_(IAVIStreaming, IUnknown)
STDMETHOD(End) (THIS) PURE;
};
-alias TypeDef!(IAVIStreaming FAR*) PAVISTREAMING;
+alias IAVIStreaming FAR* PAVISTREAMING;
#undef INTERFACE
@@ -1091,7 +1091,7 @@ DECLARE_INTERFACE_(IAVIEditStream, IUnknown)
LONG cbInfo) PURE;
};
-alias TypeDef!(IAVIEditStream FAR*) PAVIEDITSTREAM;
+alias IAVIEditStream FAR* PAVIEDITSTREAM;
#undef INTERFACE
#define INTERFACE IAVIPersistFile
@@ -1101,7 +1101,7 @@ DECLARE_INTERFACE_(IAVIPersistFile, IPersistFile)
STDMETHOD(Reserved1)(THIS) PURE;
};
-alias TypeDef!(IAVIPersistFile FAR*) PAVIPERSISTFILE;
+alias IAVIPersistFile FAR* PAVIPERSISTFILE;
#undef INTERFACE
#define INTERFACE IAVIFile
@@ -1138,7 +1138,7 @@ DECLARE_INTERFACE_(IAVIFile, IUnknown)
};
#undef PAVIFILE
-alias TypeDef!(IAVIFile FAR*) PAVIFILE;
+alias IAVIFile FAR* PAVIFILE;
#undef INTERFACE
#define INTERFACE IGetFrame
@@ -1159,7 +1159,7 @@ DECLARE_INTERFACE_(IGetFrame, IUnknown)
};
#undef PGETFRAME
-alias TypeDef!(IGetFrame FAR*) PGETFRAME;
+alias IGetFrame FAR* PGETFRAME;
#define DEFINE_AVIGUID(name, l, w1, w2) DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
@@ -1825,7 +1825,7 @@ enum {
MCI_MODE_OPEN,
}
-alias TypeDef!(HANDLE) HVIDEO;
+alias HANDLE HVIDEO;
alias HVIDEO* LPHVIDEO;
// Error Return Values
diff --git a/libphobos/libdruntime/core/sys/windows/winbase.d b/libphobos/libdruntime/core/sys/windows/winbase.d
index bbb6e9a..2e32ba2 100644
--- a/libphobos/libdruntime/core/sys/windows/winbase.d
+++ b/libphobos/libdruntime/core/sys/windows/winbase.d
@@ -408,7 +408,7 @@ enum : DWORD {
STD_ERROR_HANDLE = 0xFFFFFFF4
}
-enum HANDLE INVALID_HANDLE_VALUE = cast(HANDLE) (-1);
+@trusted enum HANDLE INVALID_HANDLE_VALUE = cast(HANDLE) (-1);
enum : DWORD {
GET_TAPE_MEDIA_INFORMATION = 0,
diff --git a/libphobos/libdruntime/core/sys/windows/wingdi.d b/libphobos/libdruntime/core/sys/windows/wingdi.d
index 5a4eeaa..c7b0c8b 100644
--- a/libphobos/libdruntime/core/sys/windows/wingdi.d
+++ b/libphobos/libdruntime/core/sys/windows/wingdi.d
@@ -2425,11 +2425,11 @@ struct EMRARC {
POINTL ptlEnd;
}
alias EMRARC* PEMRARC;
-alias TypeDef!(EMRARC) EMRARCTO;
+alias EMRARC EMRARCTO;
alias EMRARCTO* PEMRARCTO;
-alias TypeDef!(EMRARC) EMRCHORD;
+alias EMRARC EMRCHORD;
alias EMRCHORD* PEMRCHORD;
-alias TypeDef!(EMRARC) EMRPIE;
+alias EMRARC EMRPIE;
alias EMRPIE* PEMRPIE;
struct XFORM {
@@ -2467,7 +2467,7 @@ struct LOGBRUSH {
COLORREF lbColor;
ULONG_PTR lbHatch;
}
-alias TypeDef!(LOGBRUSH) PATTERN;
+alias LOGBRUSH PATTERN;
alias LOGBRUSH* PLOGBRUSH, NPLOGBRUSH, LPLOGBRUSH;
alias PATTERN* PPATTERN, NPPATTERN, LPPATTERN;
@@ -2559,9 +2559,9 @@ struct EMRSETCOLORSPACE {
DWORD ihCS;
}
alias EMRSETCOLORSPACE* PEMRSETCOLORSPACE;
-alias TypeDef!(EMRSETCOLORSPACE) EMRSELECTCOLORSPACE;
+alias EMRSETCOLORSPACE EMRSELECTCOLORSPACE;
alias EMRSELECTCOLORSPACE* PEMRSELECTCOLORSPACE;
-alias TypeDef!(EMRSETCOLORSPACE) EMRDELETECOLORSPACE;
+alias EMRSETCOLORSPACE EMRDELETECOLORSPACE;
alias EMRDELETECOLORSPACE* PEMRDELETECOLORSPACE;
static if (_WIN32_WINNT >= 0x500) {
@@ -2573,7 +2573,7 @@ static if (_WIN32_WINNT >= 0x500) {
BYTE[1] EscData;
}
alias EMREXTESCAPE* PEMREXTESCAPE;
- alias TypeDef!(EMREXTESCAPE) EMRDRAWESCAPE;
+ alias EMREXTESCAPE EMRDRAWESCAPE;
alias EMRDRAWESCAPE* PEMRDRAWESCAPE;
struct EMRNAMEDESCAPE {
@@ -2593,9 +2593,9 @@ static if (_WIN32_WINNT >= 0x500) {
BYTE[1] Data;
}
alias EMRSETICMPROFILE* PEMRSETICMPROFILE;
- alias TypeDef!(EMRSETICMPROFILE) EMRSETICMPROFILEA;
+ alias EMRSETICMPROFILE EMRSETICMPROFILEA;
alias EMRSETICMPROFILEA* PEMRSETICMPROFILEA;
- alias TypeDef!(EMRSETICMPROFILE) EMRSETICMPROFILEW;
+ alias EMRSETICMPROFILE EMRSETICMPROFILEW;
alias EMRSETICMPROFILEW* PEMRSETICMPROFILEW;
struct EMRCREATECOLORSPACEW {
@@ -2739,7 +2739,7 @@ struct EMRELLIPSE {
}
alias EMRELLIPSE* PEMRELLIPSE;
-alias TypeDef!(EMRELLIPSE) EMRRECTANGLE;
+alias EMRELLIPSE EMRRECTANGLE;
alias EMRRECTANGLE* PEMRRECTANGLE;
struct EMREOF {
@@ -2755,7 +2755,7 @@ struct EMREXCLUDECLIPRECT {
RECTL rclClip;
}
alias EMREXCLUDECLIPRECT* PEMREXCLUDECLIPRECT;
-alias TypeDef!(EMREXCLUDECLIPRECT) EMRINTERSECTCLIPRECT;
+alias EMREXCLUDECLIPRECT EMRINTERSECTCLIPRECT;
alias EMRINTERSECTCLIPRECT* PEMRINTERSECTCLIPRECT;
struct EMREXTCREATEFONTINDIRECTW {
@@ -2833,7 +2833,7 @@ struct EMREXTTEXTOUTA {
EMRTEXT emrtext;
}
alias EMREXTTEXTOUTA* PEMREXTTEXTOUTA;
-alias TypeDef!(EMREXTTEXTOUTA) EMREXTTEXTOUTW;
+alias EMREXTTEXTOUTA EMREXTTEXTOUTW;
alias EMREXTTEXTOUTW* PEMREXTTEXTOUTW;
struct EMRFILLPATH {
@@ -2842,10 +2842,10 @@ struct EMRFILLPATH {
}
alias EMRFILLPATH* PEMRFILLPATH;
-alias TypeDef!(EMRFILLPATH) EMRSTROKEANDFILLPATH;
+alias EMRFILLPATH EMRSTROKEANDFILLPATH;
alias EMRSTROKEANDFILLPATH* PEMRSTROKEANDFILLPATH;
-alias TypeDef!(EMRFILLPATH) EMRSTROKEPATH;
+alias EMRFILLPATH EMRSTROKEPATH;
alias EMRSTROKEPATH* PEMRSTROKEPATH;
struct EMRFILLRGN {
@@ -2889,7 +2889,7 @@ struct EMRINVERTRGN {
BYTE[1] RgnData;
}
alias EMRINVERTRGN* PEMRINVERTRGN;
-alias TypeDef!(EMRINVERTRGN) EMRPAINTRGN;
+alias EMRINVERTRGN EMRPAINTRGN;
alias EMRPAINTRGN* PEMRPAINTRGN;
struct EMRLINETO {
@@ -2897,7 +2897,7 @@ struct EMRLINETO {
POINTL ptl;
}
alias EMRLINETO* PEMRLINETO;
-alias TypeDef!(EMRLINETO) EMRMOVETOEX;
+alias EMRLINETO EMRMOVETOEX;
alias EMRMOVETOEX* PEMRMOVETOEX;
struct EMRMASKBLT {
@@ -2990,13 +2990,13 @@ struct EMRPOLYLINE {
POINTL[1] aptl;
}
alias EMRPOLYLINE* PEMRPOLYLINE;
-alias TypeDef!(EMRPOLYLINE) EMRPOLYBEZIER;
+alias EMRPOLYLINE EMRPOLYBEZIER;
alias EMRPOLYBEZIER* PEMRPOLYBEZIER;
-alias TypeDef!(EMRPOLYLINE) EMRPOLYGON;
+alias EMRPOLYLINE EMRPOLYGON;
alias EMRPOLYGON* PEMRPOLYGON;
-alias TypeDef!(EMRPOLYLINE) EMRPOLYBEZIERTO;
+alias EMRPOLYLINE EMRPOLYBEZIERTO;
alias EMRPOLYBEZIERTO* PEMRPOLYBEZIERTO;
-alias TypeDef!(EMRPOLYLINE) EMRPOLYLINETO;
+alias EMRPOLYLINE EMRPOLYLINETO;
alias EMRPOLYLINETO* PEMRPOLYLINETO;
struct EMRPOLYLINE16 {
@@ -3006,13 +3006,13 @@ struct EMRPOLYLINE16 {
POINTS[1] apts;
}
alias EMRPOLYLINE16* PEMRPOLYLINE16;
-alias TypeDef!(EMRPOLYLINE16) EMRPOLYBEZIER16;
+alias EMRPOLYLINE16 EMRPOLYBEZIER16;
alias EMRPOLYBEZIER16* PEMRPOLYBEZIER16;
-alias TypeDef!(EMRPOLYLINE16) EMRPOLYGON16;
+alias EMRPOLYLINE16 EMRPOLYGON16;
alias EMRPOLYGON16* PEMRPOLYGON16;
-alias TypeDef!(EMRPOLYLINE16) EMRPOLYBEZIERTO16;
+alias EMRPOLYLINE16 EMRPOLYBEZIERTO16;
alias EMRPOLYBEZIERTO16* PEMRPOLYBEZIERTO16;
-alias TypeDef!(EMRPOLYLINE16) EMRPOLYLINETO16;
+alias EMRPOLYLINE16 EMRPOLYLINETO16;
alias EMRPOLYLINETO16* PEMRPOLYLINETO16;
struct EMRPOLYPOLYLINE {
@@ -3024,7 +3024,7 @@ struct EMRPOLYPOLYLINE {
POINTL[1] aptl;
}
alias EMRPOLYPOLYLINE* PEMRPOLYPOLYLINE;
-alias TypeDef!(EMRPOLYPOLYLINE) EMRPOLYPOLYGON;
+alias EMRPOLYPOLYLINE EMRPOLYPOLYGON;
alias EMRPOLYPOLYGON* PEMRPOLYPOLYGON;
struct EMRPOLYPOLYLINE16 {
@@ -3036,7 +3036,7 @@ struct EMRPOLYPOLYLINE16 {
POINTS[1] apts;
}
alias EMRPOLYPOLYLINE16* PEMRPOLYPOLYLINE16;
-alias TypeDef!(EMRPOLYPOLYLINE16) EMRPOLYPOLYGON16;
+alias EMRPOLYPOLYLINE16 EMRPOLYPOLYGON16;
alias EMRPOLYPOLYGON16* PEMRPOLYPOLYGON16;
struct EMRPOLYTEXTOUTA {
@@ -3049,7 +3049,7 @@ struct EMRPOLYTEXTOUTA {
EMRTEXT[1] aemrtext;
}
alias EMRPOLYTEXTOUTA* PEMRPOLYTEXTOUTA;
-alias TypeDef!(EMRPOLYTEXTOUTA) EMRPOLYTEXTOUTW;
+alias EMRPOLYTEXTOUTA EMRPOLYTEXTOUTW;
alias EMRPOLYTEXTOUTW* PEMRPOLYTEXTOUTW;
struct EMRRESIZEPALETTE {
@@ -3080,7 +3080,7 @@ struct EMRSCALEVIEWPORTEXTEX {
LONG yDenom;
}
alias EMRSCALEVIEWPORTEXTEX* PEMRSCALEVIEWPORTEXTEX;
-alias TypeDef!(EMRSCALEVIEWPORTEXTEX) EMRSCALEWINDOWEXTEX;
+alias EMRSCALEVIEWPORTEXTEX EMRSCALEWINDOWEXTEX;
alias EMRSCALEWINDOWEXTEX* PEMRSCALEWINDOWEXTEX;
struct EMRSELECTOBJECT {
@@ -3088,7 +3088,7 @@ struct EMRSELECTOBJECT {
DWORD ihObject;
}
alias EMRSELECTOBJECT* PEMRSELECTOBJECT;
-alias TypeDef!(EMRSELECTOBJECT) EMRDELETEOBJECT;
+alias EMRSELECTOBJECT EMRDELETEOBJECT;
alias EMRDELETEOBJECT* PEMRDELETEOBJECT;
struct EMRSELECTPALETTE {
@@ -3108,7 +3108,7 @@ struct EMRSETTEXTCOLOR {
COLORREF crColor;
}
alias EMRSETTEXTCOLOR* PEMRSETTEXTCOLOR;
-alias TypeDef!(EMRSETTEXTCOLOR) EMRSETBKCOLOR;
+alias EMRSETTEXTCOLOR EMRSETBKCOLOR;
alias EMRSETBKCOLOR* PEMRSETBKCOLOR;
struct EMRSETCOLORADJUSTMENT {
@@ -3169,7 +3169,7 @@ struct EMRSETVIEWPORTEXTEX {
SIZEL szlExtent;
}
alias EMRSETVIEWPORTEXTEX* PEMRSETVIEWPORTEXTEX;
-alias TypeDef!(EMRSETVIEWPORTEXTEX) EMRSETWINDOWEXTEX;
+alias EMRSETVIEWPORTEXTEX EMRSETWINDOWEXTEX;
alias EMRSETWINDOWEXTEX* PEMRSETWINDOWEXTEX;
struct EMRSETVIEWPORTORGEX {
@@ -3177,9 +3177,9 @@ struct EMRSETVIEWPORTORGEX {
POINTL ptlOrigin;
}
alias EMRSETVIEWPORTORGEX* PEMRSETVIEWPORTORGEX;
-alias TypeDef!(EMRSETVIEWPORTORGEX) EMRSETWINDOWORGEX;
+alias EMRSETVIEWPORTORGEX EMRSETWINDOWORGEX;
alias EMRSETWINDOWORGEX* PEMRSETWINDOWORGEX;
-alias TypeDef!(EMRSETVIEWPORTORGEX) EMRSETBRUSHORGEX;
+alias EMRSETVIEWPORTORGEX EMRSETBRUSHORGEX;
alias EMRSETBRUSHORGEX* PEMRSETBRUSHORGEX;
struct EMRSETWORLDTRANSFORM {
@@ -3234,21 +3234,21 @@ struct EMRABORTPATH {
EMR emr;
}
alias EMRABORTPATH* PEMRABORTPATH;
-alias TypeDef!(EMRABORTPATH) EMRBEGINPATH;
+alias EMRABORTPATH EMRBEGINPATH;
alias EMRBEGINPATH* PEMRBEGINPATH;
-alias TypeDef!(EMRABORTPATH) EMRENDPATH;
+alias EMRABORTPATH EMRENDPATH;
alias EMRENDPATH* PEMRENDPATH;
-alias TypeDef!(EMRABORTPATH) EMRCLOSEFIGURE;
+alias EMRABORTPATH EMRCLOSEFIGURE;
alias EMRCLOSEFIGURE* PEMRCLOSEFIGURE;
-alias TypeDef!(EMRABORTPATH) EMRFLATTENPATH;
+alias EMRABORTPATH EMRFLATTENPATH;
alias EMRFLATTENPATH* PEMRFLATTENPATH;
-alias TypeDef!(EMRABORTPATH) EMRWIDENPATH;
+alias EMRABORTPATH EMRWIDENPATH;
alias EMRWIDENPATH* PEMRWIDENPATH;
-alias TypeDef!(EMRABORTPATH) EMRSETMETARGN;
+alias EMRABORTPATH EMRSETMETARGN;
alias EMRSETMETARGN* PEMRSETMETARGN;
-alias TypeDef!(EMRABORTPATH) EMRSAVEDC;
+alias EMRABORTPATH EMRSAVEDC;
alias EMRSAVEDC* PEMRSAVEDC;
-alias TypeDef!(EMRABORTPATH) EMRREALIZEPALETTE;
+alias EMRABORTPATH EMRREALIZEPALETTE;
alias EMRREALIZEPALETTE* PEMRREALIZEPALETTE;
struct EMRSELECTCLIPPATH {
@@ -3256,24 +3256,24 @@ struct EMRSELECTCLIPPATH {
DWORD iMode;
}
alias EMRSELECTCLIPPATH* PEMRSELECTCLIPPATH;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETBKMODE;
+alias EMRSELECTCLIPPATH EMRSETBKMODE;
alias EMRSETBKMODE* PEMRSETBKMODE;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETMAPMODE;
+alias EMRSELECTCLIPPATH EMRSETMAPMODE;
alias EMRSETMAPMODE* PEMRSETMAPMODE;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETPOLYFILLMODE;
+alias EMRSELECTCLIPPATH EMRSETPOLYFILLMODE;
alias EMRSETPOLYFILLMODE* PEMRSETPOLYFILLMODE;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETROP2;
+alias EMRSELECTCLIPPATH EMRSETROP2;
alias EMRSETROP2* PEMRSETROP2;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETSTRETCHBLTMODE;
+alias EMRSELECTCLIPPATH EMRSETSTRETCHBLTMODE;
alias EMRSETSTRETCHBLTMODE* PEMRSETSTRETCHBLTMODE;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETICMMODE;
+alias EMRSELECTCLIPPATH EMRSETICMMODE;
alias EMRSETICMMODE* PEMRSETICMMODE;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRSETTEXTALIGN;
+alias EMRSELECTCLIPPATH EMRSETTEXTALIGN;
alias EMRSETTEXTALIGN* PEMRSETTEXTALIGN;
-alias TypeDef!(EMRSELECTCLIPPATH) EMRENABLEICM;
+alias EMRSELECTCLIPPATH EMRENABLEICM;
alias EMRENABLEICM* PEMRENABLEICM;
static if (_WIN32_WINNT >= 0x500) {
- alias TypeDef!(EMRSELECTCLIPPATH) EMRSETLAYOUT;
+ alias EMRSELECTCLIPPATH EMRSETLAYOUT;
alias EMRSETLAYOUT* PEMRSETLAYOUT;
}
diff --git a/libphobos/libdruntime/core/sys/windows/winuser.d b/libphobos/libdruntime/core/sys/windows/winuser.d
index 71cd882..829952d 100644
--- a/libphobos/libdruntime/core/sys/windows/winuser.d
+++ b/libphobos/libdruntime/core/sys/windows/winuser.d
@@ -3421,7 +3421,7 @@ align(4) LUID luid;
}
alias BSMINFO* PBSMINFO;
- alias TypeDef!(HANDLE) HRAWINPUT;
+ alias HANDLE HRAWINPUT;
struct RAWINPUTHEADER {
DWORD dwType;
@@ -4155,7 +4155,7 @@ extern (C) {
// These shouldn't be necessary for D.
-alias TypeDef!(char*) va_list_;
+alias char* va_list_;
int wvsprintfA(LPSTR, LPCSTR, va_list_ arglist);
int wvsprintfW(LPWSTR, LPCWSTR, va_list_ arglist);
diff --git a/libphobos/libdruntime/object.d b/libphobos/libdruntime/object.d
index b0889b6..f3af209 100644
--- a/libphobos/libdruntime/object.d
+++ b/libphobos/libdruntime/object.d
@@ -748,7 +748,7 @@ class TypeInfo
/** Return info used by the garbage collector to do precise collection.
*/
- @property immutable(void)* rtInfo() nothrow pure const @safe @nogc { return rtinfoHasPointers; } // better safe than sorry
+ @property immutable(void)* rtInfo() nothrow pure const @trusted @nogc { return rtinfoHasPointers; } // better safe than sorry
}
@system unittest
@@ -2929,6 +2929,25 @@ void clear(Value, Key)(Value[Key]* aa)
assert("k1" !in aa);
}
+// Issue 20559
+@system unittest
+{
+ static class Foo
+ {
+ int[string] aa;
+ alias aa this;
+ }
+
+ auto v = new Foo();
+ v["Hello World"] = 42;
+ v.clear;
+ assert("Hello World" !in v);
+
+ // Test for T*
+ static assert(!__traits(compiles, (&v).clear));
+ static assert( __traits(compiles, (*(&v)).clear));
+}
+
/***********************************
* Reorganizes the associative array in place so that lookups are more
* efficient.
@@ -4294,6 +4313,44 @@ void destroy(bool initialize = true, T)(T obj) if (is(T == interface))
@system unittest
{
+ // class with an `alias this`
+ class A
+ {
+ static int dtorCount;
+ ~this()
+ {
+ dtorCount++;
+ }
+ }
+
+ class B
+ {
+ A a;
+ alias a this;
+ this()
+ {
+ a = new A;
+ }
+ static int dtorCount;
+ ~this()
+ {
+ dtorCount++;
+ }
+ }
+ auto b = new B;
+ assert(A.dtorCount == 0);
+ assert(B.dtorCount == 0);
+ destroy(b);
+ assert(A.dtorCount == 0);
+ assert(B.dtorCount == 1);
+
+ auto a = new A;
+ destroy(a);
+ assert(A.dtorCount == 1);
+}
+
+@system unittest
+{
interface I { }
{
class A: I { string s = "A"; this() {} }
@@ -4505,6 +4562,43 @@ if (__traits(isStaticArray, T))
}
}
+// https://issues.dlang.org/show_bug.cgi?id=19218
+@system unittest
+{
+ static struct S
+ {
+ static dtorCount = 0;
+ ~this() { ++dtorCount; }
+ }
+
+ static interface I
+ {
+ ref S[3] getArray();
+ alias getArray this;
+ }
+
+ static class C : I
+ {
+ static dtorCount = 0;
+ ~this() { ++dtorCount; }
+
+ S[3] a;
+ alias a this;
+
+ ref S[3] getArray() { return a; }
+ }
+
+ C c = new C();
+ destroy(c);
+ assert(S.dtorCount == 3);
+ assert(C.dtorCount == 1);
+
+ I i = new C();
+ destroy(i);
+ assert(S.dtorCount == 6);
+ assert(C.dtorCount == 2);
+}
+
/// ditto
void destroy(bool initialize = true, T)(ref T obj)
if (!is(T == struct) && !is(T == interface) && !is(T == class) && !__traits(isStaticArray, T))