diff options
author | Iain Buclaw <ibuclaw@gdcproject.org> | 2023-09-23 12:27:26 +0200 |
---|---|---|
committer | Iain Buclaw <ibuclaw@gdcproject.org> | 2023-09-23 13:01:16 +0200 |
commit | d6679fa2d65316e80a267c94c17ad9e23f433f77 (patch) | |
tree | eca9ecef18b21760629c54620785c18bc4452bbd /libphobos/libdruntime | |
parent | 59d27cc55a0588ed7b03bef804662cb844e8a24d (diff) | |
download | gcc-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')
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)) |