Skip to content

Commit c85814e

Browse files
author
sprinkle131313
committed
Rename isStaticMember to hasStaticMember.
1 parent 2af098b commit c85814e

File tree

7 files changed

+111
-93
lines changed

7 files changed

+111
-93
lines changed

.vscode/tasks.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
// See https://go.microsoft.com/fwlink/?LinkId=733558
3+
// for the documentation about the tasks.json format
4+
"version": "0.1.0",
5+
"command": "cmd",
6+
"isShellCommand": true,
7+
"args": [
8+
"/C",
9+
"make -f win64.mak phobos32mscoff DMD=../dmd/src/dmd.exe && echo --- done --- || echo --- failed ---"
10+
],
11+
"showOutput": "always"
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Added `std.traits.hasStaticMember` to check whether a symbol is a static member of a type.
2+
-------
3+
import std.traits : hasStaticMember;
4+
5+
struct S
6+
{
7+
static int globalVar;
8+
int localVar;
9+
}
10+
11+
assert( hasStaticMember!(S, "globalVar"));
12+
assert(!hasStaticMember!(S, "localVar"));
13+
-------

changelog/std-traits-isStaticMember.dd

Lines changed: 0 additions & 13 deletions
This file was deleted.

etc/c/zlib/zlib64.lib

175 KB
Binary file not shown.

phobos32mscoff.lib

30.5 MB
Binary file not shown.

phobos64.lib

37.9 MB
Binary file not shown.

std/traits.d

Lines changed: 86 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -3555,29 +3555,35 @@ enum hasMember(T, string name) = __traits(hasMember, T, name);
35553555
}
35563556

35573557
/**
3558-
* Whether the symbol represented by the string, member, is a static member of T.
3558+
* Whether the symbol represented by the string, member, exists and is a static member of T.
35593559
*
35603560
* Params:
35613561
* T = Type containing symbol $(D member).
35623562
* member = Name of symbol to test that resides in $(D T).
35633563
*
35643564
* Returns:
3565-
* $(D true) iff $(D member) is static.
3565+
* $(D true) iff $(D member) exists and is static.
35663566
*/
3567-
template isStaticMember(T, string member)
3568-
if (__traits(hasMember, T, member))
3567+
template hasStaticMember(T, string member)
35693568
{
3570-
import std.meta : Alias;
3571-
alias sym = Alias!(__traits(getMember, T, member));
3569+
static if (__traits(hasMember, T, member))
3570+
{
3571+
import std.meta : Alias;
3572+
alias sym = Alias!(__traits(getMember, T, member));
35723573

3573-
static if (__traits(getOverloads, T, member).length == 0)
3574-
enum bool isStaticMember = __traits(compiles, &sym);
3574+
static if (__traits(getOverloads, T, member).length == 0)
3575+
enum bool hasStaticMember = __traits(compiles, &sym);
3576+
else
3577+
enum bool hasStaticMember = __traits(isStaticFunction, sym);
3578+
}
35753579
else
3576-
enum bool isStaticMember = __traits(isStaticFunction, sym);
3580+
{
3581+
enum bool hasStaticMember = false;
3582+
}
35773583
}
35783584

35793585
///
3580-
unittest
3586+
@safe unittest
35813587
{
35823588
static struct S
35833589
{
@@ -3588,16 +3594,16 @@ unittest
35883594
int i;
35893595
}
35903596

3591-
static assert( isStaticMember!(S, "sf"));
3592-
static assert(!isStaticMember!(S, "f"));
3597+
static assert( hasStaticMember!(S, "sf"));
3598+
static assert(!hasStaticMember!(S, "f"));
35933599

3594-
static assert( isStaticMember!(S, "si"));
3595-
static assert(!isStaticMember!(S, "i"));
3600+
static assert( hasStaticMember!(S, "si"));
3601+
static assert(!hasStaticMember!(S, "i"));
35963602

3597-
static assert(!__traits(compiles, isStaticMember!(S, "hello")));
3603+
static assert(!hasStaticMember!(S, "hello"));
35983604
}
35993605

3600-
unittest
3606+
@safe unittest
36013607
{
36023608
static struct S
36033609
{
@@ -3615,10 +3621,10 @@ unittest
36153621
Y y;
36163622
static Y sy;
36173623

3618-
static void f() {}
3619-
static void f2() pure nothrow @nogc @safe {}
3624+
static void f();
3625+
static void f2() pure nothrow @nogc @safe;
36203626

3621-
shared void g() {}
3627+
shared void g();
36223628

36233629
static void function() fp;
36243630
__gshared void function() gfp;
@@ -3627,14 +3633,14 @@ unittest
36273633
void delegate() dm;
36283634
static void delegate() sd;
36293635

3630-
void m() {}
3631-
final void m2() const pure nothrow @nogc @safe {}
3636+
void m();
3637+
final void m2() const pure nothrow @nogc @safe;
36323638

3633-
inout(int) iom() inout { return 10; }
3634-
static inout(int) iosf(inout int x) { return x; }
3639+
inout(int) iom() inout;
3640+
static inout(int) iosf(inout int x);
36353641

3636-
@property int p() { return 10; }
3637-
static @property int sp() { return 10; }
3642+
@property int p();
3643+
static @property int sp();
36383644
}
36393645

36403646
static class C
@@ -3653,10 +3659,10 @@ unittest
36533659
Y y;
36543660
static Y sy;
36553661

3656-
static void f() {}
3657-
static void f2() pure nothrow @nogc @safe {}
3662+
static void f();
3663+
static void f2() pure nothrow @nogc @safe;
36583664

3659-
shared void g() {}
3665+
shared void g() { }
36603666

36613667
static void function() fp;
36623668
__gshared void function() gfp;
@@ -3666,62 +3672,62 @@ unittest
36663672
static void delegate() sd;
36673673

36683674
void m() {}
3669-
final void m2() const pure nothrow @nogc @safe {}
3675+
final void m2() const pure nothrow @nogc @safe;
36703676

36713677
inout(int) iom() inout { return 10; }
3672-
static inout(int) iosf(inout int x) { return x; }
3678+
static inout(int) iosf(inout int x);
36733679

36743680
@property int p() { return 10; }
3675-
static @property int sp() { return 10; }
3676-
}
3677-
3678-
static assert(!isStaticMember!(S, "X"));
3679-
static assert(!isStaticMember!(S, "Y"));
3680-
static assert(!__traits(compiles, isStaticMember!(S, "Y.i")));
3681-
static assert(!isStaticMember!(S, "S"));
3682-
static assert(!isStaticMember!(S, "C"));
3683-
static assert( isStaticMember!(S, "sx"));
3684-
static assert( isStaticMember!(S, "gx"));
3685-
static assert(!isStaticMember!(S, "y"));
3686-
static assert( isStaticMember!(S, "sy"));
3687-
static assert( isStaticMember!(S, "f"));
3688-
static assert( isStaticMember!(S, "f2"));
3689-
static assert(!isStaticMember!(S, "dm"));
3690-
static assert( isStaticMember!(S, "sd"));
3691-
static assert(!isStaticMember!(S, "g"));
3692-
static assert( isStaticMember!(S, "fp"));
3693-
static assert( isStaticMember!(S, "gfp"));
3694-
static assert(!isStaticMember!(S, "fpm"));
3695-
static assert(!isStaticMember!(S, "m"));
3696-
static assert(!isStaticMember!(S, "m2"));
3697-
static assert(!isStaticMember!(S, "iom"));
3698-
static assert( isStaticMember!(S, "iosf"));
3699-
static assert(!isStaticMember!(S, "p"));
3700-
static assert( isStaticMember!(S, "sp"));
3701-
3702-
static assert(!isStaticMember!(C, "X"));
3703-
static assert(!isStaticMember!(C, "Y"));
3704-
static assert(!__traits(compiles, isStaticMember!(C, "Y.i")));
3705-
static assert(!isStaticMember!(C, "S"));
3706-
static assert(!isStaticMember!(C, "C"));
3707-
static assert( isStaticMember!(C, "sx"));
3708-
static assert( isStaticMember!(C, "gx"));
3709-
static assert(!isStaticMember!(C, "y"));
3710-
static assert( isStaticMember!(C, "sy"));
3711-
static assert( isStaticMember!(C, "f"));
3712-
static assert( isStaticMember!(C, "f2"));
3713-
static assert(!isStaticMember!(S, "dm"));
3714-
static assert( isStaticMember!(S, "sd"));
3715-
static assert(!isStaticMember!(C, "g"));
3716-
static assert( isStaticMember!(C, "fp"));
3717-
static assert( isStaticMember!(C, "gfp"));
3718-
static assert(!isStaticMember!(C, "fpm"));
3719-
static assert(!isStaticMember!(C, "m"));
3720-
static assert(!isStaticMember!(C, "m2"));
3721-
static assert(!isStaticMember!(C, "iom"));
3722-
static assert( isStaticMember!(C, "iosf"));
3723-
static assert(!isStaticMember!(C, "p"));
3724-
static assert( isStaticMember!(C, "sp"));
3681+
static @property int sp();
3682+
}
3683+
3684+
static assert(!hasStaticMember!(S, "X"));
3685+
static assert(!hasStaticMember!(S, "Y"));
3686+
static assert(!hasStaticMember!(S, "Y.i"));
3687+
static assert(!hasStaticMember!(S, "S"));
3688+
static assert(!hasStaticMember!(S, "C"));
3689+
static assert( hasStaticMember!(S, "sx"));
3690+
static assert( hasStaticMember!(S, "gx"));
3691+
static assert(!hasStaticMember!(S, "y"));
3692+
static assert( hasStaticMember!(S, "sy"));
3693+
static assert( hasStaticMember!(S, "f"));
3694+
static assert( hasStaticMember!(S, "f2"));
3695+
static assert(!hasStaticMember!(S, "dm"));
3696+
static assert( hasStaticMember!(S, "sd"));
3697+
static assert(!hasStaticMember!(S, "g"));
3698+
static assert( hasStaticMember!(S, "fp"));
3699+
static assert( hasStaticMember!(S, "gfp"));
3700+
static assert(!hasStaticMember!(S, "fpm"));
3701+
static assert(!hasStaticMember!(S, "m"));
3702+
static assert(!hasStaticMember!(S, "m2"));
3703+
static assert(!hasStaticMember!(S, "iom"));
3704+
static assert( hasStaticMember!(S, "iosf"));
3705+
static assert(!hasStaticMember!(S, "p"));
3706+
static assert( hasStaticMember!(S, "sp"));
3707+
3708+
static assert(!hasStaticMember!(C, "X"));
3709+
static assert(!hasStaticMember!(C, "Y"));
3710+
static assert(!hasStaticMember!(C, "Y.i"));
3711+
static assert(!hasStaticMember!(C, "S"));
3712+
static assert(!hasStaticMember!(C, "C"));
3713+
static assert( hasStaticMember!(C, "sx"));
3714+
static assert( hasStaticMember!(C, "gx"));
3715+
static assert(!hasStaticMember!(C, "y"));
3716+
static assert( hasStaticMember!(C, "sy"));
3717+
static assert( hasStaticMember!(C, "f"));
3718+
static assert( hasStaticMember!(C, "f2"));
3719+
static assert(!hasStaticMember!(S, "dm"));
3720+
static assert( hasStaticMember!(S, "sd"));
3721+
static assert(!hasStaticMember!(C, "g"));
3722+
static assert( hasStaticMember!(C, "fp"));
3723+
static assert( hasStaticMember!(C, "gfp"));
3724+
static assert(!hasStaticMember!(C, "fpm"));
3725+
static assert(!hasStaticMember!(C, "m"));
3726+
static assert(!hasStaticMember!(C, "m2"));
3727+
static assert(!hasStaticMember!(C, "iom"));
3728+
static assert( hasStaticMember!(C, "iosf"));
3729+
static assert(!hasStaticMember!(C, "p"));
3730+
static assert( hasStaticMember!(C, "sp"));
37253731
}
37263732

37273733
/**

0 commit comments

Comments
 (0)