Mercurial > projects > ldc
view dmd/staticassert.c @ 1602:a413ae7329bf
Merge DMD r243: some harmonization with D2 dmd
---
dmd/aggregate.h | 24 ++++-
dmd/attrib.c | 63 ++++++----
dmd/attrib.h | 10 +-
dmd/declaration.h | 5 +-
dmd/func.c | 337 ++++++++++++++++++++++-------------------------------
dmd/mars.c | 2 +-
dmd/mars.h | 7 +
dmd/mtype.h | 13 ++-
dmd/parse.c | 32 ++++-
dmd/parse.h | 14 ++-
dmd/scope.h | 2 +-
11 files changed, 263 insertions(+), 246 deletions(-)
author | Leandro Lucarella <llucax@gmail.com> |
---|---|
date | Wed, 06 Jan 2010 15:18:19 -0300 |
parents | 8026319762be |
children | 1b24e9c7cc26 |
line wrap: on
line source
// Copyright (c) 1999-2007 by Digital Mars // All Rights Reserved // written by Walter Bright // http://www.digitalmars.com // License for redistribution is by either the Artistic License // in artistic.txt, or the GNU General Public License in gnu.txt. // See the included readme.txt for details. #include <stdio.h> #include <string.h> #include <assert.h> #include "dsymbol.h" #include "staticassert.h" #include "expression.h" #include "id.h" #include "hdrgen.h" #include "scope.h" #include "template.h" /********************************* AttribDeclaration ****************************/ StaticAssert::StaticAssert(Loc loc, Expression *exp, Expression *msg) : Dsymbol(Id::empty) { this->loc = loc; this->exp = exp; this->msg = msg; } Dsymbol *StaticAssert::syntaxCopy(Dsymbol *s) { StaticAssert *sa; assert(!s); sa = new StaticAssert(loc, exp->syntaxCopy(), msg ? msg->syntaxCopy() : NULL); return sa; } int StaticAssert::addMember(Scope *sc, ScopeDsymbol *sd, int memnum) { return 0; // we didn't add anything } void StaticAssert::semantic(Scope *sc) { } #include "scope.h" #include "template.h" #include "declaration.h" void StaticAssert::semantic2(Scope *sc) { Expression *e; //printf("StaticAssert::semantic2() %s\n", toChars()); e = exp->semantic(sc); e = e->optimize(WANTvalue | WANTinterpret); if (e->isBool(FALSE)) { if (msg) { HdrGenState hgs; OutBuffer buf; msg = msg->semantic(sc); msg = msg->optimize(WANTvalue | WANTinterpret); hgs.console = 1; msg->toCBuffer(&buf, &hgs); error("%s", buf.toChars()); } else error("(%s) is false", exp->toChars()); if(sc->tinst) sc->tinst->printInstantiationTrace(); if (!global.gag) { fatal(); } } else if (!e->isBool(TRUE)) { error("(%s) is not evaluatable at compile time", exp->toChars()); } } int StaticAssert::oneMember(Dsymbol **ps) { //printf("StaticAssert::oneMember())\n"); *ps = NULL; return TRUE; } void StaticAssert::inlineScan() { } void StaticAssert::toObjFile(int multiobj) { } const char *StaticAssert::kind() { return "static assert"; } void StaticAssert::toCBuffer(OutBuffer *buf, HdrGenState *hgs) { buf->writestring(kind()); buf->writeByte('('); exp->toCBuffer(buf, hgs); if (msg) { buf->writeByte(','); msg->toCBuffer(buf, hgs); } buf->writestring(");"); buf->writenl(); }