Mercurial > projects > ldc
diff dmd/expression.c @ 1195:e961851fb8be
Merged DMD 1.042.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Fri, 03 Apr 2009 17:59:34 +0200 |
parents | ab186e535e72 |
children | 79758fd2f48a |
line wrap: on
line diff
--- a/dmd/expression.c Fri Apr 03 17:02:52 2009 +0200 +++ b/dmd/expression.c Fri Apr 03 17:59:34 2009 +0200 @@ -34,15 +34,6 @@ #endif #endif -#if IN_GCC -// Issues with using -include total.h (defines integer_t) and then complex.h fails... -#undef integer_t -#endif - -#ifdef __APPLE__ -#define integer_t dmd_integer_t -#endif - #include "rmem.h" //#include "port.h" @@ -700,7 +691,6 @@ arg = arg->checkToPointer(); } #endif - #if DMDV2 if (tb->ty == Tstruct && !(p->storageClass & (STCref | STCout))) { @@ -1000,7 +990,7 @@ return e1; } -integer_t Expression::toInteger() +dinteger_t Expression::toInteger() { //printf("Expression %s\n", Token::toChars(op)); error("Integer constant expression expected instead of %s", toChars()); @@ -1289,7 +1279,7 @@ /******************************** IntegerExp **************************/ -IntegerExp::IntegerExp(Loc loc, integer_t value, Type *type) +IntegerExp::IntegerExp(Loc loc, dinteger_t value, Type *type) : Expression(loc, TOKint64, sizeof(IntegerExp)) { //printf("IntegerExp(value = %lld, type = '%s')\n", value, type ? type->toChars() : ""); @@ -1303,7 +1293,7 @@ this->value = value; } -IntegerExp::IntegerExp(integer_t value) +IntegerExp::IntegerExp(dinteger_t value) : Expression(0, TOKint64, sizeof(IntegerExp)) { this->type = Type::tint32; @@ -1333,7 +1323,7 @@ #endif } -integer_t IntegerExp::toInteger() +dinteger_t IntegerExp::toInteger() { Type *t; t = type; @@ -1355,11 +1345,12 @@ case Tint64: value = (d_int64) value; break; case Tuns64: value = (d_uns64) value; break; case Tpointer: - // FIXME: Other pointer widths than 32 and 64? if (PTRSIZE == 4) value = (d_uns32) value; - else + else if (PTRSIZE == 8) value = (d_uns64) value; + else + assert(0); break; case Tenum: @@ -1423,7 +1414,7 @@ if (!type) { // Determine what the type of this number is - integer_t number = value; + dinteger_t number = value; if (number & 0x8000000000000000LL) type = Type::tuns64; @@ -1451,7 +1442,7 @@ void IntegerExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) { - integer_t v = toInteger(); + dinteger_t v = toInteger(); if (type) { Type *t = type; @@ -1520,7 +1511,7 @@ break; case Tuns64: - L4: + L4: buf->printf("%juLU", v); break; @@ -1533,11 +1524,12 @@ buf->writestring("cast("); buf->writestring(t->toChars()); buf->writeByte(')'); - // FIXME: Other pointer widths than 32 and 64? if (PTRSIZE == 4) goto L3; - else + else if (PTRSIZE == 8) goto L4; + else + assert(0); default: /* This can happen if errors, such as @@ -1592,7 +1584,7 @@ return mem.strdup(buffer); } -integer_t RealExp::toInteger() +dinteger_t RealExp::toInteger() { #ifdef IN_GCC return toReal().toInt(); @@ -1817,7 +1809,7 @@ return mem.strdup(buffer); } -integer_t ComplexExp::toInteger() +dinteger_t ComplexExp::toInteger() { #ifdef IN_GCC return (sinteger_t) toReal().toInt(); @@ -2163,9 +2155,11 @@ imp = s->isImport(); if (imp) { - ScopeExp *ie; - - ie = new ScopeExp(loc, imp->pkg); + if (!imp->pkg) + { error("forward reference of import %s", imp->toChars()); + return this; + } + ScopeExp *ie = new ScopeExp(loc, imp->pkg); return ie->semantic(sc); } pkg = s->isPackage(); @@ -3650,7 +3644,7 @@ if (cd->aggNew) { - // Prepend the size_t size argument to newargs[] + // Prepend the size argument to newargs[] Expression *e = new IntegerExp(loc, cd->size(loc), Type::tsize_t); if (!newargs) newargs = new Expressions(); @@ -4319,7 +4313,8 @@ void FuncExp::toCBuffer(OutBuffer *buf, HdrGenState *hgs) { - buf->writestring(fd->toChars()); + fd->toCBuffer(buf, hgs); + //buf->writestring(fd->toChars()); } @@ -7593,8 +7588,8 @@ e2 = e2->optimize(WANTvalue); if (e2->op == TOKint64) { - integer_t index = e2->toInteger(); - integer_t length = tsa->dim->toInteger(); + dinteger_t index = e2->toInteger(); + dinteger_t length = tsa->dim->toInteger(); if (index < 0 || index >= length) error("array index [%lld] is outside array bounds [0 .. %lld]", index, length);