From 82a918cbd86ba937fd067ca89beacbb7cac70f51 Mon Sep 17 00:00:00 2001 From: Brad Roberts Date: Wed, 13 Apr 2016 15:15:56 -0700 Subject: [PATCH 1/4] Merge pull request #4196 from CyberShadow/pull-20160413-210023 std.datetime: Update Windows time zones for KB3148851 --- std/datetime.d | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/std/datetime.d b/std/datetime.d index 85e57658d..b33e2d38e 100644 --- a/std/datetime.d +++ b/std/datetime.d @@ -30439,11 +30439,12 @@ string tzDatabaseNameToWindowsTZName(string tzName) @safe pure nothrow @nogc case "Asia/Bahrain": return "Arab Standard Time"; case "Asia/Baku": return "Azerbaijan Standard Time"; case "Asia/Bangkok": return "SE Asia Standard Time"; + case "Asia/Barnaul": return "Altai Standard Time"; case "Asia/Beirut": return "Middle East Standard Time"; case "Asia/Bishkek": return "Central Asia Standard Time"; case "Asia/Brunei": return "Singapore Standard Time"; case "Asia/Calcutta": return "India Standard Time"; - case "Asia/Chita": return "North Asia East Standard Time"; + case "Asia/Chita": return "Transbaikal Standard Time"; case "Asia/Choibalsan": return "Ulaanbaatar Standard Time"; case "Asia/Colombo": return "Sri Lanka Standard Time"; case "Asia/Damascus": return "Syria Standard Time"; @@ -30484,7 +30485,7 @@ string tzDatabaseNameToWindowsTZName(string tzName) @safe pure nothrow @nogc case "Asia/Rangoon": return "Myanmar Standard Time"; case "Asia/Riyadh": return "Arab Standard Time"; case "Asia/Saigon": return "SE Asia Standard Time"; - case "Asia/Sakhalin": return "Vladivostok Standard Time"; + case "Asia/Sakhalin": return "Sakhalin Standard Time"; case "Asia/Samarkand": return "West Asia Standard Time"; case "Asia/Seoul": return "Korea Standard Time"; case "Asia/Shanghai": return "China Standard Time"; @@ -30553,6 +30554,7 @@ string tzDatabaseNameToWindowsTZName(string tzName) @safe pure nothrow @nogc case "Etc/GMT-9": return "Tokyo Standard Time"; case "Europe/Amsterdam": return "W. Europe Standard Time"; case "Europe/Andorra": return "W. Europe Standard Time"; + case "Europe/Astrakhan": return "Astrakhan Standard Time"; case "Europe/Athens": return "GTB Standard Time"; case "Europe/Belgrade": return "Central Europe Standard Time"; case "Europe/Berlin": return "W. Europe Standard Time"; @@ -30691,10 +30693,12 @@ string windowsTZNameToTZDatabaseName(string tzName) @safe pure nothrow @nogc case "AUS Eastern Standard Time": return "Australia/Sydney"; case "Afghanistan Standard Time": return "Asia/Kabul"; case "Alaskan Standard Time": return "America/Anchorage"; + case "Altai Standard Time": return "Asia/Barnaul"; case "Arab Standard Time": return "Asia/Riyadh"; case "Arabian Standard Time": return "Asia/Dubai"; case "Arabic Standard Time": return "Asia/Baghdad"; case "Argentina Standard Time": return "America/Buenos_Aires"; + case "Astrakhan Standard Time": return "Europe/Astrakhan"; case "Atlantic Standard Time": return "America/Halifax"; case "Azerbaijan Standard Time": return "Asia/Baku"; case "Azores Standard Time": return "Atlantic/Azores"; @@ -30780,6 +30784,7 @@ string windowsTZNameToTZDatabaseName(string tzName) @safe pure nothrow @nogc case "SA Pacific Standard Time": return "America/Bogota"; case "SA Western Standard Time": return "America/La_Paz"; case "SE Asia Standard Time": return "Asia/Bangkok"; + case "Sakhalin Standard Time": return "Asia/Sakhalin"; case "Samoa Standard Time": return "Pacific/Apia"; case "Singapore Standard Time": return "Asia/Singapore"; case "South Africa Standard Time": return "Africa/Johannesburg"; @@ -30789,6 +30794,7 @@ string windowsTZNameToTZDatabaseName(string tzName) @safe pure nothrow @nogc case "Tasmania Standard Time": return "Australia/Hobart"; case "Tokyo Standard Time": return "Asia/Tokyo"; case "Tonga Standard Time": return "Pacific/Tongatapu"; + case "Transbaikal Standard Time": return "Asia/Chita"; case "Turkey Standard Time": return "Europe/Istanbul"; case "US Eastern Standard Time": return "America/Indianapolis"; case "US Mountain Standard Time": return "America/Phoenix"; From 4a21631a0f35c75b2e22031248245f362c1a021d Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Thu, 14 Apr 2016 10:01:50 +0200 Subject: [PATCH 2/4] fix issue 15914 --- std/getopt.d | 59 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/std/getopt.d b/std/getopt.d index 5d49cb464..c508243e4 100644 --- a/std/getopt.d +++ b/std/getopt.d @@ -534,7 +534,7 @@ follow this pattern: [config override], option, [description], receiver, - config override: a config value, optional - - option: a string + - option: a string or a char - description: a string, optional - receiver: a pointer or a callable */ @@ -545,6 +545,7 @@ private template optionValidator(A...) enum fmt = "getopt validator: %s (at position %d)"; enum isReceiver(T) = isPointer!T || (is(T==function)) || (is(T==delegate)); + enum isOptionStr(T) = isSomeString!T || isSomeChar!T; auto validator() { @@ -555,24 +556,24 @@ private template optionValidator(A...) { msg = format(fmt, "first argument must be a string or a config", 0); } - else static if (!isSomeString!(A[0]) && !is(A[0] == config)) + else static if (!isOptionStr!(A[0]) && !is(A[0] == config)) { - msg = format(fmt, "invalid argument type " ~ A[0].stringof, 0); + msg = format(fmt, "invalid argument type: " ~ A[0].stringof, 0); } else foreach(i; staticIota!(1, A.length)) { - static if (!isReceiver!(A[i]) && !isSomeString!(A[i]) && + static if (!isReceiver!(A[i]) && !isOptionStr!(A[i]) && !(is(A[i] == config))) { - msg = format(fmt, "invalid argument type " ~ A[i].stringof, i); + msg = format(fmt, "invalid argument type: " ~ A[i].stringof, i); break; } - else static if (isReceiver!(A[i]) && !isSomeString!(A[i-1])) + else static if (isReceiver!(A[i]) && !isOptionStr!(A[i-1])) { msg = format(fmt, "a receiver can not be preceeded by a receiver", i); break; } - else static if (i > 1 && isSomeString!(A[i]) && isSomeString!(A[i-1]) + else static if (i > 1 && isOptionStr!(A[i]) && isOptionStr!(A[i-1]) && isSomeString!(A[i-2])) { msg = format(fmt, "a string can not be preceeded by two strings", i); @@ -595,12 +596,31 @@ private template optionValidator(A...) { alias P = void*; alias S = string; + alias A = char; alias C = config; alias F = void function(); + static assert(optionValidator!(S,P) == ""); + static assert(optionValidator!(S,F) == ""); + static assert(optionValidator!(A,P) == ""); + static assert(optionValidator!(A,F) == ""); + + static assert(optionValidator!(C,S,P) == ""); + static assert(optionValidator!(C,S,F) == ""); + static assert(optionValidator!(C,A,P) == ""); + static assert(optionValidator!(C,A,F) == ""); + + static assert(optionValidator!(C,S,S,P) == ""); + static assert(optionValidator!(C,S,S,F) == ""); + static assert(optionValidator!(C,A,S,P) == ""); + static assert(optionValidator!(C,A,S,F) == ""); + static assert(optionValidator!(C,S,S,P) == ""); static assert(optionValidator!(C,S,S,P,C,S,F) == ""); - static assert(optionValidator!(C,S,S,P,C,S,F) == ""); + static assert(optionValidator!(C,S,P,C,S,S,F) == ""); + + static assert(optionValidator!(C,A,P,A,S,F) == ""); + static assert(optionValidator!(C,A,P,C,A,S,F) == ""); static assert(optionValidator!(P,S,S) != ""); static assert(optionValidator!(P,P,S) != ""); @@ -609,6 +629,29 @@ private template optionValidator(A...) static assert(optionValidator!(S,S,P,S,S,P,S) != ""); static assert(optionValidator!(S,S,P,P) != ""); static assert(optionValidator!(S,S,S,P) != ""); + + static assert(optionValidator!(C,A,S,P,C,A,F) == ""); + static assert(optionValidator!(C,A,P,C,A,S,F) == ""); +} + +unittest // bugzilla 15914 +{ + bool opt; + string[] args = ["program", "-a"]; + getopt(args, config.passThrough, 'a', &opt); + assert(opt); + opt = false; + args = ["program", "-a"]; + getopt(args, 'a', &opt); + assert(opt); + opt = false; + args = ["program", "-a"]; + getopt(args, 'a', "help string", &opt); + assert(opt); + opt = false; + args = ["program", "-a"]; + getopt(args, config.caseSensitive, 'a', "help string", &opt); + assert(opt); } private void getoptImpl(T...)(ref string[] args, ref configuration cfg, From 259e1dd9e03c979610ff6a393313bc6096503b49 Mon Sep 17 00:00:00 2001 From: Brian Schott Date: Fri, 13 May 2016 00:57:09 -0700 Subject: [PATCH 3/4] Merge pull request #4317 from BBasile/fix_wtz hotfix (tester) - Easter Island & Haiti Windows time zone --- std/datetime.d | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/std/datetime.d b/std/datetime.d index b33e2d38e..c2987ca7c 100644 --- a/std/datetime.d +++ b/std/datetime.d @@ -30382,7 +30382,7 @@ string tzDatabaseNameToWindowsTZName(string tzName) @safe pure nothrow @nogc case "America/Pangnirtung": return "Eastern Standard Time"; case "America/Paramaribo": return "SA Eastern Standard Time"; case "America/Phoenix": return "US Mountain Standard Time"; - case "America/Port-au-Prince": return "Eastern Standard Time"; + case "America/Port-au-Prince": return "Haiti Standard Time"; case "America/Port_of_Spain": return "SA Western Standard Time"; case "America/Porto_Velho": return "SA Western Standard Time"; case "America/Puerto_Rico": return "SA Western Standard Time"; @@ -30625,6 +30625,7 @@ string tzDatabaseNameToWindowsTZName(string tzName) @safe pure nothrow @nogc case "Pacific/Apia": return "Samoa Standard Time"; case "Pacific/Auckland": return "New Zealand Standard Time"; case "Pacific/Bougainville": return "Central Pacific Standard Time"; + case "Pacific/Easter": return "Easter Island Standard Time"; case "Pacific/Efate": return "Central Pacific Standard Time"; case "Pacific/Enderbury": return "Tonga Standard Time"; case "Pacific/Fakaofo": return "Tonga Standard Time"; @@ -30692,6 +30693,7 @@ string windowsTZNameToTZDatabaseName(string tzName) @safe pure nothrow @nogc case "AUS Central Standard Time": return "Australia/Darwin"; case "AUS Eastern Standard Time": return "Australia/Sydney"; case "Afghanistan Standard Time": return "Asia/Kabul"; + case "Haiti Standard Time": return "America/Port-au-Prince"; case "Alaskan Standard Time": return "America/Anchorage"; case "Altai Standard Time": return "Asia/Barnaul"; case "Arab Standard Time": return "Asia/Riyadh"; @@ -30726,6 +30728,7 @@ string windowsTZNameToTZDatabaseName(string tzName) @safe pure nothrow @nogc // updated recently enough). case "E. Europe Standard Time": return "Europe/Minsk"; case "E. South America Standard Time": return "America/Sao_Paulo"; + case "Easter Island Standard Time": return "Pacific/Easter"; case "Eastern Standard Time": return "America/New_York"; case "Eastern Standard Time (Mexico)": return "America/Cancun"; case "Egypt Standard Time": return "Africa/Cairo"; From bf1dde7ac7be6751d90ef43c6d303d6530beda6a Mon Sep 17 00:00:00 2001 From: Steven Schveighoffer Date: Tue, 24 May 2016 16:09:50 -0400 Subject: [PATCH 4/4] Fix issue 15941 -- rbtree no longer supports classes --- std/container/rbtree.d | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/std/container/rbtree.d b/std/container/rbtree.d index 9b0347efe..bbd6bb355 100644 --- a/std/container/rbtree.d +++ b/std/container/rbtree.d @@ -1711,13 +1711,18 @@ assert(equal(rbt[], [5])); } /** - Formats the RedBlackTree into a sink function. For more info see - $(D std.format.formatValue) - */ - void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) const { - sink("RedBlackTree("); - sink.formatValue(this[], fmt); - sink(")"); + Formats the RedBlackTree into a sink function. For more info see $(D + std.format.formatValue). Note that this only is available when the + element type can be formatted. Otherwise, the default toString from + Object is used. + */ + static if(is(typeof((){FormatSpec!(char) fmt; formatValue((const(char)[]) {}, ConstRange.init, fmt);}))) + { + void toString(scope void delegate(const(char)[]) sink, FormatSpec!char fmt) const { + sink("RedBlackTree("); + sink.formatValue(this[], fmt); + sink(")"); + } } /** @@ -2044,3 +2049,10 @@ unittest import std.algorithm : equal; assert(rt1.upperBound(2).equal([3, 4, 5])); } + +// issue 15941 +unittest +{ + class C {} + RedBlackTree!(C, "cast(void*)a < cast(void*)b") tree; +}