diff -uNr dmd-0.124/dmd/src/dmd/class.c dmd-0.125/dmd/src/dmd/class.c --- dmd-0.124/dmd/src/dmd/class.c 2005-05-12 18:50:32.000000000 +0200 +++ dmd-0.125/dmd/src/dmd/class.c 2005-05-20 11:09:24.000000000 +0200 @@ -1015,8 +1015,8 @@ void BaseClass::copyBaseInterfaces(Array *vtblInterfaces) { //printf("+copyBaseInterfaces(), %s\n", base->toChars()); - if (baseInterfaces_dim) - return; +// if (baseInterfaces_dim) +// return; baseInterfaces_dim = base->interfaces_dim; baseInterfaces = (BaseClass *)mem.calloc(baseInterfaces_dim, sizeof(BaseClass)); diff -uNr dmd-0.124/dmd/src/dmd/cond.c dmd-0.125/dmd/src/dmd/cond.c --- dmd-0.124/dmd/src/dmd/cond.c 2005-05-15 11:56:00.000000000 +0200 +++ dmd-0.125/dmd/src/dmd/cond.c 2005-05-20 01:00:28.000000000 +0200 @@ -253,6 +253,7 @@ int IftypeCondition::include(Scope *sc, ScopeDsymbol *sd) { + //printf("IftypeCondition::include()\n"); if (inc == 0) { if (!sc) @@ -311,7 +312,10 @@ /* Evaluate to TRUE if targ matches tspec */ tspec = tspec->semantic(loc, sc); - if (targ->equals(tspec)) + //printf("targ = %s\n", targ->toChars()); + //printf("tspec = %s\n", tspec->toChars()); + //if (targ->equals(tspec)) + if (targ->implicitConvTo(tspec)) inc = 1; else inc = 2; diff -uNr dmd-0.124/dmd/src/dmd/expression.c dmd-0.125/dmd/src/dmd/expression.c --- dmd-0.124/dmd/src/dmd/expression.c 2005-05-18 21:17:52.000000000 +0200 +++ dmd-0.125/dmd/src/dmd/expression.c 2005-05-20 01:00:08.000000000 +0200 @@ -3079,7 +3079,7 @@ e1 = e; } else - { error("function expected before (), not '%s'", e1->type->toChars()); + { error("function expected before (), not %s of type %s", e1->toChars(), e1->type->toChars()); type = Type::terror; return this; } diff -uNr dmd-0.124/dmd/src/dmd/mars.c dmd-0.125/dmd/src/dmd/mars.c --- dmd-0.124/dmd/src/dmd/mars.c 2005-05-14 23:15:46.000000000 +0200 +++ dmd-0.125/dmd/src/dmd/mars.c 2005-05-19 16:13:46.000000000 +0200 @@ -49,7 +49,7 @@ copyright = "Copyright (c) 1999-2005 by Digital Mars"; written = "written by Walter Bright"; - version = "v0.124"; + version = "v0.125"; global.structalign = 8; memset(¶ms, 0, sizeof(Param)); diff -uNr dmd-0.124/dmd/src/phobos/internal/gc/gc.d dmd-0.125/dmd/src/phobos/internal/gc/gc.d --- dmd-0.124/dmd/src/phobos/internal/gc/gc.d 2005-05-19 11:18:34.000000000 +0200 +++ dmd-0.125/dmd/src/phobos/internal/gc/gc.d 2005-05-20 15:41:14.000000000 +0200 @@ -28,6 +28,7 @@ //debug = PRINTF; +import std.c.stdarg; import std.c.stdlib; import std.string; import gcx; @@ -219,7 +220,10 @@ if (length == 0 || size == 0) result = 0; else - { void* q = cast(void*)(&size + 1); // pointer to initializer + { + //void* q = cast(void*)(&size + 1); // pointer to initializer + va_list q; + va_start!(uint)(q, size); // q is pointer to ... initializer p = _gc.malloc(length * size + 1); debug(PRINTF) printf(" p = %p\n", p); if (size == 1) @@ -231,6 +235,7 @@ memcpy(p + u * size, q, size); } } + va_end(q); result = cast(ulong)length + (cast(ulong)cast(uint)p << 32); } return result; diff -uNr dmd-0.124/dmd/src/phobos/std/stream.d dmd-0.125/dmd/src/phobos/std/stream.d --- dmd-0.124/dmd/src/phobos/std/stream.d 2005-05-19 11:18:32.000000000 +0200 +++ dmd-0.125/dmd/src/phobos/std/stream.d 2005-05-20 15:41:14.000000000 +0200 @@ -169,6 +169,8 @@ int scanf(char[] format, ...); size_t available(); + bool eof(); + bool isOpen(); } // Interface for writable streams @@ -235,6 +237,10 @@ // writes data with trailing newline and returns self Stream writefln(...); + + void flush(); + void close(); + bool isOpen(); } // base class for all streams; not really abstract,