mirror of
https://github.com/dlang/phobos.git
synced 2025-05-03 08:30:33 +03:00
Revert "Merge pull request #4747 from MartinNowak/fix15907"
This reverts commitd10780f195
, reversing changes made to01eb06bb38
.
This commit is contained in:
parent
d10780f195
commit
a2c0a90160
4 changed files with 5 additions and 38 deletions
|
@ -210,7 +210,7 @@ EXTRA_MODULES_INTERNAL := $(addprefix \
|
|||
gammafunction errorfunction) $(addprefix std/internal/, \
|
||||
cstring processinit unicode_tables scopebuffer\
|
||||
unicode_comp unicode_decomp unicode_grapheme unicode_norm) \
|
||||
$(addprefix std/internal/test/, dummyrange uda) \
|
||||
$(addprefix std/internal/test/, dummyrange) \
|
||||
$(addprefix std/experimental/ndslice/, internal) \
|
||||
$(addprefix std/algorithm/, internal)
|
||||
|
||||
|
|
|
@ -14,13 +14,3 @@ struct HasPrivateMembers
|
|||
@Attr private int c;
|
||||
private int d;
|
||||
}
|
||||
|
||||
// If getSymbolsByUDA is mixed into the same scope it also returns private members
|
||||
unittest
|
||||
{
|
||||
import std.traits : getSymbolsByUDA, hasUDA;
|
||||
mixin getSymbolsByUDA!(HasPrivateMembers, Attr) symbols;
|
||||
static assert(symbols.getSymbolsByUDA.length == 2);
|
||||
static assert(hasUDA!(symbols.getSymbolsByUDA[0], Attr));
|
||||
static assert(hasUDA!(symbols.getSymbolsByUDA[1], Attr));
|
||||
}
|
||||
|
|
29
std/traits.d
29
std/traits.d
|
@ -6798,37 +6798,14 @@ unittest
|
|||
static assert(getSymbolsByUDA!(C, UDA)[1].stringof == "d");
|
||||
}
|
||||
|
||||
/// mixin getSymbolsByUDA to also find private members
|
||||
unittest
|
||||
{
|
||||
import std.traits;
|
||||
enum UDA;
|
||||
struct S
|
||||
{
|
||||
@UDA int visible;
|
||||
@UDA private int invisible;
|
||||
}
|
||||
// mixin the template instantiation, using a name to avoid namespace pollution
|
||||
mixin getSymbolsByUDA!(S, UDA) symbols;
|
||||
// as the template is instantiated in the current scope, it can see private members
|
||||
// mixin templates don't perform eponymous expansion, so an additional `.getSymbolsByUDA` is needed
|
||||
static assert(symbols.getSymbolsByUDA.length == 2);
|
||||
}
|
||||
|
||||
// #15335: getSymbolsByUDA fails if type has private members
|
||||
unittest
|
||||
{
|
||||
// HasPrivateMembers has private members, but only the ones visible from std.traits are returned
|
||||
// HasPrivateMembers has, well, private members, one of which has a UDA.
|
||||
import std.internal.test.uda;
|
||||
// whether allMembers returns private members, see dmd fix for Issue 15907
|
||||
static if (__traits(allMembers, HasPrivateMembers).length == 2)
|
||||
static assert(getSymbolsByUDA!(HasPrivateMembers, Attr).length == 1);
|
||||
else
|
||||
{
|
||||
static assert(getSymbolsByUDA!(HasPrivateMembers, Attr).length == 2);
|
||||
static assert(hasUDA!(getSymbolsByUDA!(HasPrivateMembers, Attr)[1], Attr));
|
||||
}
|
||||
static assert(getSymbolsByUDA!(HasPrivateMembers, Attr).length == 2);
|
||||
static assert(hasUDA!(getSymbolsByUDA!(HasPrivateMembers, Attr)[0], Attr));
|
||||
static assert(hasUDA!(getSymbolsByUDA!(HasPrivateMembers, Attr)[1], Attr));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -238,7 +238,7 @@ SRC_STD_C_FREEBSD= std\c\freebsd\socket.d
|
|||
SRC_STD_INTERNAL= std\internal\cstring.d std\internal\processinit.d \
|
||||
std\internal\unicode_tables.d std\internal\unicode_comp.d std\internal\unicode_decomp.d \
|
||||
std\internal\unicode_grapheme.d std\internal\unicode_norm.d std\internal\scopebuffer.d \
|
||||
std\internal\test\dummyrange.d std\internal\test\uda.d
|
||||
std\internal\test\dummyrange.d
|
||||
|
||||
SRC_STD_INTERNAL_DIGEST= std\internal\digest\sha_SSSE3.d
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue