From 2e261cd640e5266c569ad224ffbfe229a0315d97 Mon Sep 17 00:00:00 2001 From: Walter Bright Date: Sun, 17 Apr 2011 17:06:18 -0700 Subject: [PATCH] add parent to __traits for QtD support --- src/idgen.c | 3 ++- src/traits.c | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/idgen.c b/src/idgen.c index 6f90d8aaf778..2ba0c34372fe 100644 --- a/src/idgen.c +++ b/src/idgen.c @@ -1,6 +1,6 @@ // Compiler implementation of the D programming language -// Copyright (c) 1999-2010 by Digital Mars +// Copyright (c) 1999-2011 by Digital Mars // All Rights Reserved // written by Walter Bright // http://www.digitalmars.com @@ -312,6 +312,7 @@ Msgtable msgtable[] = { "isLazy" }, { "hasMember" }, { "identifier" }, + { "parent" }, { "getMember" }, { "getOverloads" }, { "getVirtualFunctions" }, diff --git a/src/traits.c b/src/traits.c index 589dbbeb5103..e3e18b5a9685 100644 --- a/src/traits.c +++ b/src/traits.c @@ -1,6 +1,6 @@ // Compiler implementation of the D programming language -// Copyright (c) 1999-2010 by Digital Mars +// Copyright (c) 1999-2011 by Digital Mars // All Rights Reserved // written by Walter Bright // http://www.digitalmars.com @@ -196,6 +196,21 @@ Expression *TraitsExp::semantic(Scope *sc) StringExp *se = new StringExp(loc, s->ident->toChars()); return se->semantic(sc); } + else if (ident == Id::parent) + { + if (dim != 1) + goto Ldimerror; + Object *o = (Object *)args->data[0]; + Dsymbol *s = getDsymbol(o); + if (s) + s = s->toParent(); + if (!s) + { + error("argument %s has no parent", o->toChars()); + goto Lfalse; + } + return (new DsymbolExp(loc, s))->semantic(sc); + } #endif else if (ident == Id::hasMember ||